From edaf6c847dbca166753b334313dd342ea61eb725 Mon Sep 17 00:00:00 2001 From: Daniel Main Date: Tue, 18 Jan 2022 18:35:46 +0100 Subject: [PATCH 001/204] Update develop with release 4.7.0 (#2819) Co-authored-by: Daniel Main Co-authored-by: Lucas Co-authored-by: Jean-Baptiste Giraudeau --- CHANGELOG.md | 6 +++++- installers/common/MacInstaller.hs | 2 ++ package.json | 2 +- source/renderer/app/config/votingConfig.js | 6 +++--- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f49216e1df..c25991844b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog -## vNext +## 4.7.0 + +### Features + +- Updated Catalyst dates ([PR 2812](https://github.com/input-output-hk/daedalus/pull/2812)) ### Fixes diff --git a/installers/common/MacInstaller.hs b/installers/common/MacInstaller.hs index fc3ec70d7d..666907a6d0 100644 --- a/installers/common/MacInstaller.hs +++ b/installers/common/MacInstaller.hs @@ -152,6 +152,8 @@ sign_cmd "$ABS_PATH/Contents/Resources/app/build/HID.node" sign_cmd "$ABS_PATH/Contents/Resources/app/node_modules/keccak/bin/darwin-x64-"*"/keccak.node" sign_cmd "$ABS_PATH/Contents/Resources/app/node_modules/keccak/build/Release/addon.node" sign_cmd "$ABS_PATH/Contents/Resources/app/node_modules/keccak/prebuilds/darwin-x64/node.napi.node" +sign_cmd "$ABS_PATH/Contents/Resources/app/node_modules/blake-hash/prebuilds/darwin-x64/node.napi.node" +sign_cmd "$ABS_PATH/Contents/Resources/app/node_modules/tiny-secp256k1/build/Release/secp256k1.node" # Sign the whole component deeply sign_cmd "$ABS_PATH" diff --git a/package.json b/package.json index f56b9247ca..f14320cc4f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "daedalus", "productName": "Daedalus", - "version": "4.6.0", + "version": "4.7.0", "description": "Cryptocurrency Wallet", "main": "./dist/main/index.js", "scripts": { diff --git a/source/renderer/app/config/votingConfig.js b/source/renderer/app/config/votingConfig.js index ff3464abd0..3cccc2053c 100644 --- a/source/renderer/app/config/votingConfig.js +++ b/source/renderer/app/config/votingConfig.js @@ -10,8 +10,8 @@ export const VOTING_REGISTRATION_MIN_TRANSACTION_CONFIRMATIONS = isDev ? 2 : 10; export const VOTING_REGISTRATION_TRANSACTION_POLLING_INTERVAL = 1000; // 1 second | unit: milliseconds export const VOTING_PHASE_CHECK_INTERVAL = 60000; // 60 seconds | unit: milliseconds export const VOTING_SNAPSHOT_DATE = new Date('Jan 6, 2022, 11:00 UTC'); -export const VOTING_CAST_START_DATE = new Date('Jan 13, 2022, 11:00 UTC'); -export const VOTING_CAST_END_DATE = new Date('Jan 27, 2022, 11:00 UTC'); -export const VOTING_RESULTS_DATE = new Date('Feb 3, 2022'); +export const VOTING_CAST_START_DATE = new Date('Jan 20, 2022, 11:00 UTC'); +export const VOTING_CAST_END_DATE = new Date('Feb 3, 2022, 11:00 UTC'); +export const VOTING_RESULTS_DATE = new Date('Feb 10, 2022'); export const VOTING_NEW_SNAPSHOT_DATE = new Date('Apr 7, 2022, 11:00 UTC'); export const VOTING_REWARD = 1040000; // 1,040,000 USD | Unit: dollar From a98dfca7646634e9e1ffb04ada4395c8f08cf193 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 20 Jan 2022 12:59:58 +0000 Subject: [PATCH 002/204] [DDW-891] update cardano-node to 1.33.0 (#2822) Co-authored-by: Daniel Main --- CHANGELOG.md | 6 ++++++ nix/sources.json | 16 ++++++++-------- source/main/environment.js | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c25991844b..d2db1dff4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## vNext + +### Chores + +- Updated CWB and Cardano Node ([PR 2822](https://github.com/input-output-hk/daedalus/pull/2822)) + ## 4.7.0 ### Features diff --git a/nix/sources.json b/nix/sources.json index 7c132cb34e..940f079cd6 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -1,14 +1,14 @@ { "cardano-node": { - "branch": "tags/1.32.1", + "branch": "tags/1.33.0", "description": null, "homepage": null, "owner": "input-output-hk", "repo": "cardano-node", - "rev": "4f65fb9a27aa7e3a1873ab4211e412af780a3648", - "sha256": "00k9fqrm0gphjji23x0nc9z6bqh8bqrncgivn3mi3csacjzicrrx", + "rev": "814df2c146f5d56f8c35a681fe75e85b905aed5d", + "sha256": "1hr00wqzmcyc3x0kp2hyw78rfmimf6z4zd4vv85b9zv3nqbjgrik", "type": "tarball", - "url": "https://github.com/input-output-hk/cardano-node/archive/4f65fb9a27aa7e3a1873ab4211e412af780a3648.tar.gz", + "url": "https://github.com/input-output-hk/cardano-node/archive/814df2c146f5d56f8c35a681fe75e85b905aed5d.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "cardano-shell": { @@ -24,15 +24,15 @@ "url_template": "https://github.com///archive/.tar.gz" }, "cardano-wallet": { - "branch": "anviking/ADP-1081/node-alonzo-rc", + "branch": "master", "description": "Official Wallet Backend & API for Cardano decentralized", "homepage": null, "owner": "input-output-hk", "repo": "cardano-wallet", - "rev": "760140e238a5fbca61d1b286d7a80ece058dc729", - "sha256": "014njpddrlqm9bbab636h2gf58zkm0bx04i1jsn07vh5j3k0gri6", + "rev": "a5085acbd2670c24251cf8d76a4e83c77a2679ba", + "sha256": "1apzfy7qdgf6l0lb3icqz3rvaq2w3a53xq6wvhqnbfi8i7cacy03", "type": "tarball", - "url": "https://github.com/input-output-hk/cardano-wallet/archive/760140e238a5fbca61d1b286d7a80ece058dc729.tar.gz", + "url": "https://github.com/input-output-hk/cardano-wallet/archive/a5085acbd2670c24251cf8d76a4e83c77a2679ba.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "gitignore": { diff --git a/source/main/environment.js b/source/main/environment.js index 650ef064e1..17b15a4ff9 100644 --- a/source/main/environment.js +++ b/source/main/environment.js @@ -41,7 +41,7 @@ const isDevelopment = checkIsDevelopment(NETWORK); const isWatchMode = process.env.IS_WATCH_MODE; const keepLocalClusterRunning = process.env.KEEP_LOCAL_CLUSTER_RUNNING; const API_VERSION = process.env.API_VERSION || 'dev'; -const NODE_VERSION = '1.32.1'; // TODO: pick up this value from process.env +const NODE_VERSION = '1.33.0'; // TODO: pick up this value from process.env const mainProcessID = get(process, 'ppid', '-'); const rendererProcessID = process.pid; const PLATFORM = os.platform(); From e71b4de39ea92c80364d9d1b6781d162082758f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Mas=C5=82owski?= Date: Thu, 20 Jan 2022 20:22:33 +0100 Subject: [PATCH 003/204] [DDW-916] Change the message for syncing the blockchain (#2827) --- CHANGELOG.md | 4 ++++ .../loading/syncing-connecting/SyncingConnectingStatus.js | 4 ++-- source/renderer/app/i18n/locales/defaultMessages.json | 4 ++-- source/renderer/app/i18n/locales/en-US.json | 2 +- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2db1dff4c..5aa97a5984 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## vNext +### Features + +- Updated message about Cardano node sync on the initial screen ([PR 2827](https://github.com/input-output-hk/daedalus/pull/2827)) + ### Chores - Updated CWB and Cardano Node ([PR 2822](https://github.com/input-output-hk/daedalus/pull/2822)) diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js index 680257460e..b3ab8fee73 100644 --- a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js +++ b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js @@ -80,9 +80,9 @@ const messages = defineMessages({ verifyingBlockchain: { id: 'loading.screen.verifyingBlockchainMessage', defaultMessage: - '!!!Verifying the blockchain ({verificationProgress}% complete)', + '!!!Cardano node is currently syncing. This process can take several hours.', description: - 'Message "Verifying the blockchain (65% complete) ..." on the loading screen.', + 'Message on the loading screen informing that sync process could be very long', }, }); diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index 8d2d60f356..b1c7c7e428 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -2223,8 +2223,8 @@ } }, { - "defaultMessage": "!!!Verifying the blockchain ({verificationProgress}% complete)", - "description": "Message \"Verifying the blockchain (65% complete) ...\" on the loading screen.", + "defaultMessage": "!!!Cardano node is currently syncing. This process can take several hours.", + "description": "Message on the loading screen informing that sync process could be very long", "end": { "column": 3, "line": 86 diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index c193bf71ba..fc304c73fe 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -222,7 +222,7 @@ "loading.screen.unrecoverableCardanoMessage": "Unable to start Cardano node. Please submit a support request.", "loading.screen.updatedCardanoMessage": "Cardano node updated", "loading.screen.updatingCardanoMessage": "Updating Cardano node", - "loading.screen.verifyingBlockchainMessage": "Verifying the blockchain ({verificationProgress}% complete) ", + "loading.screen.verifyingBlockchainMessage": "Cardano node is currently syncing. This process can take several hours.", "news.newsfeed.empty": "Newsfeed is empty", "news.newsfeed.noFetch": "Trying to fetch the newsfeed...", "news.newsfeed.title": "Newsfeed", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 7b3b031874..049931c445 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -222,7 +222,7 @@ "loading.screen.unrecoverableCardanoMessage": "Cardanoノードを起動できません。サポートリクエストを送信してください。", "loading.screen.updatedCardanoMessage": "Cardanoノードが更新されました", "loading.screen.updatingCardanoMessage": "Cardanoノードを更新しています", - "loading.screen.verifyingBlockchainMessage": "ブロックチェーンを検証しています({verificationProgress}%完了)", + "loading.screen.verifyingBlockchainMessage": "Cardanoノードは現在同期中です。この処理には数時間かかる場合もあります。", "news.newsfeed.empty": "ニュースフィードは空です", "news.newsfeed.noFetch": "ニュースフィードを読み込んでいます...", "news.newsfeed.title": "ニュースフィード", From a1bfcdd2041c50a828783e7b188da29cb55304d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Mas=C5=82owski?= Date: Fri, 21 Jan 2022 11:09:36 +0100 Subject: [PATCH 004/204] [DDW-916] Update second message on the initial screen to in include part regarding the waiting time (#2831) --- CHANGELOG.md | 2 +- .../loading/syncing-connecting/SyncingConnectingStatus.js | 4 ++-- source/renderer/app/i18n/locales/defaultMessages.json | 4 ++-- source/renderer/app/i18n/locales/en-US.json | 4 ++-- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aa97a5984..f2cf480cc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Features -- Updated message about Cardano node sync on the initial screen ([PR 2827](https://github.com/input-output-hk/daedalus/pull/2827)) +- Updated messages about Cardano node sync on the initial screen ([PR 2827](https://github.com/input-output-hk/daedalus/pull/2827)) ([PR 2831](https://github.com/input-output-hk/daedalus/pull/2831)) ### Chores diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js index b3ab8fee73..6e2461557a 100644 --- a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js +++ b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js @@ -15,7 +15,7 @@ const messages = defineMessages({ startingDescription: { id: 'loading.screen.startingCardanoDescription', defaultMessage: - '!!!This process validates the integrity of local blockchain data and could take several minutes.', + '!!!This process validates the integrity of local blockchain data.', description: 'Message "Starting Cardano node" on the loading screen.', }, stopping: { @@ -80,7 +80,7 @@ const messages = defineMessages({ verifyingBlockchain: { id: 'loading.screen.verifyingBlockchainMessage', defaultMessage: - '!!!Cardano node is currently syncing. This process can take several hours.', + '!!!Cardano node is currently syncing. This process can take several hours', description: 'Message on the loading screen informing that sync process could be very long', }, diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index b1c7c7e428..b0e9975af4 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -2055,7 +2055,7 @@ } }, { - "defaultMessage": "!!!This process validates the integrity of local blockchain data and could take several minutes.", + "defaultMessage": "!!!This process validates the integrity of local blockchain data.", "description": "Message \"Starting Cardano node\" on the loading screen.", "end": { "column": 3, @@ -2223,7 +2223,7 @@ } }, { - "defaultMessage": "!!!Cardano node is currently syncing. This process can take several hours.", + "defaultMessage": "!!!Cardano node is currently syncing. This process can take several hours", "description": "Message on the loading screen informing that sync process could be very long", "end": { "column": 3, diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index fc304c73fe..5214f8cd71 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -214,7 +214,7 @@ "loading.screen.reportIssue.connecting.text": "Having trouble connecting to network?", "loading.screen.reportIssue.downloadLogsLinkLabel": "Download logs", "loading.screen.reportIssue.reportIssueButtonUrl": "https://iohk.zendesk.com/hc/en-us/requests/new/", - "loading.screen.startingCardanoDescription": "This process validates the integrity of local blockchain data and could take several minutes.", + "loading.screen.startingCardanoDescription": "This process validates the integrity of local blockchain data.", "loading.screen.startingCardanoMessage": "Starting Cardano node", "loading.screen.stoppedCardanoMessage": "Cardano node stopped", "loading.screen.stoppingCardanoDescription": "This process updates the databases and could take several minutes.
To preserve data integrity, please wait until this process is complete.", @@ -222,7 +222,7 @@ "loading.screen.unrecoverableCardanoMessage": "Unable to start Cardano node. Please submit a support request.", "loading.screen.updatedCardanoMessage": "Cardano node updated", "loading.screen.updatingCardanoMessage": "Updating Cardano node", - "loading.screen.verifyingBlockchainMessage": "Cardano node is currently syncing. This process can take several hours.", + "loading.screen.verifyingBlockchainMessage": "Cardano node is currently syncing. This process can take several hours", "news.newsfeed.empty": "Newsfeed is empty", "news.newsfeed.noFetch": "Trying to fetch the newsfeed...", "news.newsfeed.title": "Newsfeed", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 049931c445..bff3a92e22 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -214,7 +214,7 @@ "loading.screen.reportIssue.connecting.text": "接続に問題がありますか", "loading.screen.reportIssue.downloadLogsLinkLabel": "ログをダウンロードする", "loading.screen.reportIssue.reportIssueButtonUrl": "https://iohk.zendesk.com/hc/ja/requests/new/", - "loading.screen.startingCardanoDescription": "このプロセスはローカルブロックチェーンデータの完全性を検証するもので、数分間かかる場合があります。", + "loading.screen.startingCardanoDescription": "このプロセスは、ローカルブロックチェーンデータの整合性を検証します。", "loading.screen.startingCardanoMessage": "Cardanoノードを起動しています", "loading.screen.stoppedCardanoMessage": "Cardanoノードは停止しました", "loading.screen.stoppingCardanoDescription": "このプロセスはデータベースを更新するもので、数分間かかる場合があります。
データの完全性を保つために、このプロセスが完了するまでお待ちください。", From e77e37fe6fad3c4e782414f70eb2be8c4a2e013e Mon Sep 17 00:00:00 2001 From: Nikola Glumac Date: Fri, 21 Jan 2022 11:21:07 +0100 Subject: [PATCH 005/204] [DDW-862] Enable dynamic RTS flags setting (#2758) Co-authored-by: Daniel Main Co-authored-by: Danilo Prates Co-authored-by: Marcin Mazurek --- CHANGELOG.md | 1 + source/main/cardano/CardanoNode.js | 1 + source/main/cardano/CardanoWalletLauncher.js | 16 ++++++--- source/main/cardano/setup.js | 5 ++- source/main/config.js | 4 +++ source/main/index.js | 23 ++++++++++-- source/main/locales/en-US.json | 10 +++++- source/main/locales/ja-JP.json | 10 +++++- source/main/menus/MenuActions.types.js | 1 + source/main/menus/osx.js | 23 ++++++------ source/main/menus/win-linux.js | 14 +++++++- source/main/utils/buildAppMenus.js | 37 +++++++++++++++++++- source/main/utils/rtsFlags.js | 26 ++++++++++++++ source/main/utils/safeExitWithCode.js | 13 +++++++ source/main/windows/main.js | 6 +++- 15 files changed, 168 insertions(+), 22 deletions(-) create mode 100644 source/main/utils/rtsFlags.js diff --git a/CHANGELOG.md b/CHANGELOG.md index f2cf480cc4..262da4f27b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Features +- Added dynamic RTS flags setting ([PR 2758](https://github.com/input-output-hk/daedalus/pull/2758/files)) - Updated messages about Cardano node sync on the initial screen ([PR 2827](https://github.com/input-output-hk/daedalus/pull/2827)) ([PR 2831](https://github.com/input-output-hk/daedalus/pull/2831)) ### Chores diff --git a/source/main/cardano/CardanoNode.js b/source/main/cardano/CardanoNode.js index c32a2f3f08..3d614ac5bb 100644 --- a/source/main/cardano/CardanoNode.js +++ b/source/main/cardano/CardanoNode.js @@ -77,6 +77,7 @@ export type CardanoNodeConfig = { cliBin: string, // Path to cardano-cli executable isStaging: boolean, metadataUrl?: string, + rtsFlags: Array, }; const CARDANO_UPDATE_EXIT_CODE = 20; diff --git a/source/main/cardano/CardanoWalletLauncher.js b/source/main/cardano/CardanoWalletLauncher.js index 7bc19ae6b1..1498b19810 100644 --- a/source/main/cardano/CardanoWalletLauncher.js +++ b/source/main/cardano/CardanoWalletLauncher.js @@ -36,6 +36,7 @@ export type WalletOptions = { cliBin: string, isStaging: boolean, metadataUrl?: string, + rtsFlags: Array, }; export async function CardanoWalletLauncher( @@ -54,6 +55,7 @@ export async function CardanoWalletLauncher( cliBin, isStaging, metadataUrl, + rtsFlags, } = walletOptions; // TODO: Update launcher config to pass number const syncToleranceSeconds = parseInt(syncTolerance.replace('s', ''), 10); @@ -140,10 +142,16 @@ export async function CardanoWalletLauncher( }); // RTS flags: - nodeConfig.rtsOpts = []; - logger.info('Launching Cardano Node with RTS flags', { - rtsFlags: nodeConfig.rtsOpts, - }); + // 1) "-H4G -M6553M -c70" 16.0% peak RSS reduction and a sub-percentile CPU regression + // 2) "-H4G -M6553M" 18.5% peak RSS reduction and a second-best CPU regression + if (!!rtsFlags && rtsFlags?.length > 0) { + nodeConfig.rtsOpts = rtsFlags; + logger.info('Launching Cardano Node with RTS flags', { + rtsFlags, + }); + } else { + logger.info('Launching Cardano Node without RTS flags'); + } merge(launcherConfig, { nodeConfig, diff --git a/source/main/cardano/setup.js b/source/main/cardano/setup.js index 6028e680e5..28c77821ab 100644 --- a/source/main/cardano/setup.js +++ b/source/main/cardano/setup.js @@ -48,10 +48,12 @@ const restartCardanoNode = async (node: CardanoNode) => { * * @param launcherConfig {LauncherConfig} * @param mainWindow + * @param rtsFlags flags used to start cardano-node */ export const setupCardanoNode = ( launcherConfig: LauncherConfig, - mainWindow: BrowserWindow + mainWindow: BrowserWindow, + rtsFlags: Array ): CardanoNode => { const { logsPrefix, @@ -77,6 +79,7 @@ export const setupCardanoNode = ( configPath, syncTolerance, cliBin, + rtsFlags, isStaging, metadataUrl, startupTimeout: NODE_STARTUP_TIMEOUT, diff --git a/source/main/config.js b/source/main/config.js index e71e4a409d..ea22886830 100644 --- a/source/main/config.js +++ b/source/main/config.js @@ -173,7 +173,11 @@ export const BLOCK_REPLAY_PROGRESS_CHECK_INTERVAL = 1 * 1000; // 1 seconds | uni export const FALLBACK_TOKEN_METADATA_SERVER_URL = 'https://metadata.cardano-testnet.iohkdev.io'; +export const MINIMUM_AMOUNT_OF_RAM_FOR_RTS_FLAGS = 16 * 1024 * 1024 * 1024; // 16gb RAM + // Used by mock-token-metadata-server export const MOCK_TOKEN_METADATA_SERVER_URL = 'http://localhost'; export const MOCK_TOKEN_METADATA_SERVER_PORT = process.env.MOCK_TOKEN_METADATA_SERVER_PORT || 0; + +export const RTS_FLAGS = ['-c']; diff --git a/source/main/index.js b/source/main/index.js index d7eb8ef405..fcf6526184 100644 --- a/source/main/index.js +++ b/source/main/index.js @@ -22,12 +22,15 @@ import { launcherConfig, pubLogsFolderPath, stateDirectoryPath, + RTS_FLAGS, + MINIMUM_AMOUNT_OF_RAM_FOR_RTS_FLAGS, } from './config'; import { setupCardanoNode } from './cardano/setup'; import { CardanoNode } from './cardano/CardanoNode'; import { safeExitWithCode } from './utils/safeExitWithCode'; import { buildAppMenus } from './utils/buildAppMenus'; import { getLocale } from './utils/getLocale'; +import { getRtsFlags, setRtsFlagsAndRestart } from './utils/rtsFlags'; import { detectSystemLocale } from './utils/detectSystemLocale'; import { ensureXDGDataIsSet } from './cardano/config'; import { rebuildApplicationMenu } from './ipc/rebuild-application-menu'; @@ -117,6 +120,7 @@ const onAppReady = async () => { const cpu = os.cpus(); const platformVersion = os.release(); const ram = JSON.stringify(os.totalmem(), null, 2); + const startTime = new Date().toISOString(); // first checks for Japanese locale, otherwise returns english const systemLocale = detectSystemLocale(); @@ -162,8 +166,23 @@ const onAppReady = async () => { ); saveWindowBoundsOnSizeAndPositionChange(mainWindow, requestElectronStore); - logger.info('Setting up Cardano Node...'); - cardanoNode = setupCardanoNode(launcherConfig, mainWindow); + const getCurrentRtsFlags = () => { + const rtsFlagsFromStorage = getRtsFlags(network); + if (!rtsFlagsFromStorage) { + if (os.totalmem() < MINIMUM_AMOUNT_OF_RAM_FOR_RTS_FLAGS) { + setRtsFlagsAndRestart(environment.network, RTS_FLAGS); + return RTS_FLAGS; + } + return []; + } + return rtsFlagsFromStorage; + }; + + const rtsFlags = getCurrentRtsFlags(); + logger.info( + `Setting up Cardano Node... with flags: ${JSON.stringify(rtsFlags)}` + ); + cardanoNode = setupCardanoNode(launcherConfig, mainWindow, rtsFlags); buildAppMenus(mainWindow, cardanoNode, userLocale, { isNavigationEnabled: false, diff --git a/source/main/locales/en-US.json b/source/main/locales/en-US.json index 977b539f85..7fdc70661b 100644 --- a/source/main/locales/en-US.json +++ b/source/main/locales/en-US.json @@ -22,6 +22,13 @@ "menu.edit.undo": "Undo", "menu.helpSupport": "Help", "menu.helpSupport.blankScreenFix": "Blank Screen Fix", + "menu.helpSupport.usingRtsFlags": "Using RTS flags", + "menu.helpSupport.rtsFlagsDialogCancel": "Cancel", + "menu.helpSupport.rtsFlagsDialogConfirm": "Yes", + "menu.helpSupport.enableRtsFlagsDialogMessage": "When enabled, the Cardano node will attempt to reduce its RAM usage", + "menu.helpSupport.enableRtsFlagsDialogTitle": "Enable RAM management (RTS Flags)", + "menu.helpSupport.disableRtsFlagsDialogMessage": "When disabled, we will restart cardano-node in default mode", + "menu.helpSupport.disableRtsFlagsDialogTitle": "Disable RAM management (RTS Flags)", "menu.helpSupport.blankScreenFixDialogCancel": "Cancel", "menu.helpSupport.blankScreenFixDialogConfirm": "Yes", "menu.helpSupport.blankScreenFixDialogMessage": "Turn off 'Blank screen fix'? \n \nDisabling the blank screen fix setting will improve the performance of user interface rendering by enabling graphics acceleration, however, some users may find that Daedalus runs better with this setting enabled. If you see a blank screen instead of the Daedalus user interface after disabling this setting and restarting Daedalus, please turn this setting back on. \n \nDo you want to disable this setting and restart Daedalus?", @@ -43,5 +50,6 @@ "menu.view.toggleDeveloperTools": "Toggle Developer Tools", "menu.view.toggleFullScreen": "Toggle Full Screen", "menu.view.toggleMaximumWindowSize": "Toggle Maximum Window Size", - "window.title.blankScreenFix": "['Blank screen fix' active]" + "window.title.blankScreenFix": "['Blank screen fix' active]", + "window.title.usingRtsFlags": "['Using RTS flags' active]" } diff --git a/source/main/locales/ja-JP.json b/source/main/locales/ja-JP.json index c681f2dd91..e153ae0042 100644 --- a/source/main/locales/ja-JP.json +++ b/source/main/locales/ja-JP.json @@ -22,6 +22,13 @@ "menu.edit.undo": "元に戻す", "menu.helpSupport": "ヘルプ", "menu.helpSupport.blankScreenFix": "ブランク画面修正", + "menu.helpSupport.usingRtsFlags": "RTSフラグの使用", + "menu.helpSupport.rtsFlagsDialogCancel": "Cancel", + "menu.helpSupport.rtsFlagsDialogConfirm": "Yes", + "menu.helpSupport.enableRtsFlagsDialogMessage": "When enabled, the Cardano node will attempt to reduce its RAM usage", + "menu.helpSupport.enableRtsFlagsDialogTitle": "Enable RAM management (RTSフラグの使用\")", + "menu.helpSupport.disableRtsFlagsDialogMessage": "When disabled, we will restart cardano-node in default mode", + "menu.helpSupport.disableRtsFlagsDialogTitle": "Disable RAM management (RTSフラグの使用\")", "menu.helpSupport.blankScreenFixDialogCancel": "キャンセル", "menu.helpSupport.blankScreenFixDialogConfirm": "はい", "menu.helpSupport.blankScreenFixDialogMessage": "「ブランク画面修正」を無効にしますか? \n \nブランク画面修正設定を無効にすると、グラフィックアクセラレーションが有効化されてユーザーインターフェイスのレンダリングパフォーマンスが向上しますが、この設定を有効にした方がDaedalusがスムーズに作動する場合があります。この設定を無効にしてDaedalusを再起動した際にDaedalusユーザーインターフェイスの代わりにブランク画面が表示される場合は、この設定をもう一度有効にしてください。 \n \nこの設定を無効にしてDaedalusを再起動しますか。", @@ -43,5 +50,6 @@ "menu.view.toggleDeveloperTools": "開発者ツール切替え", "menu.view.toggleFullScreen": "フルスクリーン切替え", "menu.view.toggleMaximumWindowSize": "最大ウインドウサイズ切り切り替え", - "window.title.blankScreenFix": "[「ブランク画面修正」有効 ]" + "window.title.blankScreenFix": "[「ブランク画面修正」有効 ]", + "window.title.usingRtsFlags": "[「RTSフラグの使用」が有効]" } diff --git a/source/main/menus/MenuActions.types.js b/source/main/menus/MenuActions.types.js index d401692d6a..00077dccb3 100644 --- a/source/main/menus/MenuActions.types.js +++ b/source/main/menus/MenuActions.types.js @@ -1,6 +1,7 @@ // @flow export type MenuActions = { toggleBlankScreenFix: Function, + setRtsFlags: Function, openAboutDialog: Function, openDaedalusDiagnosticsDialog: Function, openItnRewardsRedemptionDialog: Function, diff --git a/source/main/menus/osx.js b/source/main/menus/osx.js index 7ce0f6d8b6..300454e90f 100644 --- a/source/main/menus/osx.js +++ b/source/main/menus/osx.js @@ -8,9 +8,12 @@ import { environment } from '../environment'; import { showUiPartChannel } from '../ipc/control-ui-parts'; import { NOTIFICATIONS } from '../../common/ipc/constants'; import { generateSupportRequestLink } from '../../common/utils/reporting'; +import { getRtsFlags } from '../utils/rtsFlags'; const id = 'menu'; -const { isBlankScreenFixActive } = environment; +const { isBlankScreenFixActive, network } = environment; +const rtsFlags = getRtsFlags(network); +const rtsFlagsEnabled: boolean = !!rtsFlags?.length && rtsFlags.length > 0; export const osxMenu = ( app: App, @@ -154,6 +157,15 @@ export const osxMenu = ( actions.toggleBlankScreenFix(item); }, }, + { + label: translation('helpSupport.usingRtsFlags'), + type: 'checkbox', + checked: rtsFlagsEnabled, + click(item) { + actions.setRtsFlags(!rtsFlagsEnabled); + item.checked = rtsFlagsEnabled; + }, + }, { type: 'separator' }, { label: translation('helpSupport.safetyTips'), @@ -162,15 +174,6 @@ export const osxMenu = ( shell.openExternal(safetyTipsLinkUrl); }, }, - /* { - label: translation('helpSupport.featureRequest'), - click() { - const featureRequestLinkUrl = translation( - 'helpSupport.featureRequestUrl' - ); - shell.openExternal(featureRequestLinkUrl); - }, - }, */ { label: translation('helpSupport.supportRequest'), click() { diff --git a/source/main/menus/win-linux.js b/source/main/menus/win-linux.js index b3b3aebcdf..8d8e66199c 100644 --- a/source/main/menus/win-linux.js +++ b/source/main/menus/win-linux.js @@ -8,9 +8,12 @@ import { environment } from '../environment'; import { NOTIFICATIONS } from '../../common/ipc/constants'; import { showUiPartChannel } from '../ipc/control-ui-parts'; import { generateSupportRequestLink } from '../../common/utils/reporting'; +import { getRtsFlags } from '../utils/rtsFlags'; const id = 'menu'; -const { isWindows, isBlankScreenFixActive } = environment; +const { isWindows, isBlankScreenFixActive, network } = environment; +const rtsFlags = getRtsFlags(network); +const rtsFlagsEnabled: boolean = !!rtsFlags?.length && rtsFlags.length > 0; export const winLinuxMenu = ( app: App, @@ -166,6 +169,15 @@ export const winLinuxMenu = ( actions.toggleBlankScreenFix(item); }, }, + { + label: translation('helpSupport.usingRtsFlags'), + type: 'checkbox', + checked: rtsFlagsEnabled, + click(item) { + actions.setRtsFlags(!rtsFlagsEnabled); + item.checked = rtsFlagsEnabled; + }, + }, { type: 'separator' }, { label: translation('helpSupport.safetyTips'), diff --git a/source/main/utils/buildAppMenus.js b/source/main/utils/buildAppMenus.js index 79be8bce92..0618923471 100644 --- a/source/main/utils/buildAppMenus.js +++ b/source/main/utils/buildAppMenus.js @@ -1,5 +1,5 @@ // @flow -import { app, globalShortcut, Menu, BrowserWindow, dialog } from 'electron'; +import { app, BrowserWindow, dialog, globalShortcut, Menu } from 'electron'; import { environment } from '../environment'; import { winLinuxMenu } from '../menus/win-linux'; import { osxMenu } from '../menus/osx'; @@ -9,6 +9,8 @@ import { CardanoNode } from '../cardano/CardanoNode'; import { DIALOGS, PAGES } from '../../common/ipc/constants'; import { showUiPartChannel } from '../ipc/control-ui-parts'; import { getTranslation } from './getTranslation'; +import { setRtsFlagsAndRestart } from './rtsFlags'; +import { RTS_FLAGS } from '../config'; export const buildAppMenus = async ( mainWindow: BrowserWindow, @@ -92,6 +94,38 @@ export const buildAppMenus = async ( item.checked = isBlankScreenFixActive; }; + const setRtsFlags = async (enable: boolean): Promise => { + const translation = getTranslation(translations, 'menu'); + const rtsFlagsDialogOptions = { + buttons: [ + translation('helpSupport.rtsFlagsDialogConfirm'), + translation('helpSupport.rtsFlagsDialogCancel'), + ], + type: 'warning', + title: enable + ? translation('helpSupport.enableRtsFlagsDialogTitle') + : translation('helpSupport.disableRtsFlagsDialogTitle'), + message: enable + ? translation('helpSupport.enableRtsFlagsDialogMessage') + : translation('helpSupport.disableRtsFlagsDialogMessage'), + defaultId: 1, + cancelId: 1, + noLink: true, + }; + + const { response } = await dialog.showMessageBox( + mainWindow, + rtsFlagsDialogOptions + ); + if (response === 0) { + if (enable) { + setRtsFlagsAndRestart(environment.network, RTS_FLAGS); + } else { + setRtsFlagsAndRestart(environment.network, []); + } + } + }; + const menuActions = { openAboutDialog, openDaedalusDiagnosticsDialog, @@ -99,6 +133,7 @@ export const buildAppMenus = async ( openSettingsPage, openWalletSettingsPage, toggleBlankScreenFix, + setRtsFlags, }; // Build app menus diff --git a/source/main/utils/rtsFlags.js b/source/main/utils/rtsFlags.js new file mode 100644 index 0000000000..0f5cb849ec --- /dev/null +++ b/source/main/utils/rtsFlags.js @@ -0,0 +1,26 @@ +// @flow +import Store from 'electron-store'; +import { logger } from './logging'; +import { relaunch } from './safeExitWithCode'; + +const store = new Store(); + +export const getRtsFlags = (network: string): string[] | null => { + try { + const rtsFlags = store.get(`${network}-RTS-FLAGS`); + logger.info(`[GET-RTS-FLAGS] ${network}-RTS-FLAGS: `, rtsFlags); + return rtsFlags; + } catch (error) { + logger.error(`[GET-RTS-FLAGS] Error fetching ${network}-RTS-FLAGS`, error); + } + return null; +}; + +export const setRtsFlagsAndRestart = ( + network: string, + flags: Array +): void => { + logger.info('[SET-RTS-FLAGS] setting: ', { network, flags }); + store.set(`${network}-RTS-FLAGS`, flags); + relaunch(); +}; diff --git a/source/main/utils/safeExitWithCode.js b/source/main/utils/safeExitWithCode.js index ecccea68cd..80bc8483d1 100644 --- a/source/main/utils/safeExitWithCode.js +++ b/source/main/utils/safeExitWithCode.js @@ -13,3 +13,16 @@ export const safeExitWithCode = (exitCode: number = 0) => { app.exit(exitCode); }); }; + +export const relaunch = () => { + const { file } = log.transports; + // Prevent electron-log from writing to stream + file.level = false; + // Flush the stream to the log file and exit afterwards. + // https://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback + file.stream.end('', 'utf8', () => { + app.releaseSingleInstanceLock(); + app.relaunch({ args: process.argv.slice(1).concat(['--relaunch']) }); + app.exit(0); + }); +}; diff --git a/source/main/windows/main.js b/source/main/windows/main.js index e2a1ef0307..ded6626983 100644 --- a/source/main/windows/main.js +++ b/source/main/windows/main.js @@ -8,10 +8,12 @@ import { getTranslation } from '../utils/getTranslation'; import { getContentMinimumSize } from '../utils/getContentMinimumSize'; import { buildLabel, launcherConfig } from '../config'; import { ledgerStatus } from '../ipc/getHardwareWalletChannel'; +import { getRtsFlags } from '../utils/rtsFlags'; const rendererErrorHandler = new RendererErrorHandler(); -const { isDev, isTest, isLinux, isBlankScreenFixActive } = environment; +const { isDev, isTest, isLinux, isBlankScreenFixActive, network } = environment; +const rtsFlags = getRtsFlags(network); const id = 'window'; @@ -21,6 +23,8 @@ const getWindowTitle = (locale: string): string => { let title = buildLabel; if (isBlankScreenFixActive) title += ` ${translation('title.blankScreenFix')}`; + if (!!rtsFlags && rtsFlags?.length > 0) + title += ` ${translation('title.usingRtsFlags')}`; return title; }; From b13a30e4fd05aa8e3ca509dd192df36b833c9034 Mon Sep 17 00:00:00 2001 From: Lucas Date: Fri, 21 Jan 2022 10:56:38 -0300 Subject: [PATCH 006/204] [DDW-861] Implement new token picker (#2787) Co-authored-by: Renan Ferreira Co-authored-by: Daniel Main --- CHANGELOG.md | 4 + source/renderer/app/api/api.js | 3 + source/renderer/app/api/assets/types.js | 1 + .../app/assets/images/remove.inline.svg | 3 + .../app/assets/images/search.inline.svg | 4 +- .../renderer/app/components/assets/Asset.js | 10 +- .../app/components/assets/AssetContent.scss | 2 +- .../components/assets/AssetSettingsDialog.js | 4 +- .../staking/stake-pools/StakePoolsSearch.scss | 5 +- .../app/components/wallet/WalletSendForm.js | 58 ++-- .../components/wallet/send-form/AssetInput.js | 219 ++++++------- .../wallet/send-form/AssetInput.scss | 186 +++++------ .../wallet/summary/WalletSummary.js | 2 +- .../components/wallet/tokens/WalletToken.js | 266 ---------------- .../components/wallet/tokens/WalletToken.scss | 197 ------------ .../{ => wallet-no-tokens}/WalletNoTokens.js | 4 +- .../WalletNoTokens.scss | 2 +- .../wallet-token-picker/WalletTokenPicker.js | 171 ++++++++++ .../WalletTokenPicker.messages.js | 56 ++++ .../WalletTokenPicker.scss | 226 +++++++++++++ .../WalletTokenPicker.stories.js | 76 +++++ .../WalletTokenPickerCheckbox.js | 45 +++ .../tokens/wallet-token-picker/const.js | 26 ++ .../tokens/wallet-token-picker/helpers.js | 154 +++++++++ .../tokens/wallet-token-picker/hooks.js | 154 +++++++++ .../tokens/wallet-token-picker/hooks.spec.js | 134 ++++++++ .../tokens/wallet-token-picker/types.js | 83 +++++ .../wallet/tokens/wallet-token/WalletToken.js | 96 ++++++ .../wallet-token/WalletToken.messages.js | 31 ++ .../tokens/wallet-token/WalletToken.scss | 47 +++ .../tokens/wallet-token/WalletTokenFooter.js | 105 ++++++ .../wallet-token/WalletTokenFooter.scss | 56 ++++ .../tokens/wallet-token/WalletTokenHeader.js | 97 ++++++ .../wallet-token/WalletTokenHeader.scss | 100 ++++++ .../wallet/tokens/wallet-token/helpers.js | 12 + .../WalletTokensList.js | 49 +-- .../WalletTokensList.messages.js | 30 ++ .../WalletTokensList.scss | 0 .../WalletTokensSearch.js | 25 +- .../WalletTokensSearch.scss | 19 +- .../{ => wallet-tokens}/WalletTokens.js | 22 +- .../{ => wallet-tokens}/WalletTokens.scss | 5 + .../app/containers/wallet/WalletSendPage.js | 7 +- .../app/containers/wallet/WalletTokensPage.js | 2 +- source/renderer/app/domains/Asset.js | 6 +- .../app/i18n/locales/defaultMessages.json | 299 +++++++++++++----- source/renderer/app/i18n/locales/en-US.json | 12 +- source/renderer/app/i18n/locales/ja-JP.json | 12 +- .../renderer/app/themes/daedalus/cardano.js | 4 + .../renderer/app/themes/daedalus/dark-blue.js | 4 + .../app/themes/daedalus/dark-cardano.js | 4 + .../app/themes/daedalus/flight-candidate.js | 4 + .../themes/daedalus/incentivized-testnet.js | 4 + .../app/themes/daedalus/light-blue.js | 4 + .../app/themes/daedalus/shelley-testnet.js | 4 + source/renderer/app/themes/daedalus/white.js | 4 + source/renderer/app/themes/daedalus/yellow.js | 4 + source/renderer/app/utils/assets.js | 16 +- storybook/stories/_support/utils.js | 2 + storybook/stories/assets/Asset.stories.js | 2 +- storybook/stories/wallets/index.js | 1 + .../wallets/send/WalletSend.stories.js | 10 + .../wallets/tokens/WalletTokens.stories.js | 2 +- .../tokens/WalletTokensList.stories.js | 2 +- 64 files changed, 2304 insertions(+), 894 deletions(-) create mode 100644 source/renderer/app/assets/images/remove.inline.svg delete mode 100644 source/renderer/app/components/wallet/tokens/WalletToken.js delete mode 100644 source/renderer/app/components/wallet/tokens/WalletToken.scss rename source/renderer/app/components/wallet/tokens/{ => wallet-no-tokens}/WalletNoTokens.js (95%) rename source/renderer/app/components/wallet/tokens/{ => wallet-no-tokens}/WalletNoTokens.scss (91%) create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.scss create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/const.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/helpers.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token-picker/types.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.scss create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.scss create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.js create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.scss create mode 100644 source/renderer/app/components/wallet/tokens/wallet-token/helpers.js rename source/renderer/app/components/wallet/tokens/{ => wallet-tokens-list}/WalletTokensList.js (79%) create mode 100644 source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js rename source/renderer/app/components/wallet/tokens/{ => wallet-tokens-list}/WalletTokensList.scss (100%) rename source/renderer/app/components/wallet/tokens/{ => wallet-tokens-search}/WalletTokensSearch.js (65%) rename source/renderer/app/components/wallet/tokens/{ => wallet-tokens-search}/WalletTokensSearch.scss (74%) rename source/renderer/app/components/wallet/tokens/{ => wallet-tokens}/WalletTokens.js (88%) rename source/renderer/app/components/wallet/tokens/{ => wallet-tokens}/WalletTokens.scss (84%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 262da4f27b..56a1d1edd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ ### Features +- Implemented new token picker ([PR 2787](https://github.com/input-output-hk/daedalus/pull/2787)) + +## 4.8.0-FC1 + - Added dynamic RTS flags setting ([PR 2758](https://github.com/input-output-hk/daedalus/pull/2758/files)) - Updated messages about Cardano node sync on the initial screen ([PR 2827](https://github.com/input-output-hk/daedalus/pull/2827)) ([PR 2831](https://github.com/input-output-hk/daedalus/pull/2831)) diff --git a/source/renderer/app/api/api.js b/source/renderer/app/api/api.js index 6f59b7259f..ef3ac3448b 100644 --- a/source/renderer/app/api/api.js +++ b/source/renderer/app/api/api.js @@ -94,6 +94,7 @@ import { cardanoFaultInjectionChannel } from '../ipc/cardano.ipc'; import patchAdaApi from './utils/patchAdaApi'; import { getLegacyWalletId, utcStringToDate } from './utils'; import { logger } from '../utils/logging'; +import { hexToString } from '../utils/strings'; import { unscrambleMnemonics, scrambleMnemonics, @@ -2739,6 +2740,7 @@ const _createWalletFromServerData = action( uniqueId, policyId, assetName, + assetNameASCII: hexToString(assetName), quantity: new BigNumber(quantity.toString()), }; }), @@ -2749,6 +2751,7 @@ const _createWalletFromServerData = action( uniqueId, policyId, assetName, + assetNameASCII: hexToString(assetName), quantity: new BigNumber(quantity.toString()), }; }), diff --git a/source/renderer/app/api/assets/types.js b/source/renderer/app/api/assets/types.js index 3bc326a77d..f29e165ae5 100644 --- a/source/renderer/app/api/assets/types.js +++ b/source/renderer/app/api/assets/types.js @@ -51,6 +51,7 @@ export type ApiTokens = Array; export type Token = { policyId: string, assetName: string, + assetNameASCII?: string, quantity: BigNumber, address?: ?string, uniqueId: string, diff --git a/source/renderer/app/assets/images/remove.inline.svg b/source/renderer/app/assets/images/remove.inline.svg new file mode 100644 index 0000000000..89d76e64ba --- /dev/null +++ b/source/renderer/app/assets/images/remove.inline.svg @@ -0,0 +1,3 @@ + + + diff --git a/source/renderer/app/assets/images/search.inline.svg b/source/renderer/app/assets/images/search.inline.svg index 0304c9c043..f83eb9153d 100644 --- a/source/renderer/app/assets/images/search.inline.svg +++ b/source/renderer/app/assets/images/search.inline.svg @@ -1,7 +1,7 @@ - - + + diff --git a/source/renderer/app/components/assets/Asset.js b/source/renderer/app/components/assets/Asset.js index 43d5251325..4e559668ff 100644 --- a/source/renderer/app/components/assets/Asset.js +++ b/source/renderer/app/components/assets/Asset.js @@ -173,7 +173,7 @@ export default class Asset extends Component { const { asset, metadataNameChars, - small, + small = true, fullFingerprint, hasWarning, hasError, @@ -182,9 +182,9 @@ export default class Asset extends Component { const { name } = metadata || {}; const contentStyles = classnames([ styles.pill, - small ? styles.small : null, hasError ? styles.error : null, ]); + const [startCharAmount, endCharAmoout] = small ? [9, 4] : [12, 12]; let warningPopOverMessage; if (hasWarning) { warningPopOverMessage = @@ -195,7 +195,9 @@ export default class Asset extends Component { return (
- {fullFingerprint ? fingerprint : ellipsis(fingerprint || '', 9, 4)} + {fullFingerprint + ? fingerprint + : ellipsis(fingerprint || '', startCharAmount, endCharAmoout)}
{name && (
@@ -223,7 +225,6 @@ export default class Asset extends Component { asset, onCopyAssetParam, assetSettingsDialogWasOpened, - anyAssetWasHovered, } = this.props; const pillContent = this.renderPillContent(); const popOverContent = ( @@ -231,7 +232,6 @@ export default class Asset extends Component { asset={asset} onCopyAssetParam={onCopyAssetParam} assetSettingsDialogWasOpened={assetSettingsDialogWasOpened} - anyAssetWasHovered={anyAssetWasHovered} className={styles.popOverContent} highlightFingerprint /> diff --git a/source/renderer/app/components/assets/AssetContent.scss b/source/renderer/app/components/assets/AssetContent.scss index 6a436d801b..fa05d93ed8 100644 --- a/source/renderer/app/components/assets/AssetContent.scss +++ b/source/renderer/app/components/assets/AssetContent.scss @@ -30,7 +30,7 @@ margin-left: 10px; max-height: 48px; overflow-y: auto; - width: calc(100% - 140px); + width: calc(100% - 100px); &:not(:first-of-type) { margin-top: 10px; diff --git a/source/renderer/app/components/assets/AssetSettingsDialog.js b/source/renderer/app/components/assets/AssetSettingsDialog.js index a5b4481708..61ec2140fb 100644 --- a/source/renderer/app/components/assets/AssetSettingsDialog.js +++ b/source/renderer/app/components/assets/AssetSettingsDialog.js @@ -166,7 +166,9 @@ export default class AssetSettingsDialog extends Component { } + subtitle={ + + } actions={actions} closeOnOverlayClick onClose={onCancel} diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss index de493589ee..e049c9e014 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss @@ -12,15 +12,14 @@ .searchIcon { bottom: 12.5px; + color: var(--theme-staking-stake-pools-search-icon-color); left: 20px; + opacity: 0.3; position: absolute; z-index: 1; svg { width: 15px; - g > g { - fill: var(--theme-staking-stake-pools-search-icon-color); - } } } diff --git a/source/renderer/app/components/wallet/WalletSendForm.js b/source/renderer/app/components/wallet/WalletSendForm.js index 06c8aac82d..0ee79642ca 100755 --- a/source/renderer/app/components/wallet/WalletSendForm.js +++ b/source/renderer/app/components/wallet/WalletSendForm.js @@ -38,6 +38,7 @@ import Asset from '../../domains/Asset'; import type { HwDeviceStatus } from '../../domains/Wallet'; import type { AssetToken, ApiTokens } from '../../api/assets/types'; import { DiscreetWalletAmount } from '../../features/discreet-mode'; +import WalletTokenPicker from './tokens/wallet-token-picker/WalletTokenPicker'; messages.fieldIsRequired = globalMessages.fieldIsRequired; @@ -62,6 +63,8 @@ type Props = { onUnsetActiveAsset: Function, onExternalLinkClick: Function, isAddressFromSameWallet: boolean, + tokenFavorites: { [key: string]: boolean }, + walletName: string, }; type State = { @@ -81,11 +84,11 @@ type State = { feeCalculationRequestQue: number, transactionFee: BigNumber, transactionFeeError: ?string | ?Node, - showRemoveAssetButton: { [uniqueId: string]: boolean }, selectedAssetUniqueIds: Array, isResetButtonDisabled: boolean, isReceiverAddressValid: boolean, isTransactionFeeCalculated: boolean, + isTokenPickerOpen: boolean, }; @observer @@ -100,11 +103,11 @@ export default class WalletSendForm extends Component { feeCalculationRequestQue: 0, transactionFee: new BigNumber(0), transactionFeeError: null, - showRemoveAssetButton: {}, selectedAssetUniqueIds: [], isResetButtonDisabled: true, isReceiverAddressValid: false, isTransactionFeeCalculated: false, + isTokenPickerOpen: false, }; // We need to track the fee calculation state in order to disable @@ -226,7 +229,6 @@ export default class WalletSendForm extends Component { this.setState({ minimumAda: new BigNumber(0), - showRemoveAssetButton: {}, isResetButtonDisabled: true, }); }; @@ -535,22 +537,6 @@ export default class WalletSendForm extends Component { } } - showRemoveAssetButton = (uniqueId: string) => { - const { showRemoveAssetButton } = this.state; - showRemoveAssetButton[uniqueId] = true; - this.setState({ - showRemoveAssetButton, - }); - }; - - hideRemoveAssetButton = (uniqueId: string) => { - const { showRemoveAssetButton } = this.state; - showRemoveAssetButton[uniqueId] = false; - this.setState({ - showRemoveAssetButton, - }); - }; - addAssetRow = (uniqueId: string) => { this.addAssetFields(uniqueId); this.updateFormFields(false, uniqueId); @@ -686,7 +672,6 @@ export default class WalletSendForm extends Component { adaAmount: adaAmountField, receiver: receiverField, assetFields, - assetsDropdown, } = formFields.receiver; const assetsSeparatorBasicHeight = 140; @@ -836,22 +821,12 @@ export default class WalletSendForm extends Component { uniqueId={uniqueId} index={index} getAssetByUniqueId={this.getAssetByUniqueId} - availableAssets={this.availableAssets} assetFields={assetFields} - assetsDropdown={assetsDropdown} addFocusableField={this.addFocusableField} - removeAssetButtonVisible={ - this.state.showRemoveAssetButton - } - showRemoveAssetButton={this.showRemoveAssetButton} - hideRemoveAssetButton={this.hideRemoveAssetButton} currentNumberFormat={this.getCurrentNumberFormat()} removeAssetRow={this.removeAssetRow} handleSubmitOnEnter={this.handleSubmitOnEnter} clearAssetFieldValue={this.clearAssetFieldValue} - onChangeAsset={(newUniqueId) => - this.onChangeAsset(uniqueId, newUniqueId) - } autoFocus={this._isAutoFocusEnabled} /> ) @@ -862,7 +837,7 @@ export default class WalletSendForm extends Component { label={intl.formatMessage(messages.addAssetButtonLabel)} disabled={!this.hasAvailableAssets} onClick={() => { - this.addAssetRow(this.availableAssets[0].uniqueId); + this.setState({ isTokenPickerOpen: true }); }} />
@@ -881,14 +856,19 @@ export default class WalletSendForm extends Component { transactionFeeError, isResetButtonDisabled, isTransactionFeeCalculated, + isTokenPickerOpen, + selectedAssetUniqueIds, } = this.state; const { + assets, currencyMaxFractionalDigits, hwDeviceStatus, isHardwareWallet, isDialogOpen, isRestoreActive, onExternalLinkClick, + tokenFavorites, + walletName, } = this.props; const receiverField = form.$('receiver'); @@ -981,6 +961,22 @@ export default class WalletSendForm extends Component { formattedTotalAmount={total.toFormat(currencyMaxFractionalDigits)} /> ) : null} + + {isTokenPickerOpen && ( + { + this.setState({ isTokenPickerOpen: false }); + }} + onAdd={(checked) => { + this.setState({ isTokenPickerOpen: false }); + checked.forEach(this.addAssetRow); + }} + /> + )}
); } diff --git a/source/renderer/app/components/wallet/send-form/AssetInput.js b/source/renderer/app/components/wallet/send-form/AssetInput.js index 59760b9500..f1ea2bca61 100644 --- a/source/renderer/app/components/wallet/send-form/AssetInput.js +++ b/source/renderer/app/components/wallet/send-form/AssetInput.js @@ -3,40 +3,31 @@ import React, { Component } from 'react'; import { observer } from 'mobx-react'; import type { Field } from 'mobx-react-form'; import { intlShape } from 'react-intl'; -import { get, orderBy } from 'lodash'; +import { get } from 'lodash'; import classNames from 'classnames'; import SVGInline from 'react-svg-inline'; import { NumericInput } from 'react-polymorph/lib/components/NumericInput'; import { PopOver } from 'react-polymorph/lib/components/PopOver'; import AmountInputSkin from '../skins/AmountInputSkin'; -import AssetsDropdown from '../../widgets/forms/AssetsDropdown'; import closeIcon from '../../../assets/images/close-cross.inline.svg'; +import removeIcon from '../../../assets/images/remove.inline.svg'; import type { NumberFormat } from '../../../../../common/types/number.types'; -import type { AssetToken } from '../../../api/assets/types'; import { DiscreetTokenWalletAmount } from '../../../features/discreet-mode'; +import Asset from '../../assets/Asset'; import styles from './AssetInput.scss'; import messages from './messages'; type Props = { uniqueId: string, - index: number, getAssetByUniqueId: Function, - availableAssets: Array, assetFields: { [uniqueId: string]: Field, }, - assetsDropdown: { - [uniqueId: string]: Field, - }, addFocusableField: Function, - removeAssetButtonVisible: { [uniqueId: string]: boolean }, - showRemoveAssetButton: Function, - hideRemoveAssetButton: Function, currentNumberFormat: NumberFormat, removeAssetRow: Function, handleSubmitOnEnter: Function, clearAssetFieldValue: Function, - onChangeAsset: Function, autoFocus: boolean, }; @@ -78,20 +69,13 @@ export default class AssetInput extends Component { const { intl } = this.context; const { uniqueId, - index, getAssetByUniqueId, - availableAssets, assetFields, - assetsDropdown, addFocusableField, - removeAssetButtonVisible, - showRemoveAssetButton, - hideRemoveAssetButton, currentNumberFormat, removeAssetRow, handleSubmitOnEnter, clearAssetFieldValue, - onChangeAsset, autoFocus, } = this.props; const asset = getAssetByUniqueId(uniqueId); @@ -101,119 +85,106 @@ export default class AssetInput extends Component { const { quantity, metadata, decimals } = asset; const ticker = get(metadata, 'ticker', null); - const sortedAssets = orderBy( - [asset, ...availableAssets], - 'uniqueId', - 'asc' - ); const assetField = assetFields[uniqueId]; - const assetsDropdownField = assetsDropdown[uniqueId]; const inputFieldStyle = this.generateInputFieldStyle(); return ( -
showRemoveAssetButton(uniqueId)} - onMouseLeave={() => hideRemoveAssetButton(uniqueId)} - onMouseEnter={() => showRemoveAssetButton(uniqueId)} - onFocus={() => { - // jsx-a11y/mouse-events-have-key-events - }} - className={styles.component} - > - {quantity.isPositive() && ( -
- {intl.formatMessage(messages.ofLabel)} - {` `} - -
- )} - addFocusableField(field)} - placeholder={ - decimals - ? `0${currentNumberFormat.decimalSeparator}${'0'.repeat( - decimals - )}` - : '0' - } - className={styles.assetItem} - label={ - <> - {`${intl.formatMessage(messages.assetLabel)} #${index + 1}`} - {removeAssetButtonVisible[uniqueId] && ( - removeAssetRow(uniqueId)} - > - {intl.formatMessage(messages.removeLabel)} - - )} - - } - bigNumberFormat={decimals ? currentNumberFormat : null} - decimalPlaces={decimals} - numberLocaleOptions={{ - minimumFractionDigits: decimals, - }} - onChange={(value) => { - assetField.onChange(value); - }} - currency={ticker} - value={assetField.value} - error={assetField.error} - skin={AmountInputSkin} - style={inputFieldStyle} - onKeyPress={(evt: SyntheticKeyboardEvent) => { - if (decimals === 0) { - const { charCode } = evt; - if (charCode === 190 || charCode === 110 || charCode === 46) { - evt.persist(); - evt.preventDefault(); - evt.stopPropagation(); - } - } - handleSubmitOnEnter(evt); - }} - allowSigns={false} - autoFocus={autoFocus} - /> -
- {this.hasAssetValue(assetField) && ( -
- - - -
+
+
+ {quantity.isPositive() && ( +
+ {intl.formatMessage(messages.ofLabel)} + + +
)} -
- + addFocusableField(field)} + placeholder={ + decimals + ? `0${currentNumberFormat.decimalSeparator}${'0'.repeat( + decimals + )}` + : '0' + } + className={styles.assetItem} + label={ + + } + bigNumberFormat={decimals ? currentNumberFormat : null} + decimalPlaces={decimals} + numberLocaleOptions={{ + minimumFractionDigits: decimals, + }} + onChange={(value) => { + assetField.onChange(value); + }} + currency={ticker} + value={assetField.value} + error={assetField.error} + skin={AmountInputSkin} + style={inputFieldStyle} + onKeyPress={(evt: SyntheticKeyboardEvent) => { + if (decimals === 0) { + const { charCode } = evt; + if (charCode === 190 || charCode === 110 || charCode === 46) { + evt.persist(); + evt.preventDefault(); + evt.stopPropagation(); + } + } + handleSubmitOnEnter(evt); + }} + allowSigns={false} + autoFocus={autoFocus} + /> +
+ {this.hasAssetValue(assetField) && ( +
+ + + +
+
+ )} + {ticker ? ( + <> + + {ticker} + + ) : null}
+
+ removeAssetRow(uniqueId)} + > + + +
); } diff --git a/source/renderer/app/components/wallet/send-form/AssetInput.scss b/source/renderer/app/components/wallet/send-form/AssetInput.scss index 14e2eaeac9..9be6a88fe5 100644 --- a/source/renderer/app/components/wallet/send-form/AssetInput.scss +++ b/source/renderer/app/components/wallet/send-form/AssetInput.scss @@ -2,7 +2,7 @@ @import '../../../themes/mixins/error-message'; .component { - position: relative; + display: flex; .amountTokenTotal { color: var(--theme-input-right-floating-text-color); @@ -14,147 +14,111 @@ top: 2px; } + .amountValue { + &:before { + content: ' '; + } + } + .assetItem { margin-bottom: 20px; } .removeAssetButton { - border-radius: 5px; - box-sizing: border-box; + align-items: center; + border-radius: 3px; + color: var(--theme-staking-stake-pools-search-clear-button-color); cursor: pointer; - display: inline-block; - font-family: var(--font-semibold); - font-size: 10px; - font-weight: 500; - height: 20px; - letter-spacing: 0.5px; - line-height: 20px; - margin: 1px 0 0 10px; - padding: 0 8px; - text-transform: uppercase; - vertical-align: top; - width: auto; + display: flex; + height: 28px; + justify-content: center; + width: 28px; } .rightContent { + align-items: center; bottom: 0; display: inline-flex; height: 48px; position: absolute; - right: 0; + right: 10px; + top: 34px; } - .clearAssetContainer { - bottom: 0.5px; - display: flex; - float: right; - height: 48px; - justify-content: flex-end; - line-height: 48px; - padding-left: 20px; + .inputBlock { + flex: 1 1 auto; position: relative; - right: 10px; - width: 50px; + } +} - .clearAssetButton { +.clearAssetContainer { + align-items: center; + display: flex; + height: 48px; + + .clearAssetButton { + background-color: var( + --theme-staking-stake-pools-search-clear-button-background-color + ); + border-radius: 3px; + cursor: pointer; + height: 28px; + width: 28px; + + &:hover { background-color: var( - --theme-staking-stake-pools-search-clear-button-background-color + --theme-staking-stake-pools-search-clear-button-hover-background-color ); - border-radius: 3px; - cursor: pointer; - height: 28px; - width: 28px; - - &:hover { - background-color: var( - --theme-staking-stake-pools-search-clear-button-hover-background-color - ); - } + } - .clearReceiverIcon { - > svg { - position: relative; - top: 0.5px; - width: 10px; + .clearReceiverIcon { + > svg { + position: relative; + top: 0.5px; + width: 10px; - > g > g { - fill: var(--theme-staking-stake-pools-search-clear-button-color); - } + > g > g { + fill: var(--theme-staking-stake-pools-search-clear-button-color); } } } } - .separator { - background: var(--rp-input-border-color); - height: 20px; - left: 15px; - position: relative; - top: 15px; - width: 1px; + & + .ticker { + margin-left: 10px; } +} - .assetsDropdownWrapper { - display: flex; - position: relative; - width: auto; - - > div { - width: 100%; - } - - .assetsDropdown { - input { - border: none; - height: 48px; - } - - :global { - .SimpleSelect_selectInput.SelectOverrides_selectInput - .WalletsDropdownOption_component { - max-width: 100%; - } - - .SimpleSelect_selectInput.SelectOverrides_selectInput - .WalletsDropdownOption_selected - .WalletsDropdownOption_topRow { - justify-content: flex-end; - } - - .SimpleSelect_selectInput.SelectOverrides_selectInput - .WalletsDropdownOption_label { - .Asset_content { - margin-right: 24.5px; - } - } - - .ItemDropdownOption_selected { - .ItemDropdownOption_label { - margin-top: 5px; - } - .ItemDropdownOption_detail { - display: none !important; - } - } +.divider { + background-color: var(--theme-input-placeholder-color); + height: 20px; + margin: 0 20px; + opacity: 0.2; + width: 1px; +} - .SimpleOptions_option { - padding: 6px 15px; - } +.ticker { + color: var(--theme-input-placeholder-color); + font-family: var(--font-regular); + font-size: 16px; + font-weight: 300; + margin-right: 10px; + z-index: 1; +} - .OptionsOverrides_options { - left: auto !important; - min-width: 289px; - right: 41px !important; - } +.removeAssetBlock { + align-items: center; + display: flex; + height: 48px; + margin: 34px 11px 0 11px; +} - .SimpleBubble_root:not(.SimpleBubble_openUpward) .SimpleBubble_bubble { - border-radius: 2px; - } +.removeIcon { + align-items: center; + display: flex; + justify-content: center; - .SelectOverrides_selectInput .SimpleInput_customValueBlock { - background: transparent; - } - } - } + & > svg { + height: 2px; } } diff --git a/source/renderer/app/components/wallet/summary/WalletSummary.js b/source/renderer/app/components/wallet/summary/WalletSummary.js index bb0592754b..a3eae25d17 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummary.js +++ b/source/renderer/app/components/wallet/summary/WalletSummary.js @@ -7,7 +7,7 @@ import type { Currency } from '../../../types/currencyTypes'; import WalletSummaryHeader from './WalletSummaryHeader'; import WalletSummaryCurrency from './WalletSummaryCurrency'; import type { AssetToken } from '../../../api/assets/types'; -import WalletTokensList from '../tokens/WalletTokensList'; +import WalletTokensList from '../tokens/wallet-tokens-list/WalletTokensList'; import { MAX_TOKENS_ON_SUMMARY_PAGE } from '../../../config/numbersConfig'; const messages = defineMessages({ diff --git a/source/renderer/app/components/wallet/tokens/WalletToken.js b/source/renderer/app/components/wallet/tokens/WalletToken.js deleted file mode 100644 index 4326f5aed2..0000000000 --- a/source/renderer/app/components/wallet/tokens/WalletToken.js +++ /dev/null @@ -1,266 +0,0 @@ -// @flow -import React, { useState, useMemo, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape, injectIntl } from 'react-intl'; -import { Button } from 'react-polymorph/lib/components/Button'; -import { PopOver } from 'react-polymorph/lib/components/PopOver'; -import classNames from 'classnames'; -import { get } from 'lodash'; -import SVGInline from 'react-svg-inline'; -import styles from './WalletToken.scss'; -import Asset from '../../assets/Asset'; -import AssetAmount from '../../assets/AssetAmount'; -import AssetContent from '../../assets/AssetContent'; -import type { AssetToken } from '../../../api/assets/types'; -import arrow from '../../../assets/images/collapse-arrow-small.inline.svg'; -import warningIcon from '../../../assets/images/asset-token-warning-ic.inline.svg'; -import starNotFilledIcon from '../../../assets/images/star-not-filled.inline.svg'; -import starFilledIcon from '../../../assets/images/star-filled.inline.svg'; - -const messages = defineMessages({ - tokenSendButton: { - id: 'wallet.summary.asset.tokenSendButton', - defaultMessage: '!!!Send', - description: 'Send button on Wallet summary assets page', - }, - amountLabel: { - id: 'wallet.summary.asset.amountLabel', - defaultMessage: '!!!Amount', - description: 'Amount label on Wallet summary assets page', - }, - settingsButtonLabel: { - id: 'wallet.summary.asset.settings.button.label', - defaultMessage: '!!!Settings', - description: 'Settings label on Wallet summary assets page', - }, - settingsWarningPopOverAvailable: { - id: 'assets.warning.available', - defaultMessage: - '!!!Recommended configuration for decimal places for this native token is available.', - description: 'Asset settings recommended pop over content', - }, - settingsWarningPopOverNotUsing: { - id: 'assets.warning.notUsing', - defaultMessage: - '!!!You are not using the recommended decimal place configuration for this native token.', - description: 'Asset settings recommended pop over content', - }, -}); - -type Props = { - anyAssetWasHovered: boolean, - asset: AssetToken, - assetSettingsDialogWasOpened: boolean, - intl: intlShape.isRequired, - isFavorite: boolean, - isInsertingAsset: boolean, - isLoading: boolean, - isRemovingAsset: boolean, - onAssetSettings: Function, - onCopyAssetParam: Function, - onOpenAssetSend: Function, - onToggleFavorite: Function, -}; - -type IsExpanded = boolean; - -const WalletToken = observer((props: Props) => { - const [isExpanded, setIsExpanded] = useState(false); - const [arrowStyles, setArrowStyles] = useState(null); - - const toggleIsExpanded = () => { - setIsExpanded(!isExpanded); - }; - - const favoriteIconStyles = classNames([ - styles.favoriteIcon, - props.isFavorite ? styles.isFavorite : null, - ]); - - const { - anyAssetWasHovered, - asset, - assetSettingsDialogWasOpened, - intl, - isFavorite, - isLoading, - onAssetSettings, - onCopyAssetParam, - onOpenAssetSend, - onToggleFavorite, - } = props; - - const assetHeaderContent = useMemo(() => { - const { decimals, recommendedDecimals } = asset; - const hasWarning = - typeof recommendedDecimals === 'number' && - decimals !== recommendedDecimals; - return ( - <> - - - - ); - }, [ - anyAssetWasHovered, - asset, - assetSettingsDialogWasOpened, - isFavorite, - isLoading, - onCopyAssetParam, - onToggleFavorite, - ]); - - useEffect( - () => - setArrowStyles( - classNames(styles.arrow, { - [styles.isExpanded]: isExpanded, - }) - ), - [isExpanded] - ); - - const header = useMemo(() => { - const { uniqueId } = asset; - const starIcon = isFavorite ? starFilledIcon : starNotFilledIcon; - return ( -
- - {assetHeaderContent} - -
- ); - }, [ - asset, - isExpanded, - arrowStyles, - onToggleFavorite, - isFavorite, - favoriteIconStyles, - ]); - - const buttons = useMemo(() => { - const { recommendedDecimals, decimals } = asset; - const hasWarning = - typeof recommendedDecimals === 'number' && - decimals !== recommendedDecimals; - let settingsButtonLabel = intl.formatMessage(messages.settingsButtonLabel); - let warningPopOverMessage; - if (hasWarning) { - warningPopOverMessage = - typeof decimals === 'number' - ? messages.settingsWarningPopOverNotUsing - : messages.settingsWarningPopOverAvailable; - settingsButtonLabel = ( - <> - {settingsButtonLabel} - - - ); - } - const settingsButton = ( -
- ); - }, [asset, onOpenAssetSend, onAssetSettings, intl]); - - const footer = useMemo(() => { - return ( -
-
-
{intl.formatMessage(messages.amountLabel)}
-
- {' '} - -
-
- {buttons} -
- ); - }, [asset, isLoading, intl, buttons]); - - const { isInsertingAsset, isRemovingAsset } = props; - const componentStyles = classNames(styles.component, { - [styles.isExpanded]: isExpanded, - [styles.inserting]: isInsertingAsset, - [styles.removing]: isRemovingAsset, - }); - return ( -
- {header} -
- - {footer} -
-
- ); -}); - -export default injectIntl(WalletToken); diff --git a/source/renderer/app/components/wallet/tokens/WalletToken.scss b/source/renderer/app/components/wallet/tokens/WalletToken.scss deleted file mode 100644 index 057d93a8a8..0000000000 --- a/source/renderer/app/components/wallet/tokens/WalletToken.scss +++ /dev/null @@ -1,197 +0,0 @@ -.component { - overflow: hidden; - &:not(:last-of-type) { - border-bottom: 1px solid rgba(94, 96, 102, 0.15); - } - &.isExpanded:not(.removing) { - background-color: var(--theme-tokens-list-header-expanded-background-color); - padding-bottom: 20px; - .header { - background-color: var( - --theme-tokens-list-header-expanded-background-color - ); - &:hover { - background-color: var( - --theme-tokens-list-header-expanded-background-color-hover - ); - } - } - .content { - display: block; - } - } - &.inserting { - animation: insertAnimation 0.3s; - } - &.removing { - animation: removingAnimation 0.3s; - border-bottom: 0 none; - height: 0; - } -} -@keyframes insertAnimation { - 0% { - height: 0; - } - 100% { - height: 36px; - } -} -@keyframes removingAnimation { - 0% { - height: 36px; - } - 100% { - height: 0; - } -} - -.header { - cursor: pointer; - display: flex; - justify-content: space-between; - padding: 7px 42px 7px 39px; - position: relative; - .favoriteIcon { - border-radius: 3px; - cursor: pointer; - height: 22px; - left: 8px; - opacity: 0.3; - padding-top: 2px; - position: absolute; - top: 7px; - transition: opacity 0.25s; - width: 23px; - z-index: 1; - svg { - height: 14px; - width: 15px; - } - &.isFavorite { - opacity: 0.7; - } - &:not(.isFavorite) { - path { - stroke: var(--theme-button-flat-text-color-disabled); - } - } - &:hover { - opacity: 0.7; - &.isFavorite { - opacity: 1; - } - } - } - .asset { - max-width: calc(100% - 90px); - } - .assetAmount { - color: var(--theme-widgets-asset-token-text-color); - font-family: var(--font-regular); - font-size: 12px; - letter-spacing: 0.4px; - line-height: 1.33; - margin: 3px 0; - max-width: 80px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - &:hover { - background: var(--theme-button-flat-background-color-hover); - } -} -.leftContent { - max-width: 75%; -} -.rightContent { - max-width: 25%; -} -.arrow { - bottom: 10px; - height: 22px; - opacity: 0.3; - position: absolute; - right: 12px; - text-align: center; - top: 7px; - width: 12px; - z-index: 1; - - > svg { - height: 12px; - margin-top: 5px; - width: 12px; - - path { - fill: var(--theme-widgets-asset-token-text-color); - } - } - .header:hover & { - opacity: 0.5; - } - &.isExpanded { - transform: rotate(180deg); - } -} -.content { - display: none; - margin: 13px 12px 0; -} -.footer { - border-top: 1px solid var(--theme-wallet-settings-section-separator-color); - color: var(--theme-widgets-asset-token-text-color); - display: flex; - justify-content: space-between; - margin-top: 20px; - padding-top: 20px; - - dl { - line-height: 1; - padding: 9px 0 0 8px; - width: calc(100% - 264px); - } - - dt { - display: inline-block; - font-family: var(--font-medium); - font-size: 12px; - line-height: 1.33; - text-align: right; - white-space: nowrap; - width: 70px; - } - - dd { - display: inline-flex; - font-family: var(--font-light); - font-size: 12px; - line-height: 16px; - margin-left: 10px; - white-space: normal; - width: calc(100% - 100px); - word-break: break-all; - word-wrap: break-word; - } - - .footerButtons { - margin: auto 0; - white-space: nowrap; - .button { - height: 36px; - margin-left: 12px; - width: 120px; - &.disabled { - opacity: 0.4; - } - } - .settingsButton { - svg { - height: 9px; - margin-left: 6px; - width: 11px; - } - } - } -} diff --git a/source/renderer/app/components/wallet/tokens/WalletNoTokens.js b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js similarity index 95% rename from source/renderer/app/components/wallet/tokens/WalletNoTokens.js rename to source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js index a5c4431839..4ec76e11fd 100644 --- a/source/renderer/app/components/wallet/tokens/WalletNoTokens.js +++ b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js @@ -2,9 +2,9 @@ import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; -import BorderedBox from '../../widgets/BorderedBox'; +import BorderedBox from '../../../widgets/BorderedBox'; import styles from './WalletNoTokens.scss'; -import { ExternalLinkButton } from '../../widgets/ExternalLinkButton'; +import { ExternalLinkButton } from '../../../widgets/ExternalLinkButton'; const messages = defineMessages({ tokensTitle: { diff --git a/source/renderer/app/components/wallet/tokens/WalletNoTokens.scss b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.scss similarity index 91% rename from source/renderer/app/components/wallet/tokens/WalletNoTokens.scss rename to source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.scss index 5fa8ece952..3682724ca6 100644 --- a/source/renderer/app/components/wallet/tokens/WalletNoTokens.scss +++ b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.scss @@ -1,4 +1,4 @@ -@import '../../../themes/mixins/animations'; +@import '../../../../themes/mixins/animations'; .numberOfAssets { color: var(--theme-transactions-list-group-date-color); diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.js new file mode 100644 index 0000000000..6a75b6e428 --- /dev/null +++ b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.js @@ -0,0 +1,171 @@ +// @flow +import React, { useMemo } from 'react'; +import { observer } from 'mobx-react'; +import { injectIntl } from 'react-intl'; +import classNames from 'classnames'; +import { Select } from 'react-polymorph/lib/components/Select'; +import Dialog from '../../../widgets/Dialog'; +import WalletToken from '../wallet-token/WalletToken'; +import WalletTokensSearch from '../wallet-tokens-search/WalletTokensSearch'; +import WalletTokenPickerCheckbox from './WalletTokenPickerCheckbox'; +import DialogCloseButton from '../../../widgets/DialogCloseButton'; +import styles from './WalletTokenPicker.scss'; +import { messages } from './WalletTokenPicker.messages'; +import { + filterSelectOptions, + getToogleAllLabel, + getTokenCounterText, +} from './helpers'; +import { useFilters, useCheckboxes, useScrollPosition } from './hooks'; +import { MAX_TOKENS, ScrollPositionEnum } from './const'; +import type { Props } from './types'; + +const WalletTokenPicker = ({ + intl, + assets, + walletName, + tokenFavorites, + previouslyCheckedIds = [], + onAdd, + onCancel, +}: Props) => { + const { onScroll, scrollPosition } = useScrollPosition(); + const { + searchValue, + setSearchValue, + currentAssets, + filterOption, + setFilterOption, + } = useFilters({ + assets, + tokenFavorites, + }); + const { + checkboxes, + totalCheckedCount, + checkedIds, + previouslyCheckedIdsSet, + isMaxTotalCount, + isToggleAllDisabled, + isClearAllMode, + toogleAllFn, + toggleCheckbox, + } = useCheckboxes({ + assets, + currentAssets, + previouslyCheckedIds, + }); + const scrollNotTop = scrollPosition !== ScrollPositionEnum.TOP; + const toolbarStyles = classNames( + styles.toolbar, + scrollNotTop && styles.scrollNotTop + ); + const toolbarContainerStyles = classNames( + scrollNotTop && styles.toolbarContainer + ); + const actions = useMemo( + () => [ + { + label: intl.formatMessage(messages.cancelButtonLabel), + onClick: onCancel, + }, + { + label: intl.formatMessage(messages.addButtonLabel), + primary: true, + disabled: !checkedIds.length, + onClick: () => onAdd(checkedIds), + }, + ], + [intl, checkedIds, onAdd] + ); + + return ( + } + > +
+
+ +
+ +
+
+ setFocus(true)} + onBlur={() => setFocus(false)} onChange={onSearch} value={searchValue} placeholder={intl.formatMessage(messages.placeholder)} @@ -43,6 +52,6 @@ const WalletTokensSearch = observer((props: Props) => { )}
); -}); +}; -export default injectIntl(WalletTokensSearch); +export default injectIntl(observer(WalletTokensSearch)); diff --git a/source/renderer/app/components/wallet/tokens/WalletTokensSearch.scss b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss similarity index 74% rename from source/renderer/app/components/wallet/tokens/WalletTokensSearch.scss rename to source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss index e6f74aa291..a822a161fa 100644 --- a/source/renderer/app/components/wallet/tokens/WalletTokensSearch.scss +++ b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss @@ -1,35 +1,46 @@ .component { - margin: 0 20px 20px; position: relative; + .searchIcon { + color: var(--rp-input-border-color); left: 20px; position: absolute; - top: 17px; + top: 19px; z-index: 1; + svg { height: 15px; width: 15px; } } + + .focusSearchIcon { + color: var(--rp-input-border-color-focus); + } + input { border-radius: 4px; - padding: 13px 58px 13px 54px; + padding: 14px 58px 14px 45px; } + .clearButton { border-radius: 3px; cursor: pointer; height: 28px; position: absolute; right: 12px; - top: 11px; + top: 12px; width: 28px; z-index: 1; + &:hover { opacity: 0.8; } + svg { height: 10px; width: 10px; + polygon { fill: var(--theme-bordered-box-text-color); } diff --git a/source/renderer/app/components/wallet/tokens/WalletTokens.js b/source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js similarity index 88% rename from source/renderer/app/components/wallet/tokens/WalletTokens.js rename to source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js index f9483acb65..6376165a43 100644 --- a/source/renderer/app/components/wallet/tokens/WalletTokens.js +++ b/source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js @@ -3,12 +3,12 @@ import React, { useState, useCallback, useMemo } from 'react'; import { intlShape, injectIntl, defineMessages } from 'react-intl'; import { observer } from 'mobx-react'; import styles from './WalletTokens.scss'; -import Wallet from '../../../domains/Wallet'; -import WalletTokensList from './WalletTokensList'; -import WalletTokensSearch from './WalletTokensSearch'; -import LoadingSpinner from '../../widgets/LoadingSpinner'; -import type { AssetToken } from '../../../api/assets/types'; -import { TOGGLE_TOKEN_FAVORITE_TIMEOUT } from '../../../config/timingConfig'; +import Wallet from '../../../../domains/Wallet'; +import WalletTokensList from '../wallet-tokens-list/WalletTokensList'; +import WalletTokensSearch from '../wallet-tokens-search/WalletTokensSearch'; +import LoadingSpinner from '../../../widgets/LoadingSpinner'; +import type { AssetToken } from '../../../../api/assets/types'; +import { TOGGLE_TOKEN_FAVORITE_TIMEOUT } from '../../../../config/timingConfig'; const messages = defineMessages({ favoritesListTitle: { @@ -123,10 +123,12 @@ const WalletTokens = observer((props: Props) => { return (
{hasTokens && ( - +
+ +
)} {!!favoriteTokensList.length && ( { const { validateAmount, validateAssetAmount } = transactions; const { hwDeviceStatus } = hardwareWallets; const hasAssetsEnabled = WALLET_ASSETS_ENABLED; - const { all: allAssets, activeAsset, getAsset } = assetsStore; + const { all: allAssets, activeAsset, getAsset, favorites } = assetsStore; const { unsetActiveAsset } = actions.wallets; const selectedAsset = activeAsset @@ -103,8 +103,7 @@ export default class WalletSendPage extends Component { const wallet = wallets.active; if (!wallet) throw new Error('Active wallet required for WalletSendPage.'); - const { isHardwareWallet } = wallet; - + const { isHardwareWallet, name: walletName } = wallet; const walletTokens = wallet.assets.total; const assetTokens = getNonZeroAssetTokens(walletTokens, getAsset); const totalRawAssets = wallet.assets.total.length; @@ -148,6 +147,8 @@ export default class WalletSendPage extends Component { onUnsetActiveAsset={unsetActiveAsset.trigger} onExternalLinkClick={app.openExternalLink} isAddressFromSameWallet={isAddressFromSameWallet} + tokenFavorites={favorites} + walletName={walletName} /> ); } diff --git a/source/renderer/app/containers/wallet/WalletTokensPage.js b/source/renderer/app/containers/wallet/WalletTokensPage.js index 0be3c15ca9..0127cd6e2b 100644 --- a/source/renderer/app/containers/wallet/WalletTokensPage.js +++ b/source/renderer/app/containers/wallet/WalletTokensPage.js @@ -1,7 +1,7 @@ // @flow import React from 'react'; import { observer, inject } from 'mobx-react'; -import WalletTokens from '../../components/wallet/tokens/WalletTokens'; +import WalletTokens from '../../components/wallet/tokens/wallet-tokens/WalletTokens'; import type { InjectedProps } from '../../types/injectedPropsType'; import { getAssetTokens } from '../../utils/assets'; diff --git a/source/renderer/app/domains/Asset.js b/source/renderer/app/domains/Asset.js index bdf922b120..6c6eacce22 100644 --- a/source/renderer/app/domains/Asset.js +++ b/source/renderer/app/domains/Asset.js @@ -1,7 +1,8 @@ // @flow import { pick } from 'lodash'; -import { observable, action } from 'mobx'; +import { observable, action, computed } from 'mobx'; import type { Asset as AssetProps, AssetMetadata } from '../api/assets/types'; +import { hexToString } from '../utils/strings.js'; export default class Asset { @observable policyId: string = ''; @@ -11,6 +12,9 @@ export default class Asset { @observable metadata: ?AssetMetadata; @observable decimals: ?number; @observable recommendedDecimals: ?number; + @computed get assetNameASCII() { + return hexToString(this.assetName || ''); + } constructor(props: AssetProps) { const { uniqueId } = props; diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index b0e9975af4..c3b92ac857 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -13031,7 +13031,7 @@ "column": 3, "line": 14 }, - "file": "source/renderer/app/components/wallet/tokens/WalletNoTokens.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js", "id": "wallet.summary.assets.tokensTitle", "start": { "column": 15, @@ -13045,7 +13045,7 @@ "column": 3, "line": 19 }, - "file": "source/renderer/app/components/wallet/tokens/WalletNoTokens.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js", "id": "wallet.summary.noTokens.learnMore.textTop", "start": { "column": 20, @@ -13059,7 +13059,7 @@ "column": 3, "line": 24 }, - "file": "source/renderer/app/components/wallet/tokens/WalletNoTokens.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js", "id": "wallet.summary.noTokens.learnMore.textBottom", "start": { "column": 23, @@ -13073,7 +13073,7 @@ "column": 3, "line": 30 }, - "file": "source/renderer/app/components/wallet/tokens/WalletNoTokens.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js", "id": "wallet.summary.noTokens.learnMore.linkLabel", "start": { "column": 22, @@ -13087,7 +13087,7 @@ "column": 3, "line": 37 }, - "file": "source/renderer/app/components/wallet/tokens/WalletNoTokens.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js", "id": "wallet.summary.noTokens.learnMore.linkUrl", "start": { "column": 20, @@ -13095,129 +13095,227 @@ } } ], - "path": "source/renderer/app/components/wallet/tokens/WalletNoTokens.json" + "path": "source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.json" }, { "descriptors": [ { - "defaultMessage": "!!!Send", - "description": "Send button on Wallet summary assets page", + "defaultMessage": "!!!Add tokens", + "description": "Token picker title", "end": { "column": 3, - "line": 25 + "line": 9 }, - "file": "source/renderer/app/components/wallet/tokens/WalletToken.js", - "id": "wallet.summary.asset.tokenSendButton", + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.title", "start": { - "column": 19, - "line": 21 + "column": 9, + "line": 5 } }, { - "defaultMessage": "!!!Amount", - "description": "Amount label on Wallet summary assets page", + "defaultMessage": "!!!All tokens", + "description": "Label for all tokens option", "end": { "column": 3, - "line": 30 + "line": 14 }, - "file": "source/renderer/app/components/wallet/tokens/WalletToken.js", - "id": "wallet.summary.asset.amountLabel", + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.allTokensLabel", "start": { - "column": 15, - "line": 26 + "column": 18, + "line": 10 } }, { - "defaultMessage": "!!!Settings", - "description": "Settings label on Wallet summary assets page", + "defaultMessage": "!!!Favorites", + "description": "Label for favorite tokens option", "end": { "column": 3, - "line": 35 + "line": 19 }, - "file": "source/renderer/app/components/wallet/tokens/WalletToken.js", - "id": "wallet.summary.asset.settings.button.label", + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.favoriteTokensLabel", "start": { "column": 23, - "line": 31 + "line": 15 } }, { - "defaultMessage": "!!!Recommended configuration for decimal places for this native token is available.", - "description": "Asset settings recommended pop over content", + "defaultMessage": "!!!Select all", + "description": "Label for select all button label", "end": { "column": 3, - "line": 41 + "line": 24 }, - "file": "source/renderer/app/components/wallet/tokens/WalletToken.js", - "id": "assets.warning.available", + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.checkAllLabel", "start": { - "column": 35, - "line": 36 + "column": 17, + "line": 20 } }, { - "defaultMessage": "!!!You are not using the recommended decimal place configuration for this native token.", - "description": "Asset settings recommended pop over content", + "defaultMessage": "!!!{checkedCount} out of {maxTokens} tokens.", + "description": "Label of selected tokens count", "end": { "column": 3, - "line": 47 + "line": 29 }, - "file": "source/renderer/app/components/wallet/tokens/WalletToken.js", - "id": "assets.warning.notUsing", + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.checkedCountLabel", "start": { - "column": 34, - "line": 42 + "column": 21, + "line": 25 + } + }, + { + "defaultMessage": "!!!Cancel", + "description": "Label of cancel button", + "end": { + "column": 3, + "line": 34 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.cancelButtonLabel", + "start": { + "column": 21, + "line": 30 + } + }, + { + "defaultMessage": "!!!Add", + "description": "Label of add button", + "end": { + "column": 3, + "line": 39 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.addButtonLabel", + "start": { + "column": 18, + "line": 35 + } + }, + { + "defaultMessage": "!!!Clear selection", + "description": "Label of clear selection button", + "end": { + "column": 3, + "line": 44 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.clearAll", + "start": { + "column": 12, + "line": 40 + } + }, + { + "defaultMessage": "!!!Results do not match search query", + "description": "Text for no results", + "end": { + "column": 3, + "line": 49 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.noResults", + "start": { + "column": 13, + "line": 45 + } + }, + { + "defaultMessage": "!!!You have already reached a maximum of {maxTokens} tokens for your transaction. To add another token you need to remove one from a list.", + "description": "Max tokens warning", + "end": { + "column": 3, + "line": 55 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js", + "id": "wallet.token.picker.maxTokensWarning", + "start": { + "column": 20, + "line": 50 } } ], - "path": "source/renderer/app/components/wallet/tokens/WalletToken.json" + "path": "source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.json" }, { "descriptors": [ { - "defaultMessage": "!!!Favorites", - "description": "Favorites list title label", + "defaultMessage": "!!!Send", + "description": "Send button on Wallet summary assets page", + "end": { + "column": 3, + "line": 8 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js", + "id": "wallet.summary.asset.tokenSendButton", + "start": { + "column": 19, + "line": 4 + } + }, + { + "defaultMessage": "!!!Amount", + "description": "Amount label on Wallet summary assets page", + "end": { + "column": 3, + "line": 13 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js", + "id": "wallet.summary.asset.amountLabel", + "start": { + "column": 15, + "line": 9 + } + }, + { + "defaultMessage": "!!!Settings", + "description": "Settings label on Wallet summary assets page", "end": { "column": 3, "line": 18 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokens.js", - "id": "wallet.tokens.list.favorites.title", + "file": "source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js", + "id": "wallet.summary.asset.settings.button.label", "start": { - "column": 22, + "column": 23, "line": 14 } }, { - "defaultMessage": "!!!Tokens", - "description": "Favorites list title label", + "defaultMessage": "!!!Recommended configuration for decimal places for this native token is available.", + "description": "Asset settings recommended pop over content", "end": { "column": 3, - "line": 23 + "line": 24 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokens.js", - "id": "wallet.tokens.list.tokens.title", + "file": "source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js", + "id": "assets.warning.available", "start": { - "column": 19, + "column": 35, "line": 19 } }, { - "defaultMessage": "!!!The balance and transaction history of this wallet is being synced with the blockchain.", - "description": "Syncing transactions message shown during async wallet restore in the wallet send form.", + "defaultMessage": "!!!You are not using the recommended decimal place configuration for this native token.", + "description": "Asset settings recommended pop over content", "end": { "column": 3, "line": 30 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokens.js", - "id": "wallet.send.form.syncingTransactionsMessage", + "file": "source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js", + "id": "assets.warning.notUsing", "start": { - "column": 18, - "line": 24 + "column": 34, + "line": 25 } } ], - "path": "source/renderer/app/components/wallet/tokens/WalletTokens.json" + "path": "source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.json" }, { "descriptors": [ @@ -13226,13 +13324,13 @@ "description": "No results on the WalletTokensList", "end": { "column": 3, - "line": 24 + "line": 9 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokensList.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js", "id": "wallet.tokens.list.search.noResults", "start": { "column": 13, - "line": 20 + "line": 5 } }, { @@ -13240,13 +13338,13 @@ "description": "Search Results on the WalletTokensList", "end": { "column": 3, - "line": 29 + "line": 14 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokensList.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js", "id": "wallet.tokens.list.search.searchResults", "start": { "column": 17, - "line": 25 + "line": 10 } }, { @@ -13254,13 +13352,13 @@ "description": "Amount header on the WalletTokensList", "end": { "column": 3, - "line": 34 + "line": 19 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokensList.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js", "id": "wallet.tokens.list.column.amount", "start": { "column": 16, - "line": 30 + "line": 15 } }, { @@ -13268,13 +13366,13 @@ "description": "Token header on the WalletTokensList", "end": { "column": 3, - "line": 39 + "line": 24 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokensList.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js", "id": "wallet.tokens.list.column.token", "start": { "column": 15, - "line": 35 + "line": 20 } }, { @@ -13282,17 +13380,17 @@ "description": "View all button label on the WalletTokensList", "end": { "column": 3, - "line": 44 + "line": 29 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokensList.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js", "id": "wallet.tokens.list.viewAllButton.label", "start": { "column": 22, - "line": 40 + "line": 25 } } ], - "path": "source/renderer/app/components/wallet/tokens/WalletTokensList.json" + "path": "source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.json" }, { "descriptors": [ @@ -13303,7 +13401,7 @@ "column": 3, "line": 17 }, - "file": "source/renderer/app/components/wallet/tokens/WalletTokensSearch.js", + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js", "id": "wallet.tokens.search.placeholder", "start": { "column": 15, @@ -13311,7 +13409,54 @@ } } ], - "path": "source/renderer/app/components/wallet/tokens/WalletTokensSearch.json" + "path": "source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.json" + }, + { + "descriptors": [ + { + "defaultMessage": "!!!Favorites", + "description": "Favorites list title label", + "end": { + "column": 3, + "line": 18 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js", + "id": "wallet.tokens.list.favorites.title", + "start": { + "column": 22, + "line": 14 + } + }, + { + "defaultMessage": "!!!Tokens", + "description": "Favorites list title label", + "end": { + "column": 3, + "line": 23 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js", + "id": "wallet.tokens.list.tokens.title", + "start": { + "column": 19, + "line": 19 + } + }, + { + "defaultMessage": "!!!The balance and transaction history of this wallet is being synced with the blockchain.", + "description": "Syncing transactions message shown during async wallet restore in the wallet send form.", + "end": { + "column": 3, + "line": 30 + }, + "file": "source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js", + "id": "wallet.send.form.syncingTransactionsMessage", + "start": { + "column": 18, + "line": 24 + } + } + ], + "path": "source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.json" }, { "descriptors": [ diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index 5214f8cd71..b1a4cba4a9 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -1147,10 +1147,20 @@ "wallet.summary.transactionsList.syncingTransactionsMessage": "Your transaction history for this wallet is being synced with the blockchain.", "wallet.summary.transactionsList.todayLabel": "Today", "wallet.summary.transactionsList.yesterdayLabel": "Yesterday", + "wallet.token.picker.addButtonLabel": "Add", + "wallet.token.picker.allTokensLabel": "All tokens", + "wallet.token.picker.cancelButtonLabel": "Cancel", + "wallet.token.picker.checkAllLabel": "Select all", + "wallet.token.picker.checkedCountLabel": "{checkedCount} out of {maxTokens} tokens.", + "wallet.token.picker.clearAll": "Clear selection", + "wallet.token.picker.favoriteTokensLabel": "Favorites", + "wallet.token.picker.maxTokensWarning": "You have already reached a maximum of {maxTokens} tokens for your transaction. To add another token you need to remove one from a list.", + "wallet.token.picker.noResults": "Results do not match search query", + "wallet.token.picker.title": "Add tokens", "wallet.tokens.list.column.amount": "Amount", "wallet.tokens.list.column.token": "Token", "wallet.tokens.list.favorites.title": "Favorites", - "wallet.tokens.list.search.noResults": "No results matching your query", + "wallet.tokens.list.search.noResults": "Results do not match search query", "wallet.tokens.list.search.searchResults": ". Search results", "wallet.tokens.list.tokens.title": "Tokens", "wallet.tokens.list.viewAllButton.label": "View all tokens", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index bff3a92e22..62dc29689e 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -1147,10 +1147,20 @@ "wallet.summary.transactionsList.syncingTransactionsMessage": "ウォレットのトランザクション履歴は現在ブロックチェーンと同期中です。", "wallet.summary.transactionsList.todayLabel": "今日", "wallet.summary.transactionsList.yesterdayLabel": "昨日", + "wallet.token.picker.addButtonLabel": "キャンセル", + "wallet.token.picker.allTokensLabel": "すべてのトークン", + "wallet.token.picker.cancelButtonLabel": "キャンセル", + "wallet.token.picker.checkAllLabel": "すべてを選択", + "wallet.token.picker.checkedCountLabel": "{checkedCount}/{maxTokens}トークン。", + "wallet.token.picker.clearAll": "選択を解除する", + "wallet.token.picker.favoriteTokensLabel": "お気に入り", + "wallet.token.picker.maxTokensWarning": "最大{maxTokens}のトランザクション上限に達しています。別のトークンを加えるには、リストから1つ削除する必要があります。", + "wallet.token.picker.noResults": "検索クエリと一致する結果はありません", + "wallet.token.picker.title": "トークンを追加する", "wallet.tokens.list.column.amount": "金額", "wallet.tokens.list.column.token": "トークン", "wallet.tokens.list.favorites.title": "お気に入り", - "wallet.tokens.list.search.noResults": "該当する結果はありません", + "wallet.tokens.list.search.noResults": "検索クエリと一致する結果はありません", "wallet.tokens.list.search.searchResults": "。検索結果", "wallet.tokens.list.tokens.title": "トークン", "wallet.tokens.list.viewAllButton.label": "すべてのトークンを表示する", diff --git a/source/renderer/app/themes/daedalus/cardano.js b/source/renderer/app/themes/daedalus/cardano.js index 1a4720a955..be9802dc92 100644 --- a/source/renderer/app/themes/daedalus/cardano.js +++ b/source/renderer/app/themes/daedalus/cardano.js @@ -1018,6 +1018,10 @@ export const CARDANO_THEME_OUTPUT = { 'rgba(32, 34, 37, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(32, 34, 37, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#5e6066', diff --git a/source/renderer/app/themes/daedalus/dark-blue.js b/source/renderer/app/themes/daedalus/dark-blue.js index faedf936ad..633eaebe22 100644 --- a/source/renderer/app/themes/daedalus/dark-blue.js +++ b/source/renderer/app/themes/daedalus/dark-blue.js @@ -1023,6 +1023,10 @@ export const DARK_BLUE_THEME_OUTPUT = { 'rgba(233, 244, 254, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(233, 244, 254, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#e9f4fe', diff --git a/source/renderer/app/themes/daedalus/dark-cardano.js b/source/renderer/app/themes/daedalus/dark-cardano.js index 9f566bcfac..f8c5f94973 100644 --- a/source/renderer/app/themes/daedalus/dark-cardano.js +++ b/source/renderer/app/themes/daedalus/dark-cardano.js @@ -1011,6 +1011,10 @@ export const DARK_CARDANO_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(255, 255, 255, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#ffffff', diff --git a/source/renderer/app/themes/daedalus/flight-candidate.js b/source/renderer/app/themes/daedalus/flight-candidate.js index 5cfbefce95..6cf5780ee2 100644 --- a/source/renderer/app/themes/daedalus/flight-candidate.js +++ b/source/renderer/app/themes/daedalus/flight-candidate.js @@ -1009,6 +1009,10 @@ export const FLIGHT_CANDIDATE_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(255, 255, 255, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#ffffff', diff --git a/source/renderer/app/themes/daedalus/incentivized-testnet.js b/source/renderer/app/themes/daedalus/incentivized-testnet.js index 3213854772..f24ea95c33 100644 --- a/source/renderer/app/themes/daedalus/incentivized-testnet.js +++ b/source/renderer/app/themes/daedalus/incentivized-testnet.js @@ -1012,6 +1012,10 @@ export const INCENTIVIZED_TESTNET_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(255, 255, 255, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#ffffff', diff --git a/source/renderer/app/themes/daedalus/light-blue.js b/source/renderer/app/themes/daedalus/light-blue.js index 21412c5edb..e1d06eacbb 100644 --- a/source/renderer/app/themes/daedalus/light-blue.js +++ b/source/renderer/app/themes/daedalus/light-blue.js @@ -1015,6 +1015,10 @@ export const LIGHT_BLUE_THEME_OUTPUT = { 'rgba(68, 91, 124, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(68, 91, 124, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#5e6066', diff --git a/source/renderer/app/themes/daedalus/shelley-testnet.js b/source/renderer/app/themes/daedalus/shelley-testnet.js index e195389d32..8384d830cc 100644 --- a/source/renderer/app/themes/daedalus/shelley-testnet.js +++ b/source/renderer/app/themes/daedalus/shelley-testnet.js @@ -1009,6 +1009,10 @@ export const SHELLEY_TESTNET_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(255, 255, 255, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#ffffff', diff --git a/source/renderer/app/themes/daedalus/white.js b/source/renderer/app/themes/daedalus/white.js index ceaec6380b..0417903056 100644 --- a/source/renderer/app/themes/daedalus/white.js +++ b/source/renderer/app/themes/daedalus/white.js @@ -1010,6 +1010,10 @@ export const WHITE_THEME_OUTPUT = { 'rgba(41, 181, 149, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(41, 181, 149, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#2d2d2d', diff --git a/source/renderer/app/themes/daedalus/yellow.js b/source/renderer/app/themes/daedalus/yellow.js index f569bdbc27..865fedd077 100644 --- a/source/renderer/app/themes/daedalus/yellow.js +++ b/source/renderer/app/themes/daedalus/yellow.js @@ -1005,6 +1005,10 @@ export const YELLOW_THEME_OUTPUT = { 'rgba(45, 45, 45, 0.05)', '--theme-tokens-list-header-expanded-background-color-hover': 'rgba(45, 45, 45, 0.03)', + '--theme-tokens-picker-toolbar-box-shadow': 'rgba(0, 0, 0, 0.25)', + '--theme-tokens-picker-toolbar-border-bottom-color': + 'rgba(94, 96, 102, 0.5)', + '--theme-tokens-picker-token-separator': 'rgba(94, 96, 102, 0.15)', }, uploader: { '--theme-uploader-text-color': '#2d2d2d', diff --git a/source/renderer/app/utils/assets.js b/source/renderer/app/utils/assets.js index 96e27387c2..b4950d82d3 100644 --- a/source/renderer/app/utils/assets.js +++ b/source/renderer/app/utils/assets.js @@ -39,10 +39,12 @@ export const filterAssets = ( export const getZeroToken = ({ policyId, assetName, + assetNameASCII, uniqueId, }: Asset): Token => ({ policyId, assetName, + assetNameASCII, uniqueId, quantity: new BigNumber(0), }); @@ -73,6 +75,7 @@ export const getAssetToken = ( { policyId, assetName, + assetNameASCII, fingerprint, metadata, decimals, @@ -83,6 +86,7 @@ export const getAssetToken = ( ): AssetToken => ({ policyId, assetName, + assetNameASCII, quantity, address, fingerprint, @@ -120,12 +124,13 @@ export const getAssetTokenFromToken = ( asset: Token, getAsset: Function ): AssetToken => { - const { policyId, assetName, quantity, address } = asset; + const { policyId, assetName, assetNameASCII, quantity, address } = asset; const { fingerprint, metadata, decimals, recommendedDecimals, uniqueId } = getAsset(policyId, assetName) || {}; return { policyId, assetName, + assetNameASCII, quantity, address, fingerprint, @@ -251,11 +256,18 @@ export const searchAssets = ( return assets; } return filter(assets, (asset) => { - const { policyId, assetName, fingerprint, metadata } = asset; + const { + policyId, + assetName, + assetNameASCII, + fingerprint, + metadata, + } = asset; const { name, ticker, description } = metadata || {}; const checkList = [ policyId, assetName, + assetNameASCII, fingerprint, metadata, name, diff --git a/storybook/stories/_support/utils.js b/storybook/stories/_support/utils.js index fb72341e8e..b8eac8610e 100644 --- a/storybook/stories/_support/utils.js +++ b/storybook/stories/_support/utils.js @@ -32,6 +32,7 @@ import type { WalletTokens, AssetToken, } from '../../../source/renderer/app/api/assets/types'; +import { hexToString } from '../../../source/renderer/app/utils/strings'; import type { SyncStateStatus } from '../../../source/renderer/app/api/wallets/types'; import type { TransactionMetadata } from '../../../source/renderer/app/types/TransactionMetadata'; @@ -161,6 +162,7 @@ export const generateAssetToken = ( ): AssetToken => ({ policyId, assetName, + assetNameASCII: hexToString(assetName), fingerprint, metadata, quantity: new BigNumber(quantity), diff --git a/storybook/stories/assets/Asset.stories.js b/storybook/stories/assets/Asset.stories.js index 1ed74ed522..90481515f7 100644 --- a/storybook/stories/assets/Asset.stories.js +++ b/storybook/stories/assets/Asset.stories.js @@ -43,7 +43,7 @@ storiesOf('Assets|Asset pill', module) }, }, }} - small={boolean('small', false)} + small={boolean('small', true)} hidePopOver={boolean('hidePopOver')} onCopyAssetParam={action('onCopyAssetParam')} onClickSettings={ diff --git a/storybook/stories/wallets/index.js b/storybook/stories/wallets/index.js index 6d333918b9..68efb43588 100644 --- a/storybook/stories/wallets/index.js +++ b/storybook/stories/wallets/index.js @@ -10,6 +10,7 @@ import './transactions/TransactionMetadata.stories'; import './transactions/Utxo.stories'; import './tokens/WalletTokens.stories'; import './tokens/WalletTokensList.stories'; +import '../../../source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories'; import './settings/WalletSettings.stories'; import './addWallet/AddWallet.stories'; import './import/WalletImportFile.stories'; diff --git a/storybook/stories/wallets/send/WalletSend.stories.js b/storybook/stories/wallets/send/WalletSend.stories.js index c6f0cd23b8..149a7bef84 100644 --- a/storybook/stories/wallets/send/WalletSend.stories.js +++ b/storybook/stories/wallets/send/WalletSend.stories.js @@ -241,6 +241,8 @@ storiesOf('Wallets|Send', module) selectedAsset={null} onUnsetActiveAsset={() => {}} isAddressFromSameWallet={boolean('isAddressFromSameWallet', false)} + tokenFavorites={{}} + walletName="My wallet" /> )) .add('Send - Hardware wallet verifying transaction', () => ( @@ -265,6 +267,8 @@ storiesOf('Wallets|Send', module) selectedAsset={null} onUnsetActiveAsset={() => {}} isAddressFromSameWallet={boolean('isAddressFromSameWallet', false)} + tokenFavorites={{}} + walletName="My wallet" /> )) .add('Send - Hardware wallet verifying transaction succeeded', () => ( @@ -289,6 +293,8 @@ storiesOf('Wallets|Send', module) selectedAsset={null} onUnsetActiveAsset={() => {}} isAddressFromSameWallet={boolean('isAddressFromSameWallet', false)} + tokenFavorites={{}} + walletName="My wallet" /> )) .add('Send - Hardware wallet verifying transaction failed', () => ( @@ -313,6 +319,8 @@ storiesOf('Wallets|Send', module) selectedAsset={null} onUnsetActiveAsset={() => {}} isAddressFromSameWallet={boolean('isAddressFromSameWallet', false)} + tokenFavorites={{}} + walletName="My wallet" /> )) .add('Send - With Assets', () => ( @@ -340,6 +348,8 @@ storiesOf('Wallets|Send', module) selectedAsset={null} onUnsetActiveAsset={() => {}} isAddressFromSameWallet={boolean('isAddressFromSameWallet', false)} + tokenFavorites={{}} + walletName="My wallet" /> )) .add('Wallet Send Confirmation Dialog With Assets', () => { diff --git a/storybook/stories/wallets/tokens/WalletTokens.stories.js b/storybook/stories/wallets/tokens/WalletTokens.stories.js index 27011a63f9..e33337cc8b 100644 --- a/storybook/stories/wallets/tokens/WalletTokens.stories.js +++ b/storybook/stories/wallets/tokens/WalletTokens.stories.js @@ -15,7 +15,7 @@ import { import WalletsWrapper from '../_utils/WalletsWrapper'; // Screens -import WalletTokens from '../../../../source/renderer/app/components/wallet/tokens/WalletTokens'; +import WalletTokens from '../../../../source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens'; const assets = [ generateAssetToken( diff --git a/storybook/stories/wallets/tokens/WalletTokensList.stories.js b/storybook/stories/wallets/tokens/WalletTokensList.stories.js index b553f88750..8c11c38df6 100644 --- a/storybook/stories/wallets/tokens/WalletTokensList.stories.js +++ b/storybook/stories/wallets/tokens/WalletTokensList.stories.js @@ -17,7 +17,7 @@ import { import type { WalletTokens } from '../../../../source/renderer/app/api/assets/types'; // Screens -import WalletTokensList from '../../../../source/renderer/app/components/wallet/tokens/WalletTokensList'; +import WalletTokensList from '../../../../source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList'; const assets = [ generateAssetToken( From ebb2670dff9caf990c2f8f87331020d5d817fcc7 Mon Sep 17 00:00:00 2001 From: Renan Valentin Date: Fri, 21 Jan 2022 11:27:51 -0300 Subject: [PATCH 007/204] [DDW-741] Implement Wallet sorting (#2775) Co-authored-by: Daniel Main --- CHANGELOG.md | 3 + jest.config.js | 8 +- package.json | 2 + .../renderer/app/actions/sidebar-actions.js | 1 + .../app/assets/images/sort-arrow.inline.svg | 15 + .../app/components/sidebar/Sidebar.js | 7 +- .../app/components/sidebar/SidebarMenu.scss | 3 +- .../renderer/app/components/sidebar/types.js | 14 +- .../sidebar/wallets/SidebarWalletMenuItem.js | 25 +- .../wallets/SidebarWalletMenuItem.scss | 10 +- .../sidebar/wallets/SidebarWalletsMenu.js | 131 +++++++- .../sidebar/wallets/SidebarWalletsMenu.scss | 24 +- .../wallets/SidebarWalletsMenu.spec.js | 106 +++++++ .../sidebar/wallets/WalletSearch.js | 59 ++++ .../sidebar/wallets/WalletSearch.scss | 69 +++++ .../sidebar/wallets/WalletSortButton.js | 60 ++++ .../sidebar/wallets/WalletSortButton.scss | 86 ++++++ .../staking/stake-pools/StakePoolsSearch.scss | 4 + .../WalletTokensSearch.js | 2 +- .../WalletTokensSearch.scss | 1 + source/renderer/app/config/sidebarConfig.js | 2 + source/renderer/app/containers/MainLayout.js | 10 + .../app/i18n/locales/defaultMessages.json | 107 ++++++- source/renderer/app/i18n/locales/en-US.json | 7 + source/renderer/app/i18n/locales/ja-JP.json | 7 + source/renderer/app/stores/SidebarStore.js | 40 ++- .../renderer/app/stores/SidebarStore.spec.js | 282 ++++++++++++++++++ .../renderer/app/themes/daedalus/cardano.js | 2 + .../renderer/app/themes/daedalus/dark-blue.js | 2 + .../app/themes/daedalus/dark-cardano.js | 2 + .../app/themes/daedalus/flight-candidate.js | 2 + .../themes/daedalus/incentivized-testnet.js | 2 + .../app/themes/daedalus/light-blue.js | 2 + .../app/themes/daedalus/shelley-testnet.js | 2 + source/renderer/app/themes/daedalus/white.js | 2 + source/renderer/app/themes/daedalus/yellow.js | 2 + source/renderer/app/types/sidebarTypes.js | 24 ++ source/renderer/app/utils/walletSorting.js | 90 ++++++ .../renderer/app/utils/walletSorting.spec.js | 151 ++++++++++ storybook/stories/_support/StoryLayout.js | 11 + .../navigation/SidebarWalletsMenu.stories.js | 165 +++++----- yarn.lock | 8 + 42 files changed, 1463 insertions(+), 89 deletions(-) create mode 100644 source/renderer/app/assets/images/sort-arrow.inline.svg create mode 100644 source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.js create mode 100644 source/renderer/app/components/sidebar/wallets/WalletSearch.js create mode 100644 source/renderer/app/components/sidebar/wallets/WalletSearch.scss create mode 100644 source/renderer/app/components/sidebar/wallets/WalletSortButton.js create mode 100644 source/renderer/app/components/sidebar/wallets/WalletSortButton.scss create mode 100644 source/renderer/app/stores/SidebarStore.spec.js create mode 100644 source/renderer/app/utils/walletSorting.js create mode 100644 source/renderer/app/utils/walletSorting.spec.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 56a1d1edd3..b7fc6ff9d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,13 @@ ### Features +- Implemented wallet sorting on sidebar menu ([PR 2775](https://github.com/input-output-hk/daedalus/pull/2775)) - Implemented new token picker ([PR 2787](https://github.com/input-output-hk/daedalus/pull/2787)) ## 4.8.0-FC1 +### Features + - Added dynamic RTS flags setting ([PR 2758](https://github.com/input-output-hk/daedalus/pull/2758/files)) - Updated messages about Cardano node sync on the initial screen ([PR 2827](https://github.com/input-output-hk/daedalus/pull/2827)) ([PR 2831](https://github.com/input-output-hk/daedalus/pull/2831)) diff --git a/jest.config.js b/jest.config.js index fba7a4c536..6acaa555b8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -182,10 +182,10 @@ module.exports = { }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], + transformIgnorePatterns: [ + 'node_modules/(?!react-polymorph)', + // "\\.pnp\\.[^\\/]+$" + ], // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/package.json b/package.json index f14320cc4f..57802061c4 100644 --- a/package.json +++ b/package.json @@ -205,9 +205,11 @@ "fireworks-js": "1.0.4", "form-data": "3.0.0", "fs-extra": "9.0.1", + "fuse.js": "6.5.3", "glob": "7.1.6", "graceful-fs": "4.2.4", "gulp": "4.0.2", + "highlight-words": "1.2.0", "history": "4.10.1", "humanize-duration": "3.23.1", "inquirer": "7.3.3", diff --git a/source/renderer/app/actions/sidebar-actions.js b/source/renderer/app/actions/sidebar-actions.js index f0f489ce71..a11ad87a5d 100644 --- a/source/renderer/app/actions/sidebar-actions.js +++ b/source/renderer/app/actions/sidebar-actions.js @@ -1,4 +1,5 @@ // @flow + import Action from './lib/Action'; // ======= SIDEBAR ACTIONS ======= diff --git a/source/renderer/app/assets/images/sort-arrow.inline.svg b/source/renderer/app/assets/images/sort-arrow.inline.svg new file mode 100644 index 0000000000..4a70848e34 --- /dev/null +++ b/source/renderer/app/assets/images/sort-arrow.inline.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/source/renderer/app/components/sidebar/Sidebar.js b/source/renderer/app/components/sidebar/Sidebar.js index 4a35cce6f0..6d7a99ac75 100644 --- a/source/renderer/app/components/sidebar/Sidebar.js +++ b/source/renderer/app/components/sidebar/Sidebar.js @@ -79,11 +79,16 @@ const Sidebar = ({ id === menus?.wallets?.activeWalletId} isAddWalletButtonActive={pathname === ROUTES.WALLETS.ADD} isShelleyActivated={isShelleyActivated} visible={isShowingSubMenus} + onWalletSortBy={menus?.wallets?.actions.onWalletSortBy} + sortBy={menus?.wallets?.walletSortConfig?.sortBy} + sortOrder={menus?.wallets?.walletSortConfig?.sortOrder} + searchValue={menus?.wallets?.searchValue} + onSearch={menus?.wallets?.actions.onSearch} /> )}
diff --git a/source/renderer/app/components/sidebar/SidebarMenu.scss b/source/renderer/app/components/sidebar/SidebarMenu.scss index 52fb8c2e00..e9deffee81 100644 --- a/source/renderer/app/components/sidebar/SidebarMenu.scss +++ b/source/renderer/app/components/sidebar/SidebarMenu.scss @@ -10,5 +10,6 @@ } .visible { - display: block; + display: flex; + flex-direction: column; } diff --git a/source/renderer/app/components/sidebar/types.js b/source/renderer/app/components/sidebar/types.js index 8ea9f4780c..9901e5abc2 100644 --- a/source/renderer/app/components/sidebar/types.js +++ b/source/renderer/app/components/sidebar/types.js @@ -1,5 +1,10 @@ // @flow -import type { SidebarWalletType } from '../../types/sidebarTypes'; +import type { + SidebarWalletType, + WalletSortByOptions, + WalletSortOrderOptions, + WalletSortConfig, +} from '../../types/sidebarTypes'; export type SidebarMenus = { wallets: ?{ @@ -7,7 +12,14 @@ export type SidebarMenus = { activeWalletId: ?string, actions: { onWalletItemClick: Function, + onWalletSortBy: ({ + sortBy: WalletSortByOptions, + sortOrder: WalletSortOrderOptions, + }) => void, + onSearch: (term: string) => void, }, + walletSortConfig: WalletSortConfig, + searchValue: string, }, }; diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.js b/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.js index f559f34417..6ff98fc89b 100644 --- a/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.js +++ b/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classNames from 'classnames'; +import highlightWords from 'highlight-words'; import SVGInline from 'react-svg-inline'; import LegacyBadge, { LEGACY_BADGE_MODES, @@ -26,6 +27,7 @@ type Props = { hasNotification: boolean, isHardwareWalletDisconnected?: boolean, isHardwareWallet: boolean, + searchValue: string, }; @observer @@ -45,6 +47,7 @@ export default class SidebarWalletMenuItem extends Component { hasNotification, isHardwareWalletDisconnected, isHardwareWallet, + searchValue, } = this.props; const showLegacyBadge = isLegacy && isShelleyActivated; @@ -67,11 +70,29 @@ export default class SidebarWalletMenuItem extends Component { : styles.connected, ]); + const chunks = highlightWords({ + text: title, + query: `/(${searchValue.split('').join('|')})/i`, + }); + return ( - + )} + + ); +}; + +export const WalletSearch = injectIntl(observer(WalletSearchComponent)); diff --git a/source/renderer/app/components/sidebar/wallets/WalletSearch.scss b/source/renderer/app/components/sidebar/wallets/WalletSearch.scss new file mode 100644 index 0000000000..de3d582413 --- /dev/null +++ b/source/renderer/app/components/sidebar/wallets/WalletSearch.scss @@ -0,0 +1,69 @@ +$inactive-color: rgba(var(--theme-sidebar-search-field-border-color), 0.1); +$active-color: rgba(var(--theme-sidebar-search-field-border-color), 0.5); + +.component { + align-items: center; + + border-bottom: 1px solid $inactive-color; + display: flex; + position: relative; + + &:focus, + &:active, + &:focus-within { + border-bottom-color: $active-color; + + .searchIcon { + color: $active-color; + } + } +} + +.searchIcon { + bottom: 6px; + color: rgba(var(--theme-sidebar-search-field-border-color), 0.2); + position: absolute; + svg { + height: 15px; + width: 15px; + } +} + +.input { + border-radius: 4px; + + input { + background: none; + border: none; + color: var(--theme-sidebar-menu-add-button-text-color); + + padding-bottom: 6px; + padding-left: 25px; + padding-top: 5px; + + &::placeholder { + color: rgba(var(--theme-sidebar-search-field-border-color), 0.3); + } + } +} + +.clearButton { + border-radius: 3px; + bottom: 4px; + cursor: pointer; + height: 28px; + opacity: 0.5; + position: absolute; + right: 0; + width: 28px; + &:hover { + opacity: 1; + } + svg { + height: 8px; + width: 8px; + polygon { + fill: var(--theme-sidebar-menu-add-button-text-color); + } + } +} diff --git a/source/renderer/app/components/sidebar/wallets/WalletSortButton.js b/source/renderer/app/components/sidebar/wallets/WalletSortButton.js new file mode 100644 index 0000000000..97d578f4ea --- /dev/null +++ b/source/renderer/app/components/sidebar/wallets/WalletSortButton.js @@ -0,0 +1,60 @@ +// @flow +import React from 'react'; +import SVGInline from 'react-svg-inline'; +import classNames from 'classnames'; +import { Button } from 'react-polymorph/lib/components/Button'; +import { PopOver } from 'react-polymorph/lib/components/PopOver'; +import type { WalletSortOrderOptions } from '../../../types/sidebarTypes'; +import { WalletSortOrder } from '../../../types/sidebarTypes'; +import arrow from '../../../assets/images/sort-arrow.inline.svg'; +import styles from './WalletSortButton.scss'; + +type Props = { + onClick: () => void, + label: string, + isActive: boolean, + sortOrder: WalletSortOrderOptions, + tooltip: string, +}; + +export function WalletSortButton({ + onClick, + label, + isActive, + sortOrder, + tooltip, +}: Props) { + const walletSortButtonStyles = classNames([ + styles.walletSortButton, + isActive ? styles.walletSortButtonActive : null, + ]); + + const walletSortOrderArrowStyles = classNames([ + styles.walletSortOrderArrowContainer, + sortOrder === WalletSortOrder.Asc ? styles.walletSortOrderArrowAsc : null, + ]); + + return ( + +
+
+
+ ); +} diff --git a/source/renderer/app/components/sidebar/wallets/WalletSortButton.scss b/source/renderer/app/components/sidebar/wallets/WalletSortButton.scss new file mode 100644 index 0000000000..4cba3c2c34 --- /dev/null +++ b/source/renderer/app/components/sidebar/wallets/WalletSortButton.scss @@ -0,0 +1,86 @@ +.walletSortButtonContainer { + position: relative; + + .walletSortButton { + align-items: center; + background-color: rgba( + var(--theme-sidebar-sort-button-background-color), + 0.1 + ); + color: var(--theme-sidebar-menu-add-button-text-color); + display: flex; + font-size: 11px; + height: 22px; + opacity: 0.3; + padding: 0 8px; + width: auto; + + &.walletSortButtonActive, + &:hover, + &:active { + opacity: 1; + } + + &.walletSortButtonActive { + background-color: rgba( + var(--theme-sidebar-sort-button-background-color), + 0.1 + ); + } + + &:hover { + background-color: rgba( + var(--theme-sidebar-sort-button-background-color), + 0.05 + ); + } + + &:active { + background-color: rgba( + var(--theme-sidebar-sort-button-background-color), + 0.12 + ); + } + } +} + +.walletSortButtonActive { + opacity: 1; +} + +.walletSortOrderArrowContainer { + align-items: center; + background-color: var(--theme-sidebar-menu-background-color); + + border-radius: 4px; + + display: flex; + height: 12px; + justify-content: center; + position: absolute; + right: -4px; + top: -2px; + + width: 12px; + z-index: 1; +} + +.walletSortOrderArrow { + align-items: center; + display: flex; + height: 100%; + justify-content: center; + width: 100%; + + > svg { + transform: scale(0.5); + + path { + stroke: var(--theme-sidebar-menu-add-button-text-color); + } + } +} + +.walletSortOrderArrowAsc { + transform: rotate(-180deg); +} diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss index e049c9e014..73fcad1291 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss @@ -20,6 +20,10 @@ svg { width: 15px; + opacity: 0.3; + g > g { + fill: var(--theme-staking-stake-pools-search-icon-color); + } } } diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js index 756f64b241..4bbba03400 100644 --- a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js +++ b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js @@ -19,7 +19,7 @@ const messages = defineMessages({ type Props = { intl: intlShape.isRequired, - onSearch: Function, + onSearch: (term: string) => string, searchValue: string, }; diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss index a822a161fa..2ac6771358 100644 --- a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss +++ b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss @@ -11,6 +11,7 @@ svg { height: 15px; width: 15px; + opacity: 0.3; } } diff --git a/source/renderer/app/config/sidebarConfig.js b/source/renderer/app/config/sidebarConfig.js index d9229bc3f0..7e3f273525 100644 --- a/source/renderer/app/config/sidebarConfig.js +++ b/source/renderer/app/config/sidebarConfig.js @@ -79,3 +79,5 @@ export const sidebarConfig = { CATEGORIES_BY_NAME, CATEGORIES_LIST, }; + +export const FUZZY_SEARCH_THRESHOLD = 0.5; diff --git a/source/renderer/app/containers/MainLayout.js b/source/renderer/app/containers/MainLayout.js index cb2c6b0687..900f2f28a5 100644 --- a/source/renderer/app/containers/MainLayout.js +++ b/source/renderer/app/containers/MainLayout.js @@ -10,6 +10,7 @@ import TransferFundsPage from './wallet/TransferFundsPage'; import AssetSettingsDialogContainer from './assets/AssetSettingsDialogContainer'; import type { InjectedContainerProps } from '../types/injectedPropsType'; import { ROUTES } from '../routes-config'; +import type { WalletSortConfig } from '../types/sidebarTypes'; @inject('stores', 'actions') @observer @@ -58,7 +59,16 @@ export default class MainLayout extends Component { onWalletItemClick: (walletId: string) => { actions.sidebar.walletSelected.trigger({ walletId }); }, + onWalletSortBy: ({ sortBy }: WalletSortConfig) => { + sidebar.onChangeWalletSortType(sortBy); + }, + onSearch: sidebar.onSearchValueUpdated, + }, + walletSortConfig: { + sortBy: sidebar.walletSortConfig.sortBy, + sortOrder: sidebar.walletSortConfig.sortOrder, }, + searchValue: sidebar.searchValue, } : null; diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index c3b92ac857..739f9a99dd 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -3679,18 +3679,121 @@ "description": "Label for the \"Add wallet\" button in wallet sidebar menu.", "end": { "column": 3, - "line": 20 + "line": 29 }, "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", "id": "sidebar.wallets.addWallet", "start": { "column": 16, - "line": 16 + "line": 25 + } + }, + { + "defaultMessage": "!!!Date", + "description": "Label for the \"Date\" sort button", + "end": { + "column": 3, + "line": 34 + }, + "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", + "id": "sidebar.wallets.sortByDateButton", + "start": { + "column": 20, + "line": 30 + } + }, + { + "defaultMessage": "!!!Sort wallets by creation date", + "description": "Tooltip message for Date sort button", + "end": { + "column": 3, + "line": 39 + }, + "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", + "id": "sidebar.wallets.sortByDateTooltip", + "start": { + "column": 21, + "line": 35 + } + }, + { + "defaultMessage": "!!!Balance", + "description": "Label for the \"Balance\" sort button", + "end": { + "column": 3, + "line": 44 + }, + "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", + "id": "sidebar.wallets.sortByBalanceButton", + "start": { + "column": 23, + "line": 40 + } + }, + { + "defaultMessage": "!!!Sort wallets by balance", + "description": "Tooltip message for Balance sort button", + "end": { + "column": 3, + "line": 49 + }, + "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", + "id": "sidebar.wallets.sortByBalanceTooltip", + "start": { + "column": 24, + "line": 45 + } + }, + { + "defaultMessage": "!!!A – Z", + "description": "Label for the \"Name\" sort button", + "end": { + "column": 3, + "line": 54 + }, + "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", + "id": "sidebar.wallets.sortByNameButton", + "start": { + "column": 20, + "line": 50 + } + }, + { + "defaultMessage": "!!!Sort wallets by name", + "description": "Tooltip message for Name sort button", + "end": { + "column": 3, + "line": 59 + }, + "file": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js", + "id": "sidebar.wallets.sortByNameTooltip", + "start": { + "column": 21, + "line": 55 } } ], "path": "source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.json" }, + { + "descriptors": [ + { + "defaultMessage": "!!!Filter", + "description": "Search placeholder for the sidebar wallet menu", + "end": { + "column": 3, + "line": 18 + }, + "file": "source/renderer/app/components/sidebar/wallets/WalletSearch.js", + "id": "sidebar.wallets.search.placeholder", + "start": { + "column": 15, + "line": 14 + } + } + ], + "path": "source/renderer/app/components/sidebar/wallets/WalletSearch.json" + }, { "descriptors": [ { diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index b1a4cba4a9..75e0737124 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -359,6 +359,13 @@ "settings.wallets.currency.titleLabel": "Display ada balances in other currency", "sidebar.category.settings.notification.label": "New discreet mode settings are available in Security tab.", "sidebar.wallets.addWallet": "Add wallet", + "sidebar.wallets.search.placeholder": "Filter", + "sidebar.wallets.sortByBalanceButton": "Balance", + "sidebar.wallets.sortByBalanceTooltip": "Sort by balance", + "sidebar.wallets.sortByDateButton": "Date", + "sidebar.wallets.sortByDateTooltip": "Sort by creation date", + "sidebar.wallets.sortByNameButton": "A – Z", + "sidebar.wallets.sortByNameTooltip": "Sort by name", "staking.countdown.learnMore.linkUrl": "https://iohk.zendesk.com/hc/en-us", "staking.delegationCenter.bodyTitle": "Wallets", "staking.delegationCenter.currentEpochTitle": "Now", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 62dc29689e..651dfe7748 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -359,6 +359,13 @@ "settings.wallets.currency.titleLabel": "ADA残高を別の通貨で表示する", "sidebar.category.settings.notification.label": "設定タブで、新たにディスクリートモードが使用可能になりました。", "sidebar.wallets.addWallet": "ウォレット追加", + "sidebar.wallets.search.placeholder": "フィルター", + "sidebar.wallets.sortByBalanceButton": "残高", + "sidebar.wallets.sortByBalanceTooltip": "残高で並べ替える", + "sidebar.wallets.sortByDateButton": "日付", + "sidebar.wallets.sortByDateTooltip": "作成日で並べ替える", + "sidebar.wallets.sortByNameButton": "A – Z", + "sidebar.wallets.sortByNameTooltip": "ウォレット名で並べ替える", "staking.countdown.learnMore.linkUrl": "https://iohk.zendesk.com/hc/ja", "staking.delegationCenter.bodyTitle": "ウォレット", "staking.delegationCenter.currentEpochTitle": "現在", diff --git a/source/renderer/app/stores/SidebarStore.js b/source/renderer/app/stores/SidebarStore.js index 74dc0116e0..c1cdb9c6dd 100644 --- a/source/renderer/app/stores/SidebarStore.js +++ b/source/renderer/app/stores/SidebarStore.js @@ -1,15 +1,26 @@ // @flow import { action, computed, observable } from 'mobx'; import { get } from 'lodash'; -import Store from './lib/Store'; import { sidebarConfig } from '../config/sidebarConfig'; import type { SidebarCategoryInfo } from '../config/sidebarConfig'; -import type { SidebarWalletType } from '../types/sidebarTypes'; +import type { + SidebarWalletType, + WalletSortConfig, + WalletSortByOptions, +} from '../types/sidebarTypes'; +import { WalletSortBy, WalletSortOrder } from '../types/sidebarTypes'; +import { changeWalletSorting, sortWallets } from '../utils/walletSorting'; +import Store from './lib/Store'; export default class SidebarStore extends Store { @observable CATEGORIES: Array = sidebarConfig.CATEGORIES_LIST; @observable activeSidebarCategory: string = this.CATEGORIES[0].route; @observable isShowingSubMenus: boolean = true; + @observable walletSortConfig: WalletSortConfig = { + sortBy: WalletSortBy.Date, + sortOrder: WalletSortOrder.Asc, + }; + @observable searchValue: string = ''; setup() { const { sidebar: sidebarActions } = this.actions; @@ -37,7 +48,18 @@ export default class SidebarStore extends Store { hardwareWallets, } = this.stores; const { hardwareWalletsConnectionData } = hardwareWallets; - return wallets.all.map((wallet) => { + const shelleyWallets = sortWallets({ + wallets: wallets.all.filter((w) => !w.isLegacy), + sortOrder: this.walletSortConfig.sortOrder, + sortBy: this.walletSortConfig.sortBy, + }); + const byronWallets = sortWallets({ + wallets: wallets.all.filter((w) => w.isLegacy), + sortOrder: this.walletSortConfig.sortOrder, + sortBy: this.walletSortConfig.sortBy, + }); + const sortedWallets = [...shelleyWallets, ...byronWallets]; + return sortedWallets.map((wallet) => { const isHardwareWalletDisconnected = get( hardwareWalletsConnectionData, [wallet.id, 'disconnected'], @@ -62,6 +84,18 @@ export default class SidebarStore extends Store { }); } + @action onChangeWalletSortType = (sortBy: WalletSortByOptions) => { + this.walletSortConfig = changeWalletSorting({ + sortBy, + sortOrder: this.walletSortConfig.sortOrder, + currentSortBy: this.walletSortConfig.sortBy, + }); + }; + + @action onSearchValueUpdated = (searchValue: string) => { + this.searchValue = searchValue; + }; + @action _configureCategories = () => { const { isFlight, diff --git a/source/renderer/app/stores/SidebarStore.spec.js b/source/renderer/app/stores/SidebarStore.spec.js new file mode 100644 index 0000000000..7ed8e6bec6 --- /dev/null +++ b/source/renderer/app/stores/SidebarStore.spec.js @@ -0,0 +1,282 @@ +// @flow +import BigNumber from 'bignumber.js'; + +import type { Api } from '../api/index'; +import type { ActionsMap } from '../actions/index'; +import { WalletSortBy, WalletSortOrder } from '../types/sidebarTypes'; +import type { SidebarWalletType } from '../types/sidebarTypes'; + +import SidebarStore from './SidebarStore'; + +describe('Sidebar Store', () => { + const api: Api = ({ + ada: jest.fn(), + localStorage: jest.fn(), + }: any); + + const actions: ActionsMap = (jest.fn(): any); + + function setupStore({ + wallets, + }: { + wallets: Array<{ + id: string, + name: string, + amount: BigNumber, + isLegacy?: boolean, + }>, + }) { + const sidebarStore = new SidebarStore(api, actions); + sidebarStore.stores = ({ + wallets: { all: wallets }, + hardwareWallets: jest.fn(), + walletSettings: { + getWalletsRecoveryPhraseVerificationData: jest + .fn() + .mockReturnValue({ hasNotification: false }), + }, + networkStatus: { + isConnected: true, + }, + }: any); + + return sidebarStore; + } + + function pickAssertionProps(wallets: SidebarWalletType[]) { + return wallets.map(({ id, amount, title, isLegacy }) => ({ + id, + amount, + title, + isLegacy, + })); + } + + it('should sort wallets initially by DATE from oldest to newest', () => { + const sidebarStore = setupStore({ + wallets: [ + { + id: '1', + name: 'Wallet A', + amount: new BigNumber(1), + isLegacy: false, + }, + { + id: '2', + name: 'Wallet B', + amount: new BigNumber(2), + isLegacy: false, + }, + ], + }); + + expect(pickAssertionProps(sidebarStore.wallets)).toEqual([ + { + id: '1', + title: 'Wallet A', + amount: new BigNumber(1), + isLegacy: false, + }, + { + id: '2', + title: 'Wallet B', + amount: new BigNumber(2), + isLegacy: false, + }, + ]); + }); + + const defaultSortingCases = [ + // Sort wallets by NAME from A-Z as default order + [ + WalletSortBy.Name, + [ + ['1', 'Sigurd', 1600], + ['2', 'Hel', 25], + ['3', 'Loki', 0], + ['4', 'empty', 0], + ['5', 'empty', 0], + ['6', 'Odin', 246, true], + ['7', 'Jormungand', 0, true], + ], + [ + ['4', 'empty', 0], + ['5', 'empty', 0], + ['2', 'Hel', 25], + ['3', 'Loki', 0], + ['1', 'Sigurd', 1600], + ['7', 'Jormungand', 0, true], + ['6', 'Odin', 246, true], + ], + ], + // Sort wallets by BALANCE from from higher to lower as default order + [ + WalletSortBy.Balance, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + ], + ]; + + test.each(defaultSortingCases)( + `should set default sorting for %s`, + (sortBy, wallets, expected) => { + const sidebarStore = setupStore({ + wallets: wallets.map(([id, name, amount, isLegacy = false]) => ({ + id, + name, + amount: new BigNumber(amount), + isLegacy, + })), + }); + + sidebarStore.onChangeWalletSortType(sortBy); + + expect(pickAssertionProps(sidebarStore.wallets)).toEqual( + expected.map(([id, title, amount, isLegacy = false]) => ({ + id, + amount: new BigNumber(amount), + title, + isLegacy, + })) + ); + } + ); + + it('should move Byron wallets at the bottom', () => { + const sidebarStore = setupStore({ + wallets: [ + { + id: '1', + name: 'Byron Wallet A', + amount: new BigNumber(1000), + isLegacy: true, + }, + { + id: '2', + name: 'Byron Wallet B', + amount: new BigNumber(200), + isLegacy: true, + }, + { + id: '3', + name: 'Shelley Wallet A', + amount: new BigNumber(1000), + isLegacy: false, + }, + { + id: '4', + name: 'Shelley Wallet B', + amount: new BigNumber(200), + isLegacy: false, + }, + ], + }); + + sidebarStore.onChangeWalletSortType(WalletSortBy.Balance); + + expect(pickAssertionProps(sidebarStore.wallets)).toEqual([ + { + id: '3', + title: 'Shelley Wallet A', + amount: new BigNumber(1000), + isLegacy: false, + }, + { + id: '4', + title: 'Shelley Wallet B', + amount: new BigNumber(200), + isLegacy: false, + }, + { + id: '1', + title: 'Byron Wallet A', + amount: new BigNumber(1000), + isLegacy: true, + }, + { + id: '2', + title: 'Byron Wallet B', + amount: new BigNumber(200), + isLegacy: true, + }, + ]); + }); + + const reverseSortingOrderCases = [ + // Sort wallets by DATE by reversing from ASC to DESC + [ + WalletSortBy.Date, + WalletSortOrder.Asc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + ], + // Sort wallets by NAME by reversing from A-Z to Z-A + [ + WalletSortBy.Name, + WalletSortOrder.Asc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + ], + // Sort wallets by BALANCE by reversing from higher amount to lower ones + [ + WalletSortBy.Balance, + WalletSortOrder.Desc, + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + ], + ]; + + test.each(reverseSortingOrderCases)( + `should reverse sorting for %s on %s order`, + (sortBy, sortOrder, wallets, expected) => { + const sidebarStore = setupStore({ + wallets: wallets.map(([id, name, amount, isLegacy = false]) => ({ + id, + name, + amount: new BigNumber(amount), + isLegacy, + })), + }); + + sidebarStore.walletSortConfig = { + sortBy, + sortOrder, + }; + + sidebarStore.onChangeWalletSortType(sortBy); + + expect(pickAssertionProps(sidebarStore.wallets)).toEqual( + expected.map(([id, title, amount, isLegacy = false]) => ({ + id, + amount: new BigNumber(amount), + title, + isLegacy, + })) + ); + } + ); +}); diff --git a/source/renderer/app/themes/daedalus/cardano.js b/source/renderer/app/themes/daedalus/cardano.js index be9802dc92..a8cbe5628b 100644 --- a/source/renderer/app/themes/daedalus/cardano.js +++ b/source/renderer/app/themes/daedalus/cardano.js @@ -799,6 +799,8 @@ export const CARDANO_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#2cbb69', '--theme-sidebar-category-networkInfo-text-color': '#fff', + '--theme-sidebar-sort-button-background-color': '250, 251, 252', + '--theme-sidebar-search-field-border-color': '255, 255, 255', }, splash: { '--theme-splash-network-background-color': 'rgba(32, 34, 37, 0.96)', diff --git a/source/renderer/app/themes/daedalus/dark-blue.js b/source/renderer/app/themes/daedalus/dark-blue.js index 633eaebe22..b4954946af 100644 --- a/source/renderer/app/themes/daedalus/dark-blue.js +++ b/source/renderer/app/themes/daedalus/dark-blue.js @@ -802,6 +802,8 @@ export const DARK_BLUE_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#536370', '--theme-sidebar-category-networkInfo-text-color': '#e9f4fe', + '--theme-sidebar-sort-button-background-color': '250, 251, 252', + '--theme-sidebar-search-field-border-color': '233, 244, 254', }, splash: { '--theme-splash-network-background-color': 'rgba(38, 51, 69, 0.96)', diff --git a/source/renderer/app/themes/daedalus/dark-cardano.js b/source/renderer/app/themes/daedalus/dark-cardano.js index f8c5f94973..f59eb76d4a 100644 --- a/source/renderer/app/themes/daedalus/dark-cardano.js +++ b/source/renderer/app/themes/daedalus/dark-cardano.js @@ -786,6 +786,8 @@ export const DARK_CARDANO_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#1fc1c3', '--theme-sidebar-category-networkInfo-text-color': '#121326', + '--theme-sidebar-sort-button-background-color': '250, 251, 252', + '--theme-sidebar-search-field-border-color': '255, 255, 255', }, splash: { '--theme-splash-network-background-color': 'rgba(42, 43, 60, 0.96)', diff --git a/source/renderer/app/themes/daedalus/flight-candidate.js b/source/renderer/app/themes/daedalus/flight-candidate.js index 6cf5780ee2..4f203a2724 100644 --- a/source/renderer/app/themes/daedalus/flight-candidate.js +++ b/source/renderer/app/themes/daedalus/flight-candidate.js @@ -784,6 +784,8 @@ export const FLIGHT_CANDIDATE_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#ffb923', '--theme-sidebar-category-networkInfo-text-color': '#121326', + '--theme-sidebar-sort-button-background-color': '255, 255, 255', + '--theme-sidebar-search-field-border-color': '255, 255, 255', }, splash: { '--theme-splash-network-background-color': 'rgba(42, 43, 60, 0.96)', diff --git a/source/renderer/app/themes/daedalus/incentivized-testnet.js b/source/renderer/app/themes/daedalus/incentivized-testnet.js index f24ea95c33..1f4aa3a74d 100644 --- a/source/renderer/app/themes/daedalus/incentivized-testnet.js +++ b/source/renderer/app/themes/daedalus/incentivized-testnet.js @@ -786,6 +786,8 @@ export const INCENTIVIZED_TESTNET_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#eb2256', '--theme-sidebar-category-networkInfo-text-color': '#121326', + '--theme-sidebar-sort-button-background-color': '255, 255, 255', + '--theme-sidebar-search-field-border-color': '255, 255, 255', }, splash: { '--theme-splash-network-background-color': '#121326', diff --git a/source/renderer/app/themes/daedalus/light-blue.js b/source/renderer/app/themes/daedalus/light-blue.js index e1d06eacbb..52d0222fc7 100644 --- a/source/renderer/app/themes/daedalus/light-blue.js +++ b/source/renderer/app/themes/daedalus/light-blue.js @@ -795,6 +795,8 @@ export const LIGHT_BLUE_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#fafbfc', '--theme-sidebar-category-networkInfo-text-color': '#5e6066', + '--theme-sidebar-sort-button-background-color': '250, 251, 252', + '--theme-sidebar-search-field-border-color': '250, 251, 252', }, splash: { '--theme-splash-network-background-color': 'rgba(36, 62, 98, 0.96)', diff --git a/source/renderer/app/themes/daedalus/shelley-testnet.js b/source/renderer/app/themes/daedalus/shelley-testnet.js index 8384d830cc..022e4cdf5d 100644 --- a/source/renderer/app/themes/daedalus/shelley-testnet.js +++ b/source/renderer/app/themes/daedalus/shelley-testnet.js @@ -785,6 +785,8 @@ export const SHELLEY_TESTNET_THEME_OUTPUT = { 'rgba(255, 255, 255, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#898ee6', '--theme-sidebar-category-networkInfo-text-color': '#121326', + '--theme-sidebar-sort-button-background-color': '255, 255, 255', + '--theme-sidebar-search-field-border-color': '255, 255, 255', }, splash: { '--theme-splash-network-background-color': 'rgba(42, 43, 60, 0.96)', diff --git a/source/renderer/app/themes/daedalus/white.js b/source/renderer/app/themes/daedalus/white.js index 0417903056..bb74425e74 100644 --- a/source/renderer/app/themes/daedalus/white.js +++ b/source/renderer/app/themes/daedalus/white.js @@ -789,6 +789,8 @@ export const WHITE_THEME_OUTPUT = { 'rgba(45, 45, 45, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#29b595', '--theme-sidebar-category-networkInfo-text-color': '#fff', + '--theme-sidebar-sort-button-background-color': '45, 45, 45', + '--theme-sidebar-search-field-border-color': '45, 45, 45', }, splash: { '--theme-splash-network-background-color': 'rgba(255, 255, 255, 0.96)', diff --git a/source/renderer/app/themes/daedalus/yellow.js b/source/renderer/app/themes/daedalus/yellow.js index 865fedd077..06b85c59f5 100644 --- a/source/renderer/app/themes/daedalus/yellow.js +++ b/source/renderer/app/themes/daedalus/yellow.js @@ -786,6 +786,8 @@ export const YELLOW_THEME_OUTPUT = { 'rgba(45, 45, 45, 0.5)', '--theme-sidebar-category-networkInfo-background-color': '#2d2d2d', '--theme-sidebar-category-networkInfo-text-color': '#fff', + '--theme-sidebar-sort-button-background-color': '45, 45, 45', + '--theme-sidebar-search-field-border-color': '45, 45, 45', }, splash: { '--theme-splash-network-background-color': 'rgba(255, 185, 35, 0.96)', diff --git a/source/renderer/app/types/sidebarTypes.js b/source/renderer/app/types/sidebarTypes.js index 62946f2db3..01010b31b8 100644 --- a/source/renderer/app/types/sidebarTypes.js +++ b/source/renderer/app/types/sidebarTypes.js @@ -12,3 +12,27 @@ export type SidebarWalletType = { isNotResponding: boolean, hasNotification: boolean, }; + +export type WalletSortByOptions = 'DATE' | 'BALANCE' | 'NAME' | 'NONE'; + +export type WalletSortOrderOptions = 'asc' | 'desc'; + +export const WalletSortBy: EnumMap = { + Date: 'DATE', + Balance: 'BALANCE', + Name: 'NAME', + None: 'NONE', +}; + +export const WalletSortOrder: EnumMap< + string, + WalletSortOrderOptions +> = Object.freeze({ + Desc: 'desc', + Asc: 'asc', +}); + +export type WalletSortConfig = { + sortBy: WalletSortByOptions, + sortOrder: WalletSortOrderOptions, +}; diff --git a/source/renderer/app/utils/walletSorting.js b/source/renderer/app/utils/walletSorting.js new file mode 100644 index 0000000000..6b591aa64b --- /dev/null +++ b/source/renderer/app/utils/walletSorting.js @@ -0,0 +1,90 @@ +// @flow + +import { orderBy } from 'lodash'; +import { WalletSortBy, WalletSortOrder } from '../types/sidebarTypes'; +import type { + WalletSortConfig, + WalletSortByOptions, +} from '../types/sidebarTypes'; +import type Wallet from '../domains/Wallet'; + +type IndexedWallet = { + wallet: Wallet, + index: number, + amount: number, + name: string, +}; + +type SortWalletsProps = { + wallets: Wallet[], +} & WalletSortConfig; + +export function sortWallets({ + wallets, + sortBy, + sortOrder, +}: SortWalletsProps): Wallet[] { + const indexedWallets: IndexedWallet[] = wallets.map( + (w: Wallet, index: number) => ({ + wallet: w, + index, + amount: w.amount.toNumber(), + name: w.name.toLowerCase(), + }) + ); + + const doOrderBy = (fn: string[]) => { + return orderBy( + indexedWallets, + fn, + fn.map(() => sortOrder) + ).map(({ wallet }) => wallet); + }; + + switch (sortBy) { + case WalletSortBy.Date: + return doOrderBy(['index']); + case WalletSortBy.Balance: + return doOrderBy(['amount', 'name', 'index']); + case WalletSortBy.Name: + return doOrderBy(['name', 'amount', 'index']); + case WalletSortBy.None: + default: + return wallets; + } +} + +const defaultSortOrderByType = { + [WalletSortBy.Name]: WalletSortOrder.Asc, + [WalletSortBy.Date]: WalletSortOrder.Asc, + [WalletSortBy.Balance]: WalletSortOrder.Desc, +}; + +type ChangeWalletSortingProps = { + currentSortBy: WalletSortByOptions, +} & WalletSortConfig; + +export function changeWalletSorting({ + currentSortBy, + sortBy, + sortOrder, +}: ChangeWalletSortingProps) { + if (sortBy === currentSortBy) { + return reverseWalletSortOrder({ sortBy, sortOrder }); + } + + return { + sortBy, + sortOrder: defaultSortOrderByType[sortBy], + }; +} + +function reverseWalletSortOrder({ sortBy, sortOrder }: WalletSortConfig) { + return { + sortBy, + sortOrder: + sortOrder === WalletSortOrder.Asc + ? WalletSortOrder.Desc + : WalletSortOrder.Asc, + }; +} diff --git a/source/renderer/app/utils/walletSorting.spec.js b/source/renderer/app/utils/walletSorting.spec.js new file mode 100644 index 0000000000..72fbea382b --- /dev/null +++ b/source/renderer/app/utils/walletSorting.spec.js @@ -0,0 +1,151 @@ +// @flow +import BigNumber from 'bignumber.js'; + +import { WalletSortBy, WalletSortOrder } from '../types/sidebarTypes'; + +import { sortWallets } from './walletSorting'; + +describe('Wallet Sorting', () => { + const cases = [ + // Sort wallets by DATE from ASC to DESC + [ + WalletSortBy.Date, + WalletSortOrder.Desc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + ], + // // Sort wallets by DATE from ASC to DESC + [ + WalletSortBy.Date, + WalletSortOrder.Asc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + ], + // Sort wallets by NAME from A-Z to Z-A + [ + WalletSortBy.Name, + WalletSortOrder.Desc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + ], + // Sort wallets by NAME from Z-A to A-Z + [ + WalletSortBy.Name, + WalletSortOrder.Asc, + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + ], + // Sort wallets by BALANCE from higher to lower + [ + WalletSortBy.Balance, + WalletSortOrder.Desc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + ], + // Sort wallets by BALANCE from lower to higher + [ + WalletSortBy.Balance, + WalletSortOrder.Asc, + [ + ['2', 'Wallet B', 2], + ['1', 'Wallet A', 1], + ], + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 2], + ], + ], + // Sort wallet with same NAME + [ + WalletSortBy.Name, + WalletSortOrder.Asc, + [ + ['2', 'Wallet A', 2], + ['1', 'Wallet A', 1], + ], + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet A', 2], + ], + ], + // Sort wallet with same BALANCE + [ + WalletSortBy.Balance, + WalletSortOrder.Asc, + [ + ['2', 'Wallet B', 1], + ['1', 'Wallet A', 1], + ], + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet B', 1], + ], + ], + // Sort wallets with same NAME & BALANCE + [ + WalletSortBy.Balance, + WalletSortOrder.Desc, + [ + ['1', 'Wallet A', 1], + ['2', 'Wallet A', 1], + ], + [ + ['2', 'Wallet A', 1], + ['1', 'Wallet A', 1], + ], + ], + ]; + + test.each(cases)( + `should sort wallets from test case %# by %s on %s order`, + (sortBy, sortOrder, wallets, expected) => { + const sortedWallets = sortWallets({ + wallets: wallets.map(([id, name, amount]) => ({ + id, + name, + amount: new BigNumber(amount), + })), + sortBy, + sortOrder, + }); + + expect(sortedWallets).toEqual( + expected.map(([id, name, amount]) => ({ + id, + name, + amount: new BigNumber(amount), + })) + ); + } + ); +}); diff --git a/storybook/stories/_support/StoryLayout.js b/storybook/stories/_support/StoryLayout.js index 5bd9e1b66e..e6e13f19f4 100644 --- a/storybook/stories/_support/StoryLayout.js +++ b/storybook/stories/_support/StoryLayout.js @@ -27,6 +27,10 @@ import Wallet, { import NewsFeedIcon from '../../../source/renderer/app/components/widgets/NewsFeedIcon'; import type { SidebarMenus } from '../../../source/renderer/app/components/sidebar/types'; import type { SidebarWalletType } from '../../../source/renderer/app/types/sidebarTypes'; +import { + WalletSortBy, + WalletSortOrder, +} from '../../../source/renderer/app/types/sidebarTypes'; // Empty screen elements import TopBar from '../../../source/renderer/app/components/layout/TopBar'; @@ -161,6 +165,13 @@ export default class StoryLayout extends Component { actions: { onAddWallet: action('toggleAddWallet'), onWalletItemClick: setActiveWalletId, + onWalletSortBy: action('sortWallet'), + onSearch: action('searchWallet'), + }, + searchValue: '', + walletSortConfig: { + sortOrder: WalletSortOrder.Asc, + sortBy: WalletSortBy.Date, }, }, }); diff --git a/storybook/stories/navigation/SidebarWalletsMenu.stories.js b/storybook/stories/navigation/SidebarWalletsMenu.stories.js index d8bce526ba..f29e3e3d68 100644 --- a/storybook/stories/navigation/SidebarWalletsMenu.stories.js +++ b/storybook/stories/navigation/SidebarWalletsMenu.stories.js @@ -2,20 +2,82 @@ import React from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; +import { withKnobs } from '@storybook/addon-knobs'; import StoryDecorator from '../_support/StoryDecorator'; +import StoryProvider from '../_support/StoryProvider'; import { isShelleyTestnetTheme } from '../_support/utils'; -import WalletsWrapper from '../wallets/_utils/WalletsWrapper'; +import { + WalletSortBy, + WalletSortOrder, +} from '../../../source/renderer/app/types/sidebarTypes'; import SidebarWalletsMenu from '../../../source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu'; +const wallets = [ + { + id: '1', + title: 'Main wallet', + amount: 0, + isConnected: false, + isRestoreActive: false, + restoreProgress: 0, + isNotResponding: false, + isLegacy: false, + createdAt: new Date(), + recoveryPhraseVerificationDate: new Date(), + hasNotification: false, + }, + { + id: '2', + title: 'House rent', + amount: 274912874.35, + isConnected: false, + isRestoreActive: false, + restoreProgress: 0, + isNotResponding: false, + isLegacy: false, + createdAt: new Date(), + recoveryPhraseVerificationDate: new Date(), + hasNotification: false, + }, + { + id: '3', + title: 'Mining', + amount: 0.0004924712, + isConnected: false, + isRestoreActive: false, + restoreProgress: 0, + isNotResponding: false, + isLegacy: false, + createdAt: new Date(), + recoveryPhraseVerificationDate: new Date(), + hasNotification: false, + }, + { + id: '4', + title: 'Shopping wallet', + amount: 0, + isConnected: false, + isRestoreActive: false, + restoreProgress: 0, + isNotResponding: false, + isLegacy: false, + createdAt: new Date(), + recoveryPhraseVerificationDate: new Date(), + hasNotification: false, + }, +]; + storiesOf('Navigation|Wallets Menu', module) + .addDecorator(withKnobs) .addDecorator((story) => ( -
{story()}
+ +
{story()}
+
)) - .addDecorator(WalletsWrapper) - // ====== Stories ====== + // // ====== Stories ====== .add('Empty', (props: { currentTheme: string }) => ( false} isAddWalletButtonActive={false} isShelleyActivated={isShelleyTestnetTheme(props.currentTheme)} - visible + visible={false} + sortBy={WalletSortBy.Date} + sortOrder={WalletSortOrder.Desc} /> )) .add('With Wallets', (props: { currentTheme: string }) => ( - id === '2'} - onWalletItemClick={action('walletItemClick')} - onAddWallet={action('addWallet')} - isAddWalletButtonActive={false} - isShelleyActivated={isShelleyTestnetTheme(props.currentTheme)} - visible - /> +
+
+ id === '2'} + onWalletItemClick={action('walletItemClick')} + onAddWallet={action('addWallet')} + isAddWalletButtonActive={false} + isShelleyActivated={isShelleyTestnetTheme(props.currentTheme)} + visible + sortBy={'DATE'} + sortOrder={WalletSortOrder.Asc} + /> +
+
+ id === '2'} + onWalletItemClick={action('walletItemClick')} + onAddWallet={action('addWallet')} + isAddWalletButtonActive={false} + isShelleyActivated={isShelleyTestnetTheme(props.currentTheme)} + visible + sortBy={'DATE'} + sortOrder={WalletSortOrder.Asc} + searchValue="in" + /> +
+
)); diff --git a/yarn.lock b/yarn.lock index 8e64663083..b82fb6c08e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8726,6 +8726,10 @@ functions-have-names@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" +fuse.js@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.5.3.tgz#7446c0acbc4ab0ab36fa602e97499bdb69452b93" + fuse.js@^3.4.6: version "3.6.1" resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" @@ -9461,6 +9465,10 @@ he@1.2.x, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" +highlight-words@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/highlight-words/-/highlight-words-1.2.0.tgz#af52bc7fb767d0306012948f0bdd8b4185d73de6" + highlight.js@^10.1.1, highlight.js@~10.2.0: version "10.2.1" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.2.1.tgz#09784fe2e95612abbefd510948945d4fe6fa9668" From 14088b8fb84377b609cf2eafa5cb69d64ed4c2f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Mas=C5=82owski?= Date: Fri, 21 Jan 2022 16:54:19 +0100 Subject: [PATCH 008/204] [DDW-737] Unify CPU info in diagnostics dialog (#2818) Co-authored-by: Daniel Main --- CHANGELOG.md | 1 + source/common/types/environment.types.js | 12 +- .../components/status/DaedalusDiagnostics.js | 9 +- .../status/DaedalusDiagnosticsDialog.js | 3 +- .../app/i18n/locales/defaultMessages.json | 248 +++++++++--------- source/renderer/app/stores/ProfileStore.js | 3 +- source/renderer/app/utils/formatCpuInfo.js | 42 +++ .../renderer/app/utils/formatCpuInfo.spec.js | 80 ++++++ source/renderer/app/utils/formatters.js | 18 -- 9 files changed, 264 insertions(+), 152 deletions(-) create mode 100644 source/renderer/app/utils/formatCpuInfo.js create mode 100644 source/renderer/app/utils/formatCpuInfo.spec.js diff --git a/CHANGELOG.md b/CHANGELOG.md index b7fc6ff9d2..84dcb26d30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Features +- Unified CPU info in diagnostics dialog ([PR 2818](https://github.com/input-output-hk/daedalus/pull/2818)) - Implemented wallet sorting on sidebar menu ([PR 2775](https://github.com/input-output-hk/daedalus/pull/2775)) - Implemented new token picker ([PR 2787](https://github.com/input-output-hk/daedalus/pull/2787)) diff --git a/source/common/types/environment.types.js b/source/common/types/environment.types.js index 218b9b2782..90a5097812 100644 --- a/source/common/types/environment.types.js +++ b/source/common/types/environment.types.js @@ -23,7 +23,7 @@ export type Environment = { mainProcessID: string, rendererProcessID: string, os: string, - cpu: string, + cpu: Cpu, ram: number, installerVersion: string, version: string, @@ -78,3 +78,13 @@ export const networkPrettyNames = { selfnode: 'Selfnode', development: 'Development', }; + +export type CpuThreadData = { + model: string, + speed: number, + times: { + [string]: number, + }, +}; + +export type Cpu = Array; diff --git a/source/renderer/app/components/status/DaedalusDiagnostics.js b/source/renderer/app/components/status/DaedalusDiagnostics.js index c75ee96cfc..3035c79ee8 100644 --- a/source/renderer/app/components/status/DaedalusDiagnostics.js +++ b/source/renderer/app/components/status/DaedalusDiagnostics.js @@ -17,11 +17,7 @@ import closeCrossThin from '../../assets/images/close-cross-thin.inline.svg'; import iconCopy from '../../assets/images/clipboard-ic.inline.svg'; import sandClockIcon from '../../assets/images/sand-clock-xs.inline.svg'; import LocalizableError from '../../i18n/LocalizableError'; -import { - formattedNumber, - formattedCpuModel, - formattedSize, -} from '../../utils/formatters'; +import { formattedNumber, formattedSize } from '../../utils/formatters'; import { CardanoNodeStates } from '../../../../common/types/cardano-node.types'; import styles from './DaedalusDiagnostics.scss'; import type { CardanoNodeState } from '../../../../common/types/cardano-node.types'; @@ -483,12 +479,11 @@ export default class DaedalusDiagnostics extends Component { const { platform, platformVersion, - cpu: cpuInOriginalFormat, + cpu, ram, availableDiskSpace: availableDiskSpaceInOriginalFormat, } = systemInfo; - const cpu = formattedCpuModel(cpuInOriginalFormat); const availableDiskSpace = formattedSize( availableDiskSpaceInOriginalFormat ); diff --git a/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.js b/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.js index 034c40c13c..573cf202a0 100644 --- a/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.js +++ b/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.js @@ -6,6 +6,7 @@ import DaedalusDiagnostics from '../../components/status/DaedalusDiagnostics'; import styles from './DaedalusDiagnosticsDialog.scss'; import { formattedBytesToSize } from '../../utils/formatters'; import type { InjectedDialogContainerProps } from '../../types/injectedPropsType'; +import formatCpuInfo from '../../utils/formatCpuInfo'; type Props = InjectedDialogContainerProps; @@ -62,7 +63,7 @@ export default class DaedalusDiagnosticsDialog extends Component { const systemInfo = { platform: environment.os, platformVersion: environment.platformVersion, - cpu: Array.isArray(environment.cpu) ? environment.cpu[0].model : '', + cpu: formatCpuInfo(environment.cpu), ram: formattedBytesToSize(environment.ram), availableDiskSpace: diskSpaceAvailable, }; diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index 739f9a99dd..2c4fde6397 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -7223,13 +7223,13 @@ "description": "System info", "end": { "column": 3, - "line": 37 + "line": 33 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.system.info", "start": { "column": 14, - "line": 33 + "line": 29 } }, { @@ -7237,13 +7237,13 @@ "description": "Platform", "end": { "column": 3, - "line": 42 + "line": 38 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.platform", "start": { "column": 12, - "line": 38 + "line": 34 } }, { @@ -7251,13 +7251,13 @@ "description": "Platform version", "end": { "column": 3, - "line": 47 + "line": 43 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.platform.version", "start": { "column": 19, - "line": 43 + "line": 39 } }, { @@ -7265,13 +7265,13 @@ "description": "CPU", "end": { "column": 3, - "line": 52 + "line": 48 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cpu", "start": { "column": 7, - "line": 48 + "line": 44 } }, { @@ -7279,13 +7279,13 @@ "description": "RAM", "end": { "column": 3, - "line": 57 + "line": 53 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.ram", "start": { "column": 7, - "line": 53 + "line": 49 } }, { @@ -7293,13 +7293,13 @@ "description": "Available disk space", "end": { "column": 3, - "line": 62 + "line": 58 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.availableDiskSpace", "start": { "column": 22, - "line": 58 + "line": 54 } }, { @@ -7307,13 +7307,13 @@ "description": "Unknown amount of disk space", "end": { "column": 3, - "line": 67 + "line": 63 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.unknownDiskSpace", "start": { "column": 20, - "line": 63 + "line": 59 } }, { @@ -7321,13 +7321,13 @@ "description": "\"Support\" link URL while disk space is unknown", "end": { "column": 3, - "line": 72 + "line": 68 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.unknownDiskSpaceSupportUrl", "start": { "column": 30, - "line": 68 + "line": 64 } }, { @@ -7335,13 +7335,13 @@ "description": "CORE INFO", "end": { "column": 3, - "line": 77 + "line": 73 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.coreInfo", "start": { "column": 12, - "line": 73 + "line": 69 } }, { @@ -7349,13 +7349,13 @@ "description": "Daedalus version", "end": { "column": 3, - "line": 82 + "line": 78 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.daedalusVersion", "start": { "column": 19, - "line": 78 + "line": 74 } }, { @@ -7363,13 +7363,13 @@ "description": "Daedalus build number", "end": { "column": 3, - "line": 87 + "line": 83 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.daedalusBuildNumber", "start": { "column": 23, - "line": 83 + "line": 79 } }, { @@ -7377,13 +7377,13 @@ "description": "Daedalus main process ID", "end": { "column": 3, - "line": 92 + "line": 88 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.daedalusMainProcessID", "start": { "column": 25, - "line": 88 + "line": 84 } }, { @@ -7391,13 +7391,13 @@ "description": "Daedalus renderer process ID", "end": { "column": 3, - "line": 97 + "line": 93 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.daedalusProcessID", "start": { "column": 21, - "line": 93 + "line": 89 } }, { @@ -7405,13 +7405,13 @@ "description": "Daedalus 'Blank Screen Fix' active", "end": { "column": 3, - "line": 102 + "line": 98 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.blankScreenFix", "start": { "column": 18, - "line": 98 + "line": 94 } }, { @@ -7419,13 +7419,13 @@ "description": "Cardano node version", "end": { "column": 3, - "line": 107 + "line": 103 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeVersion", "start": { "column": 22, - "line": 103 + "line": 99 } }, { @@ -7433,13 +7433,13 @@ "description": "Cardano node process ID", "end": { "column": 3, - "line": 112 + "line": 108 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodePID", "start": { "column": 18, - "line": 108 + "line": 104 } }, { @@ -7447,13 +7447,13 @@ "description": "Cardano node port", "end": { "column": 3, - "line": 117 + "line": 113 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeApiPort", "start": { "column": 22, - "line": 113 + "line": 109 } }, { @@ -7461,13 +7461,13 @@ "description": "Cardano wallet process ID", "end": { "column": 3, - "line": 122 + "line": 118 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoWalletPID", "start": { "column": 20, - "line": 118 + "line": 114 } }, { @@ -7475,13 +7475,13 @@ "description": "Cardano wallet version", "end": { "column": 3, - "line": 127 + "line": 123 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoWalletVersion", "start": { "column": 24, - "line": 123 + "line": 119 } }, { @@ -7489,13 +7489,13 @@ "description": "Cardano wallet port", "end": { "column": 3, - "line": 132 + "line": 128 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoWalletApiPort", "start": { "column": 24, - "line": 128 + "line": 124 } }, { @@ -7503,13 +7503,13 @@ "description": "Cardano network", "end": { "column": 3, - "line": 137 + "line": 133 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNetwork", "start": { "column": 18, - "line": 133 + "line": 129 } }, { @@ -7517,13 +7517,13 @@ "description": "Daedalus state directory", "end": { "column": 3, - "line": 142 + "line": 138 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.stateDirectory", "start": { "column": 22, - "line": 138 + "line": 134 } }, { @@ -7531,13 +7531,13 @@ "description": "Open", "end": { "column": 3, - "line": 147 + "line": 143 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.stateDirectoryPathOpenBtn", "start": { "column": 29, - "line": 143 + "line": 139 } }, { @@ -7545,13 +7545,13 @@ "description": "CONNECTION ERROR", "end": { "column": 3, - "line": 152 + "line": 148 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.connectionError", "start": { "column": 19, - "line": 148 + "line": 144 } }, { @@ -7559,13 +7559,13 @@ "description": "DAEDALUS STATUS", "end": { "column": 3, - "line": 157 + "line": 153 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.daedalusStatus", "start": { "column": 18, - "line": 153 + "line": 149 } }, { @@ -7573,13 +7573,13 @@ "description": "Connected", "end": { "column": 3, - "line": 162 + "line": 158 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.connected", "start": { "column": 13, - "line": 158 + "line": 154 } }, { @@ -7587,13 +7587,13 @@ "description": "Synced", "end": { "column": 3, - "line": 167 + "line": 163 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.synced", "start": { "column": 10, - "line": 163 + "line": 159 } }, { @@ -7601,13 +7601,13 @@ "description": "Sync percentage", "end": { "column": 3, - "line": 172 + "line": 168 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.syncPercentage", "start": { "column": 18, - "line": 168 + "line": 164 } }, { @@ -7615,13 +7615,13 @@ "description": "Local time difference", "end": { "column": 3, - "line": 177 + "line": 173 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.localTimeDifference", "start": { "column": 23, - "line": 173 + "line": 169 } }, { @@ -7629,13 +7629,13 @@ "description": "System time correct", "end": { "column": 3, - "line": 182 + "line": 178 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.systemTimeCorrect", "start": { "column": 21, - "line": 178 + "line": 174 } }, { @@ -7643,13 +7643,13 @@ "description": "System time ignored", "end": { "column": 3, - "line": 187 + "line": 183 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.systemTimeIgnored", "start": { "column": 21, - "line": 183 + "line": 179 } }, { @@ -7657,13 +7657,13 @@ "description": "Checking system time", "end": { "column": 3, - "line": 192 + "line": 188 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.checkingNodeTime", "start": { "column": 20, - "line": 188 + "line": 184 } }, { @@ -7671,13 +7671,13 @@ "description": "CARDANO NODE STATUS", "end": { "column": 3, - "line": 197 + "line": 193 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeStatus", "start": { "column": 21, - "line": 193 + "line": 189 } }, { @@ -7685,13 +7685,13 @@ "description": "Restarting Cardano node...", "end": { "column": 3, - "line": 202 + "line": 198 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeStatusRestarting", "start": { "column": 31, - "line": 198 + "line": 194 } }, { @@ -7699,13 +7699,13 @@ "description": "Restart Cardano node", "end": { "column": 3, - "line": 207 + "line": 203 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeStatusRestart", "start": { "column": 28, - "line": 203 + "line": 199 } }, { @@ -7713,13 +7713,13 @@ "description": "Cardano node state", "end": { "column": 3, - "line": 212 + "line": 208 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeState", "start": { "column": 20, - "line": 208 + "line": 204 } }, { @@ -7727,13 +7727,13 @@ "description": "Updated", "end": { "column": 3, - "line": 217 + "line": 213 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeHasBeenUpdated", "start": { "column": 22, - "line": 213 + "line": 209 } }, { @@ -7741,13 +7741,13 @@ "description": "Crashed", "end": { "column": 3, - "line": 222 + "line": 218 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeHasCrashed", "start": { "column": 18, - "line": 218 + "line": 214 } }, { @@ -7755,13 +7755,13 @@ "description": "Errored", "end": { "column": 3, - "line": 227 + "line": 223 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeHasErrored", "start": { "column": 18, - "line": 223 + "line": 219 } }, { @@ -7769,13 +7769,13 @@ "description": "Stopped", "end": { "column": 3, - "line": 232 + "line": 228 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeHasStopped", "start": { "column": 18, - "line": 228 + "line": 224 } }, { @@ -7783,13 +7783,13 @@ "description": "Exiting", "end": { "column": 3, - "line": 237 + "line": 233 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeIsExiting", "start": { "column": 17, - "line": 233 + "line": 229 } }, { @@ -7797,13 +7797,13 @@ "description": "Running", "end": { "column": 3, - "line": 242 + "line": 238 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeIsRunning", "start": { "column": 17, - "line": 238 + "line": 234 } }, { @@ -7811,13 +7811,13 @@ "description": "Starting", "end": { "column": 3, - "line": 247 + "line": 243 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeIsStarting", "start": { "column": 18, - "line": 243 + "line": 239 } }, { @@ -7825,13 +7825,13 @@ "description": "Stopping", "end": { "column": 3, - "line": 252 + "line": 248 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeIsStopping", "start": { "column": 18, - "line": 248 + "line": 244 } }, { @@ -7839,13 +7839,13 @@ "description": "Unrecoverable", "end": { "column": 3, - "line": 257 + "line": 253 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeIsUnrecoverable", "start": { "column": 23, - "line": 253 + "line": 249 } }, { @@ -7853,13 +7853,13 @@ "description": "Updating", "end": { "column": 3, - "line": 262 + "line": 258 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.nodeIsUpdating", "start": { "column": 18, - "line": 258 + "line": 254 } }, { @@ -7867,13 +7867,13 @@ "description": "Cardano node responding", "end": { "column": 3, - "line": 267 + "line": 263 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeResponding", "start": { "column": 25, - "line": 263 + "line": 259 } }, { @@ -7881,13 +7881,13 @@ "description": "Cardano node subscribed", "end": { "column": 3, - "line": 272 + "line": 268 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeSubscribed", "start": { "column": 25, - "line": 268 + "line": 264 } }, { @@ -7895,13 +7895,13 @@ "description": "Cardano node time correct", "end": { "column": 3, - "line": 277 + "line": 273 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeTimeCorrect", "start": { "column": 26, - "line": 273 + "line": 269 } }, { @@ -7909,13 +7909,13 @@ "description": "Cardano node syncing", "end": { "column": 3, - "line": 282 + "line": 278 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeSyncing", "start": { "column": 22, - "line": 278 + "line": 274 } }, { @@ -7923,13 +7923,13 @@ "description": "Cardano node in sync", "end": { "column": 3, - "line": 287 + "line": 283 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.cardanoNodeInSync", "start": { "column": 21, - "line": 283 + "line": 279 } }, { @@ -7937,13 +7937,13 @@ "description": "Checking...", "end": { "column": 3, - "line": 292 + "line": 288 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.localTimeDifferenceChecking", "start": { "column": 31, - "line": 288 + "line": 284 } }, { @@ -7951,13 +7951,13 @@ "description": "Check time", "end": { "column": 3, - "line": 297 + "line": 293 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.localTimeDifferenceCheckTime", "start": { "column": 32, - "line": 293 + "line": 289 } }, { @@ -7965,13 +7965,13 @@ "description": "YES", "end": { "column": 3, - "line": 302 + "line": 298 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.statusOn", "start": { "column": 12, - "line": 298 + "line": 294 } }, { @@ -7979,13 +7979,13 @@ "description": "NO", "end": { "column": 3, - "line": 307 + "line": 303 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.statusOff", "start": { "column": 13, - "line": 303 + "line": 299 } }, { @@ -7993,13 +7993,13 @@ "description": "NTP service unreachable", "end": { "column": 3, - "line": 312 + "line": 308 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.serviceUnreachable", "start": { "column": 22, - "line": 308 + "line": 304 } }, { @@ -8007,13 +8007,13 @@ "description": "message", "end": { "column": 3, - "line": 317 + "line": 313 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.message", "start": { "column": 11, - "line": 313 + "line": 309 } }, { @@ -8021,13 +8021,13 @@ "description": "code", "end": { "column": 3, - "line": 322 + "line": 318 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.code", "start": { "column": 8, - "line": 318 + "line": 314 } }, { @@ -8035,13 +8035,13 @@ "description": "Last network block", "end": { "column": 3, - "line": 327 + "line": 323 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.lastNetworkBlock", "start": { "column": 20, - "line": 323 + "line": 319 } }, { @@ -8049,13 +8049,13 @@ "description": "Last synchronized block", "end": { "column": 3, - "line": 332 + "line": 328 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.lastSynchronizedBlock", "start": { "column": 25, - "line": 328 + "line": 324 } }, { @@ -8063,13 +8063,13 @@ "description": "epoch", "end": { "column": 3, - "line": 337 + "line": 333 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.epoch", "start": { "column": 9, - "line": 333 + "line": 329 } }, { @@ -8077,13 +8077,13 @@ "description": "slot", "end": { "column": 3, - "line": 342 + "line": 338 }, "file": "source/renderer/app/components/status/DaedalusDiagnostics.js", "id": "daedalus.diagnostics.dialog.slot", "start": { "column": 8, - "line": 338 + "line": 334 } } ], diff --git a/source/renderer/app/stores/ProfileStore.js b/source/renderer/app/stores/ProfileStore.js index 78a59a7368..f6eed44b18 100644 --- a/source/renderer/app/stores/ProfileStore.js +++ b/source/renderer/app/stores/ProfileStore.js @@ -43,6 +43,7 @@ import { TIME_OPTIONS, PROFILE_SETTINGS, } from '../config/profileConfig'; +import formatCpuInfo from '../utils/formatCpuInfo'; export default class ProfileStore extends Store { @observable systemLocale: Locale = LOCALES.english; @@ -518,7 +519,7 @@ export default class ProfileStore extends Store { const systemInfo = { platform: os, platformVersion, - cpu: Array.isArray(cpu) ? cpu[0].model : '', + cpu: formatCpuInfo(cpu), ram: formattedBytesToSize(ram), availableDiskSpace: diskSpaceAvailable, }; diff --git a/source/renderer/app/utils/formatCpuInfo.js b/source/renderer/app/utils/formatCpuInfo.js new file mode 100644 index 0000000000..fadc1cfedc --- /dev/null +++ b/source/renderer/app/utils/formatCpuInfo.js @@ -0,0 +1,42 @@ +// @flow +import type { + Cpu, + CpuThreadData, +} from '../../../common/types/environment.types'; +import { formattedNumber } from './formatters'; + +type FormatArgs = { + modelName: string, + speedValue: string, +}; + +const format = ({ modelName, speedValue }: FormatArgs) => + `${modelName} @ ${speedValue}GHz`; + +const formatCpuInfo = (cpu: Cpu): string => { + const { model, speed } = cpu?.[0] || ({}: CpuThreadData); + if (!model) return ''; + + const [modelName, modelSpeedSection] = model + .split('@') + .map((stringPart) => stringPart.trim().replace(/\s+/g, ' ')); + + if (speed) { + const speedValue = formattedNumber(speed / 1000, 2); + return format({ modelName, speedValue }); + } + + const modelSpeedSectionExpressedInGHz = !!modelSpeedSection?.match(/GHz/); + if (!modelSpeedSection && !modelSpeedSectionExpressedInGHz) { + return modelName; + } + + const rawSpeedValue = modelSpeedSection.match(/([\d,.]+)\s*GHz/)?.[1]; + const parsedSpeedValue = parseFloat(rawSpeedValue); + if (!parsedSpeedValue) return modelName; + + const speedValue = formattedNumber(parsedSpeedValue, 2); + return format({ modelName, speedValue }); +}; + +export default formatCpuInfo; diff --git a/source/renderer/app/utils/formatCpuInfo.spec.js b/source/renderer/app/utils/formatCpuInfo.spec.js new file mode 100644 index 0000000000..375f5d32d0 --- /dev/null +++ b/source/renderer/app/utils/formatCpuInfo.spec.js @@ -0,0 +1,80 @@ +import formatCpuInfo from './formatCpuInfo'; + +describe('Formatters/formatCpuInfo', () => { + it('gives correct model name and clock speed for Intel format', () => { + expect( + formatCpuInfo([ + { + model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz', + speed: 2600, + }, + ]) + ).toEqual('Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz'); + }); + + it('gives correct model name and clock speed for AMD format', () => { + expect( + formatCpuInfo([ + { + model: 'AMD Ryzen 7 3700U with Radeon Vega Mobile Gfx', + speed: 2400, + }, + ]) + ).toEqual('AMD Ryzen 7 3700U with Radeon Vega Mobile Gfx @ 2.40GHz'); + }); + + it('removes all unnecessary whitespace characters', () => { + expect( + formatCpuInfo([ + { + model: ' Super Fast NextGen\tProcessor ', + speed: 1000, + }, + ]) + ).toEqual('Super Fast NextGen Processor @ 1.00GHz'); + }); + + it('returns empty string if there is no any thread data present', () => { + expect(formatCpuInfo([])).toEqual(''); + }); + + it('returns empty string if there is no model property present', () => { + expect( + formatCpuInfo([ + { + speed: 1000, + }, + ]) + ).toEqual(''); + }); + + it('returns model name if there is no speed property present', () => { + expect( + formatCpuInfo([ + { + model: 'Model name', + }, + ]) + ).toEqual('Model name'); + }); + + it('returns parsed model if there is no speed property present but the model property contains speed expressed in GHz', () => { + expect( + formatCpuInfo([ + { + model: 'Model name @ 0.5 GHz', + }, + ]) + ).toEqual('Model name @ 0.50GHz'); + }); + + it('returns model name if there is no speed property present and neither speed correctly expressed in the model', () => { + expect( + formatCpuInfo([ + { + model: 'Model name @ 1 MHz', + }, + ]) + ).toEqual('Model name'); + }); +}); diff --git a/source/renderer/app/utils/formatters.js b/source/renderer/app/utils/formatters.js index 31bea3cb4c..08021da039 100644 --- a/source/renderer/app/utils/formatters.js +++ b/source/renderer/app/utils/formatters.js @@ -260,24 +260,6 @@ export const toFixedWithoutRounding = ( export const formattedNumber = (value: number | string, dp?: number): string => new BigNumber(value).toFormat(dp); -export const formattedCpuModel = (model: string): string => { - const atCharPosition = model.indexOf('@'); - const speedSection = model.substring(atCharPosition); - const speedNumbers = speedSection.match(/[\d,.]+/g); - const speedNumber = speedNumbers ? speedNumbers[0] : ''; - const formattedSpeedNumber = formattedNumber(speedNumber, 2); - const formattedSpeedSection = speedSection.replace( - /[\d,.]+/, - formattedSpeedNumber - ); - const formattedModel = `${model.substring( - 0, - atCharPosition - )}${formattedSpeedSection}`; - - return formattedModel; -}; - export const formattedSize = (size: string): string => { const sizeNumbers = size.match(/[\d,.]+/g); const sizeNumber = sizeNumbers ? sizeNumbers[0] : ''; From 37495fae0668dbee552747c748aecfcfaf0b17df Mon Sep 17 00:00:00 2001 From: Marcin Mazurek Date: Fri, 21 Jan 2022 21:43:26 +0100 Subject: [PATCH 009/204] [DDW-870] Update the team member list (#2805) Co-authored-by: Daniel Main --- CHANGELOG.md | 6 ++++-- .../components/staking/stake-pools/StakePoolsSearch.scss | 2 +- source/renderer/app/components/static/About.js | 4 ++-- .../tokens/wallet-tokens-search/WalletTokensSearch.scss | 2 +- source/renderer/app/i18n/locales/defaultMessages.json | 4 ++-- source/renderer/app/i18n/locales/en-US.json | 4 ++-- source/renderer/app/i18n/locales/ja-JP.json | 4 ++-- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84dcb26d30..987c5b923a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ - Implemented wallet sorting on sidebar menu ([PR 2775](https://github.com/input-output-hk/daedalus/pull/2775)) - Implemented new token picker ([PR 2787](https://github.com/input-output-hk/daedalus/pull/2787)) +### Chores + +- Updated the list of team members ([PR 2805](https://github.com/input-output-hk/daedalus/pull/2805)) + ## 4.8.0-FC1 ### Features @@ -27,12 +31,10 @@ ### Fixes -- Fixed immediate language updates of application top menu bar ([PR 2813](https://github.com/input-output-hk/daedalus/pull/2813)) - Fixed receiver address validation by disallowing rewards addresses ([PR 2781](https://github.com/input-output-hk/daedalus/pull/2781)) ### Chores -- Integrated Chromatic for visual regression testing ([PR 2776](https://github.com/input-output-hk/daedalus/pull/2776)) - Updated `trezor-connect` dependency to version `8.2.4` ([PR 2726](https://github.com/input-output-hk/daedalus/pull/2726)) - Updated vulnerable dependencies ([PR 2769](https://github.com/input-output-hk/daedalus/pull/2769)) - Updated CWB and Cardano Node ([PR 2799](https://github.com/input-output-hk/daedalus/pull/2799)) diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss index 73fcad1291..92cb8ba6a5 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.scss @@ -19,8 +19,8 @@ z-index: 1; svg { - width: 15px; opacity: 0.3; + width: 15px; g > g { fill: var(--theme-staking-stake-pools-search-icon-color); } diff --git a/source/renderer/app/components/static/About.js b/source/renderer/app/components/static/About.js index 5cd05b292c..cd196cc163 100644 --- a/source/renderer/app/components/static/About.js +++ b/source/renderer/app/components/static/About.js @@ -30,13 +30,13 @@ const messages = defineMessages({ aboutContentDaedalusMembers: { id: 'static.about.content.daedalus.members', defaultMessage: - '!!!Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Brian McKenna, Charles Hoskinson, Danilo Prates, Darko Mijić, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Manus McCole, Michael Bishop, Mior Sufian, Nikola Glumac, Piotr Stachyra, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov', + '!!!Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Amit Sagar, Brian McKenna, Charles Hoskinson, Daniel Main, Danilo Prates, Darko Mijić, Dmitrii Gaico, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Lucas Araujo, Manus McCole, Marcin Mazurek, Michael Bishop, Michael Chappell, Mior Sufian, Nikola Glumac, Piotr Stachyra, Przemysław Włodek, Renan Ferreira, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Szymon Masłowski, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov', description: 'About page daedalus team members', }, aboutContentCardanoMembers: { id: 'static.about.content.cardano.members', defaultMessage: - "!!!Alexander Sukhoverkhov, Alexander Vieth, Alexandre Rodrigues Baldé, Alfredo Di Napoli, Anastasiya Besman, Andrzej Rybczak, Ante Kegalj, Anton Belyy, Anupam Jain, Arseniy Seroka, Artyom Kazak, Carlos D'Agostino, Charles Hoskinson, Dan Friedman, Denis Shevchenko, Dmitry Kovanikov, Dmitry Mukhutdinov, Dmitry Nikulin, Domen Kožar, Duncan Coutts, Edsko de Vries, Eileen Fitzgerald, George Agapov, Hiroto Shioi, Ilya Lubimov, Ilya Peresadin, Ivan Gromakovskii, Jake Mitchell, Jane Wild, Jens Krause, Jeremy Wood, Joel Mislov Kunst, Jonn Mostovoy, Konstantin Ivanov, Kristijan Šarić, Lars Brünjes, Laurie Wang, Lionel Miller, Michael Bishop, Mikhail Volkhov, Niklas Hambüchen, Peter Gaži, Philipp Kant, Serge Kosyrev, Vincent Hanquez", + '!!!Alan McNicholas, Alejandro Garcia, Alexander Diemand, Alexander Vieth, Anatoli Ivanou, Andreas Triantafyllos, Ante Kegalj, Armando Santos, Ben Ford, Charles Hoskinson, Dan Friedman, Deepak Kapiswe, Denis Shevchenko, Dorin Solomon, Duncan Coutts, Edsko de Vries, Erik de Castro Lopo, Gerard Moroney, Hiroto Shioi, Jane Wild, Jean-Christophe Mincke, Jeremy Wood, Johannes Lund, Jordan Millar, Karl Knutsson, Kristijan Šarić, Lars Brünjes, Laurie Wang, Liz Bancroft, Luke Nadur, Marc Fontaine, Marcin Szamotulski, Matt Parsons, Matthias Benkort, Michael Bishop, Michael Hueschen, Moritz Angermann, Neil Davis, Niamh Ahern, Nicholas Clarke, Nicolas Di Prima, Noel Rimbert, Patrick Kelly, Pawel Jakubas, Peter Gaži, Peter Thompson, Philipp Kant, Piotr Stachyra, Ravi Patel, Richard Wild, Rob Cohen, Rodney Lorrimar, Ryan Lemmer, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tom Flynn, Vasileios Gkoumas, Vincent Hanquez', description: 'About page cardano team members', }, aboutCopyright: { diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss index 2ac6771358..d89cb72c3e 100644 --- a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss +++ b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.scss @@ -10,8 +10,8 @@ svg { height: 15px; - width: 15px; opacity: 0.3; + width: 15px; } } diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index 2c4fde6397..2b63600e8c 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -7144,7 +7144,7 @@ } }, { - "defaultMessage": "!!!Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Brian McKenna, Charles Hoskinson, Danilo Prates, Darko Mijić, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Manus McCole, Michael Bishop, Mior Sufian, Nikola Glumac, Piotr Stachyra, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov", + "defaultMessage": "!!!Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Amit Sagar, Brian McKenna, Charles Hoskinson, Daniel Main, Danilo Prates, Darko Mijić, Dmitrii Gaico, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Lucas Araujo, Manus McCole, Marcin Mazurek, Michael Bishop, Michael Chappell, Mior Sufian, Nikola Glumac, Piotr Stachyra, Przemysław Włodek, Renan Ferreira, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Szymon Masłowski, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov", "description": "About page daedalus team members", "end": { "column": 3, @@ -7158,7 +7158,7 @@ } }, { - "defaultMessage": "!!!Alexander Sukhoverkhov, Alexander Vieth, Alexandre Rodrigues Baldé, Alfredo Di Napoli, Anastasiya Besman, Andrzej Rybczak, Ante Kegalj, Anton Belyy, Anupam Jain, Arseniy Seroka, Artyom Kazak, Carlos D'Agostino, Charles Hoskinson, Dan Friedman, Denis Shevchenko, Dmitry Kovanikov, Dmitry Mukhutdinov, Dmitry Nikulin, Domen Kožar, Duncan Coutts, Edsko de Vries, Eileen Fitzgerald, George Agapov, Hiroto Shioi, Ilya Lubimov, Ilya Peresadin, Ivan Gromakovskii, Jake Mitchell, Jane Wild, Jens Krause, Jeremy Wood, Joel Mislov Kunst, Jonn Mostovoy, Konstantin Ivanov, Kristijan Šarić, Lars Brünjes, Laurie Wang, Lionel Miller, Michael Bishop, Mikhail Volkhov, Niklas Hambüchen, Peter Gaži, Philipp Kant, Serge Kosyrev, Vincent Hanquez", + "defaultMessage": "!!!Alan McNicholas, Alejandro Garcia, Alexander Diemand, Alexander Vieth, Anatoli Ivanou, Andreas Triantafyllos, Ante Kegalj, Armando Santos, Ben Ford, Charles Hoskinson, Dan Friedman, Deepak Kapiswe, Denis Shevchenko, Dorin Solomon, Duncan Coutts, Edsko de Vries, Erik de Castro Lopo, Gerard Moroney, Hiroto Shioi, Jane Wild, Jean-Christophe Mincke, Jeremy Wood, Johannes Lund, Jordan Millar, Karl Knutsson, Kristijan Šarić, Lars Brünjes, Laurie Wang, Liz Bancroft, Luke Nadur, Marc Fontaine, Marcin Szamotulski, Matt Parsons, Matthias Benkort, Michael Bishop, Michael Hueschen, Moritz Angermann, Neil Davis, Niamh Ahern, Nicholas Clarke, Nicolas Di Prima, Noel Rimbert, Patrick Kelly, Pawel Jakubas, Peter Gaži, Peter Thompson, Philipp Kant, Piotr Stachyra, Ravi Patel, Richard Wild, Rob Cohen, Rodney Lorrimar, Ryan Lemmer, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tom Flynn, Vasileios Gkoumas, Vincent Hanquez", "description": "About page cardano team members", "end": { "column": 3, diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index 75e0737124..49bb07284c 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -582,9 +582,9 @@ "staking.stakePools.unmoderated": "Unmoderated", "static.about.buildInfo": "{platform} build {build}, {apiName} Node {nodeVersion}, {apiName} Wallet {apiVersion}", "static.about.content.cardano.headline": "Cardano Team:", - "static.about.content.cardano.members": "Alan McNicholas, Alejandro Garcia, Alexander Diemand, Alexander Vieth, Anatoli Ivanou, Andreas Triantafyllos, Ante Kegalj, Ben Ford, Charles Hoskinson, Dan Friedman, Deepak Kapiswe, Denis Shevchenko, Dorin Solomon, Duncan Coutts, Edsko de Vries, Erik de Castro Lopo, Gerard Moroney, Hiroto Shioi, Jane Wild, Jean-Christophe Mincke, Jeremy Wood, Johannes Lund, Jordan Millar, Karl Knutsson, Kristijan Šarić, Lars Brünjes, Laurie Wang, Liz Bancroft, Luke Nadur, Marc Fontaine, Marcin Szamotulski, Matt Parsons, Matthias Benkort, Michael Bishop, Michael Hueschen, Moritz Angermann, Neil Davis, Niamh Ahern, Nicholas Clarke, Nicolas Di Prima, Noel Rimbert, Patrick Kelly, Pawel Jakubas, Peter Gaži, Peter Thompson, Philipp Kant, Piotr Stachyra, Ravi Patel, Richard Wild, Rob Cohen, Rodney Lorrimar, Ryan Lemmer, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tom Flynn, Vasileios Gkoumas, Vincent Hanquez", + "static.about.content.cardano.members": "Alan McNicholas, Alejandro Garcia, Alexander Diemand, Alexander Vieth, Anatoli Ivanou, Andreas Triantafyllos, Ante Kegalj, Armando Santos, Ben Ford, Charles Hoskinson, Dan Friedman, Deepak Kapiswe, Denis Shevchenko, Dorin Solomon, Duncan Coutts, Edsko de Vries, Erik de Castro Lopo, Gerard Moroney, Hiroto Shioi, Jane Wild, Jean-Christophe Mincke, Jeremy Wood, Johannes Lund, Jordan Millar, Karl Knutsson, Kristijan Šarić, Lars Brünjes, Laurie Wang, Liz Bancroft, Luke Nadur, Marc Fontaine, Marcin Szamotulski, Matt Parsons, Matthias Benkort, Michael Bishop, Michael Hueschen, Moritz Angermann, Neil Davis, Niamh Ahern, Nicholas Clarke, Nicolas Di Prima, Noel Rimbert, Patrick Kelly, Pawel Jakubas, Peter Gaži, Peter Thompson, Philipp Kant, Piotr Stachyra, Ravi Patel, Richard Wild, Rob Cohen, Rodney Lorrimar, Ryan Lemmer, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tom Flynn, Vasileios Gkoumas, Vincent Hanquez", "static.about.content.daedalus.headline": "Daedalus Team:", - "static.about.content.daedalus.members": "Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Brian McKenna, Charles Hoskinson, Danilo Prates, Darko Mijić, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Manus McCole, Michael Bishop, Mior Sufian, Nikola Glumac, Piotr Stachyra, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov", + "static.about.content.daedalus.members": "Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Amit Sagar, Brian McKenna, Charles Hoskinson, Daniel Main, Danilo Prates, Darko Mijić, Dmitrii Gaico, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Lucas Araujo, Manus McCole, Marcin Mazurek, Michael Bishop, Michael Chappell, Mior Sufian, Nikola Glumac, Piotr Stachyra, Przemysław Włodek, Renan Ferreira, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Szymon Masłowski, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov", "static.about.copyright": "Input Output HK Limited. Licensed under", "static.about.license": "Apache 2.0 license", "static.about.title": "Daedalus", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 651dfe7748..b62af513fc 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -582,9 +582,9 @@ "staking.stakePools.unmoderated": "未調整", "static.about.buildInfo": "{platform} ビルド {build}, {apiName} Node {nodeVersion}, {apiName} Wallet {apiVersion}", "static.about.content.cardano.headline": "Cardanoチーム:", - "static.about.content.cardano.members": "Alan McNicholas, Alejandro Garcia, Alexander Diemand, Alexander Vieth, Anatoli Ivanou, Andreas Triantafyllos, Ante Kegalj, Ben Ford, Charles Hoskinson, Dan Friedman, Deepak Kapiswe, Denis Shevchenko, Dorin Solomon, Duncan Coutts, Edsko de Vries, Erik de Castro Lopo, Gerard Moroney, Hiroto Shioi, Jane Wild, Jean-Christophe Mincke, Jeremy Wood, Johannes Lund, Jordan Millar, Karl Knutsson, Kristijan Šarić, Lars Brünjes, Laurie Wang, Liz Bancroft, Luke Nadur, Marc Fontaine, Marcin Szamotulski, Matt Parsons, Matthias Benkort, Michael Bishop, Michael Hueschen, Moritz Angermann, Neil Davis, Niamh Ahern, Nicholas Clarke, Nicolas Di Prima, Noel Rimbert, Patrick Kelly, Pawel Jakubas, Peter Gaži, Peter Thompson, Philipp Kant, Piotr Stachyra, Ravi Patel, Richard Wild, Rob Cohen, Rodney Lorrimar, Ryan Lemmer, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tom Flynn, Vasileios Gkoumas, Vincent Hanquez", + "static.about.content.cardano.members": "Alan McNicholas, Alejandro Garcia, Alexander Diemand, Alexander Vieth, Anatoli Ivanou, Andreas Triantafyllos, Ante Kegalj, Armando Santos, Ben Ford, Charles Hoskinson, Dan Friedman, Deepak Kapiswe, Denis Shevchenko, Dorin Solomon, Duncan Coutts, Edsko de Vries, Erik de Castro Lopo, Gerard Moroney, Hiroto Shioi, Jane Wild, Jean-Christophe Mincke, Jeremy Wood, Johannes Lund, Jordan Millar, Karl Knutsson, Kristijan Šarić, Lars Brünjes, Laurie Wang, Liz Bancroft, Luke Nadur, Marc Fontaine, Marcin Szamotulski, Matt Parsons, Matthias Benkort, Michael Bishop, Michael Hueschen, Moritz Angermann, Neil Davis, Niamh Ahern, Nicholas Clarke, Nicolas Di Prima, Noel Rimbert, Patrick Kelly, Pawel Jakubas, Peter Gaži, Peter Thompson, Philipp Kant, Piotr Stachyra, Ravi Patel, Richard Wild, Rob Cohen, Rodney Lorrimar, Ryan Lemmer, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tom Flynn, Vasileios Gkoumas, Vincent Hanquez", "static.about.content.daedalus.headline": "Daedalusチーム:", - "static.about.content.daedalus.members": "Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Brian McKenna, Charles Hoskinson, Danilo Prates, Darko Mijić, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Manus McCole, Michael Bishop, Mior Sufian, Nikola Glumac, Piotr Stachyra, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov", + "static.about.content.daedalus.members": "Alan McNicholas, Aleksandar Djordjevic, Alexander Rukin, Amit Sagar, Brian McKenna, Charles Hoskinson, Daniel Main, Danilo Prates, Darko Mijić, Dmitrii Gaico, Dominik Guzei, Elin Liu, Gabriela Ponce, Jane Wild, Jeremy Wood, Juli Sudi, Junko Oda, Laurie Wang, Lucas Araujo, Manus McCole, Marcin Mazurek, Michael Bishop, Michael Chappell, Mior Sufian, Nikola Glumac, Piotr Stachyra, Przemysław Włodek, Renan Ferreira, Rhys Bartels-Waller, Richard Wild, Robert Moore, Rodney Lorrimar, Sam Jeston, Samuel Leathers, Serge Kosyrev, Szymon Masłowski, Tatyana Valkevych, Tomas Vrana, Tomislav Horaček, Yakov Karavelov", "static.about.copyright": "Input Output HK Limited. Licensed under", "static.about.license": "Apache 2.0 license", "static.about.title": "Daedalus", From f8c97c5e35e99c8c4af84513e8ba025bd26900b8 Mon Sep 17 00:00:00 2001 From: Renan Valentin Date: Fri, 21 Jan 2022 17:57:39 -0300 Subject: [PATCH 010/204] [DDW-917] Fix quality checks (#2828) Co-authored-by: Daniel Main --- .github/pull_request_template.md | 1 + .github/workflows/chromatic.yml | 7 ++++++- .github/workflows/linter.yml | 15 +++++++++++++++ bors.toml | 5 ----- 4 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/linter.yml diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index de92566601..1fdc3cb0b7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -41,6 +41,7 @@ Open a thread on #daedalus-qa on Slack, mention `@daedalusqa` and `@daedalusteam - [ ] PR assigned to the PR author(s) - [ ] `input-output-hk/daedalus-dev` and `input-output-hk/daedalus-qa` assigned as PR reviewers - [ ] If there are UI changes, Alexander Rukin assigned as an additional reviewer +- [ ] All visual regression testing has been reviewed (Go to Github Actions tab -> Select Chromatic workflow -> Run on your working branch) - [ ] PR has appropriate labels (`release-vNext`, `feature`/`bug`/`chore`, `WIP`) - [ ] PR link is added to a Jira ticket, ticket moved to In Review - [ ] PR is updated to the most recent version of the target branch (and there are no conflicts) diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index d4dd52920c..474fb9985d 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -1,5 +1,10 @@ name: 'Chromatic' -on: push +on: + workflow_dispatch: + push: + branches: + - develop + jobs: chromatic-deployment: runs-on: ubuntu-latest diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 0000000000..204d0a42d0 --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,15 @@ +name: Run Linter for Pull Requests +on: + push: +jobs: + tests: + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: "14" + - run: yarn install --frozen-lockfile + - run: yarn prettier:check && yarn lint && yarn stylelint diff --git a/bors.toml b/bors.toml index 4c47dcf5ac..c8cf3c886a 100644 --- a/bors.toml +++ b/bors.toml @@ -1,11 +1,6 @@ status = [ # Buildkite: osx/linux installers "buildkite/daedalus", - - # Hydra: we just care about tests attribute set - "ci/hydra:Cardano:daedalus:tests.runFlow", - "ci/hydra:Cardano:daedalus:tests.runLint", - "ci/hydra:Cardano:daedalus:tests.runShellcheck" ] timeout_sec = 7200 required_approvals = 1 From de6ce2512af59a1f6e639d20f74b7652f5333a9a Mon Sep 17 00:00:00 2001 From: Renan Valentin Date: Mon, 24 Jan 2022 13:36:09 -0300 Subject: [PATCH 011/204] [DDW-860] Implement new Send screen (#2791) --- .github/workflows/run_tests_on_pr.yml | 6 +- CHANGELOG.md | 1 + .../app/components/wallet/WalletSendForm.js | 358 +++++++++++--- .../app/components/wallet/WalletSendForm.scss | 43 +- .../components/wallet/WalletSendForm.spec.js | 438 ++++++++++++++++++ .../components/wallet/send-form/AssetInput.js | 1 + .../components/wallet/send-form/messages.js | 24 + .../wallet-token-picker/WalletTokenPicker.js | 2 +- .../app/i18n/locales/defaultMessages.json | 56 +++ source/renderer/app/i18n/locales/en-US.json | 4 + source/renderer/app/i18n/locales/ja-JP.json | 4 + tests/_utils/TestDecorator.js | 30 ++ 12 files changed, 885 insertions(+), 82 deletions(-) create mode 100644 source/renderer/app/components/wallet/WalletSendForm.spec.js create mode 100644 tests/_utils/TestDecorator.js diff --git a/.github/workflows/run_tests_on_pr.yml b/.github/workflows/run_tests_on_pr.yml index 3ce7787de8..a8c4c3c451 100644 --- a/.github/workflows/run_tests_on_pr.yml +++ b/.github/workflows/run_tests_on_pr.yml @@ -13,6 +13,6 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v2 with: - node-version: "12" - - run: yarn install - - run: yarn test:jest + node-version: "14" + - run: yarn --frozen-lockfile + - run: yarn test:jest --maxWorkers=3 diff --git a/CHANGELOG.md b/CHANGELOG.md index 987c5b923a..8403b0ac78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Unified CPU info in diagnostics dialog ([PR 2818](https://github.com/input-output-hk/daedalus/pull/2818)) - Implemented wallet sorting on sidebar menu ([PR 2775](https://github.com/input-output-hk/daedalus/pull/2775)) - Implemented new token picker ([PR 2787](https://github.com/input-output-hk/daedalus/pull/2787)) +- Improved wallet send form ([PR 2791](https://github.com/input-output-hk/daedalus/pull/2791)) ### Chores diff --git a/source/renderer/app/components/wallet/WalletSendForm.js b/source/renderer/app/components/wallet/WalletSendForm.js index 0ee79642ca..4811c2cbe9 100755 --- a/source/renderer/app/components/wallet/WalletSendForm.js +++ b/source/renderer/app/components/wallet/WalletSendForm.js @@ -4,7 +4,7 @@ import type { Node } from 'react'; import type { Field } from 'mobx-react-form'; import { observer } from 'mobx-react'; import { intlShape, FormattedHTMLMessage } from 'react-intl'; -import { filter, get, indexOf, omit, map, without } from 'lodash'; +import { filter, get, indexOf, omit, map, without, isEmpty } from 'lodash'; import BigNumber from 'bignumber.js'; import classNames from 'classnames'; import SVGInline from 'react-svg-inline'; @@ -37,11 +37,21 @@ import styles from './WalletSendForm.scss'; import Asset from '../../domains/Asset'; import type { HwDeviceStatus } from '../../domains/Wallet'; import type { AssetToken, ApiTokens } from '../../api/assets/types'; +import type { ReactIntlMessage } from '../../types/i18nTypes'; import { DiscreetWalletAmount } from '../../features/discreet-mode'; import WalletTokenPicker from './tokens/wallet-token-picker/WalletTokenPicker'; messages.fieldIsRequired = globalMessages.fieldIsRequired; +type AdaInputState = 'restored' | 'updated' | 'reset' | 'none'; + +const AdaInputStateType: EnumMap = { + Restored: 'restored', + Updated: 'updated', + None: 'none', + Reset: 'reset', +}; + type Props = { currencyMaxIntegerDigits: number, currencyMaxFractionalDigits: number, @@ -81,6 +91,7 @@ type State = { }, }, minimumAda: BigNumber, + adaAmountInputTrack: BigNumber, feeCalculationRequestQue: number, transactionFee: BigNumber, transactionFeeError: ?string | ?Node, @@ -89,6 +100,8 @@ type State = { isReceiverAddressValid: boolean, isTransactionFeeCalculated: boolean, isTokenPickerOpen: boolean, + isCalculatingTransactionFee: boolean, + adaInputState: AdaInputState, }; @observer @@ -100,6 +113,7 @@ export default class WalletSendForm extends Component { state = { formFields: {}, minimumAda: new BigNumber(0), + adaAmountInputTrack: new BigNumber(0), feeCalculationRequestQue: 0, transactionFee: new BigNumber(0), transactionFeeError: null, @@ -108,15 +122,10 @@ export default class WalletSendForm extends Component { isReceiverAddressValid: false, isTransactionFeeCalculated: false, isTokenPickerOpen: false, + isCalculatingTransactionFee: false, + adaInputState: AdaInputStateType.None, }; - // We need to track the fee calculation state in order to disable - // the "Submit" button as soon as either receiver or amount field changes. - // This is required as we are using debounced validation and we need to - // disable the "Submit" button as soon as the value changes and then wait for - // the validation to end in order to see if the button should be enabled or not. - _isCalculatingTransactionFee = false; - // We need to track the mounted state in order to avoid calling // setState promise handling code after the component was already unmounted: // Read more: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html @@ -202,8 +211,11 @@ export default class WalletSendForm extends Component { }; handleSubmitOnEnter = (event: KeyboardEvent): void => { - if (event.target instanceof HTMLInputElement && event.key === 'Enter') - this.handleOnSubmit(); + if (event.target instanceof HTMLInputElement && event.key === 'Enter') { + setTimeout(() => { + this.handleOnSubmit(); + }, FORM_VALIDATION_DEBOUNCE_WAIT); + } }; handleOnSubmit = () => { @@ -229,7 +241,9 @@ export default class WalletSendForm extends Component { this.setState({ minimumAda: new BigNumber(0), + adaAmountInputTrack: new BigNumber(0), isResetButtonDisabled: true, + adaInputState: AdaInputStateType.None, }); }; @@ -312,9 +326,10 @@ export default class WalletSendForm extends Component { }; isDisabled = () => - this._isCalculatingTransactionFee || + this.state.isCalculatingTransactionFee || !this.state.isTransactionFeeCalculated || - !this.form.isValid; + !this.form.isValid || + this.form.validating; form = new ReactToolboxMobxForm( { @@ -342,7 +357,7 @@ export default class WalletSendForm extends Component { const adaAmountField = form.$('adaAmount'); const isAdaAmountValid = adaAmountField.isValid; if (isValid && isAdaAmountValid) { - this.calculateTransactionFee(); + await this.calculateTransactionFee(); } else { this.resetTransactionFee(); } @@ -376,7 +391,7 @@ export default class WalletSendForm extends Component { formattedAmountToNaturalUnits(amountValue) ); if (isValid) { - this.calculateTransactionFee(); + await this.calculateTransactionFee(); } else { this.resetTransactionFee(); } @@ -419,32 +434,37 @@ export default class WalletSendForm extends Component { prevFeeCalculationRequestQue: number ) => currentFeeCalculationRequestQue - prevFeeCalculationRequestQue === 1; - calculateTransactionFee = async () => { - const { form } = this; - const emptyAssetFieldValue = '0'; - const hasEmptyAssetFields = this.selectedAssetsAmounts.includes( - emptyAssetFieldValue - ); - if (!form.isValid || hasEmptyAssetFields) { - form.showErrors(true); - return; - } + validateEmptyAssets = () => { + return this.selectedAssets + .filter((_, index) => { + const quantity = new BigNumber(this.selectedAssetsAmounts[index]); + return quantity.isZero(); + }) + .forEach(({ uniqueId }) => { + this.form.$(`asset_${uniqueId}`).validate({ showErrors: true }); + }); + }; + calculateTransactionFee = async ( + shouldUpdateMinimumAdaAmount: boolean = false + ) => { + this.validateEmptyAssets(); + + const { form } = this; const receiverField = form.$('receiver'); const receiver = receiverField.value; const adaAmountField = form.$('adaAmount'); const adaAmount = formattedAmountToLovelace(adaAmountField.value); - const assets: ApiTokens = filter( - this.selectedAssets.map(({ policyId, assetName }, index) => { + const assets: ApiTokens = this.selectedAssets + .map(({ policyId, assetName }, index) => { const quantity = new BigNumber(this.selectedAssetsAmounts[index]); return { policy_id: policyId, asset_name: assetName, quantity, // BigNumber or number - prevent parsing a BigNumber to Number (Integer) because of JS number length limitation }; - }), - 'quantity' - ); + }) + .filter(({ quantity }: { quantity: BigNumber }) => quantity.gt(0)); const { selectedAssetUniqueIds, @@ -453,31 +473,45 @@ export default class WalletSendForm extends Component { this.setState((prevState) => ({ feeCalculationRequestQue: prevState.feeCalculationRequestQue + 1, isTransactionFeeCalculated: false, - transactionFee: new BigNumber(0), transactionFeeError: null, + isCalculatingTransactionFee: true, })); + try { - this._isCalculatingTransactionFee = true; const { fee, minimumAda } = await this.props.calculateTransactionFee( receiver, adaAmount, assets ); + if ( this._isMounted && this.isLatestTransactionFeeRequest( this.state.feeCalculationRequestQue, prevFeeCalculationRequestQue - ) && - !this.selectedAssetsAmounts.includes(emptyAssetFieldValue) + ) ) { - this._isCalculatingTransactionFee = false; - this.setState({ + const minimumAdaValue = minimumAda || new BigNumber(0); + const adaAmountValue = new BigNumber(adaAmountField.value || 0); + const nextState = { isTransactionFeeCalculated: true, - minimumAda: minimumAda || new BigNumber(0), + minimumAda: minimumAdaValue, transactionFee: fee, transactionFeeError: null, - }); + isCalculatingTransactionFee: false, + adaInputState: this.state.adaInputState, + }; + + if (shouldUpdateMinimumAdaAmount) { + const adaInputState = await this.checkAdaInputState( + adaAmountValue, + minimumAdaValue + ); + + nextState.adaInputState = adaInputState; + this.trySetMinimumAdaAmount(adaInputState, minimumAdaValue); + } + this.setState(nextState); } } catch (error) { if ( @@ -491,6 +525,11 @@ export default class WalletSendForm extends Component { let transactionFeeError; let localizableError = error; let values; + let nextState = { + isCalculatingTransactionFee: false, + isTransactionFeeCalculated: false, + transactionFee: new BigNumber(0), + }; if (error.id === 'api.errors.utxoTooSmall') { const minimumAda = get(error, 'values.minimumAda'); @@ -499,7 +538,25 @@ export default class WalletSendForm extends Component { ? messages.minAdaRequiredWithAssetTooltip : messages.minAdaRequiredWithNoAssetTooltip; values = { minimumAda }; - this.setState({ minimumAda: new BigNumber(minimumAda) }); + if (shouldUpdateMinimumAdaAmount) { + const minimumAdaValue = new BigNumber(minimumAda); + const adaAmountValue = new BigNumber(adaAmountField.value || 0); + const adaInputState = await this.checkAdaInputState( + adaAmountValue, + minimumAdaValue + ); + this.trySetMinimumAdaAmount(adaInputState, minimumAdaValue); + this.setState({ + ...nextState, + adaInputState, + minimumAda: new BigNumber(minimumAda), + }); + return; + } + nextState = { + ...nextState, + minimumAda: new BigNumber(minimumAda), + }; } } @@ -511,28 +568,124 @@ export default class WalletSendForm extends Component { /> ); } else { - transactionFeeError = ( - + transactionFeeError = this.context.intl.formatMessage( + localizableError, + values ); } - this._isCalculatingTransactionFee = false; this.setState({ - isTransactionFeeCalculated: false, - transactionFee: new BigNumber(0), + ...nextState, transactionFeeError, }); } } }; + checkAdaInputState = async ( + adaAmount: BigNumber, + minimumAda: BigNumber + ): Promise => { + const { + adaAmountInputTrack, + selectedAssetUniqueIds, + adaInputState, + } = this.state; + + if ( + adaAmountInputTrack.gt(minimumAda) && + adaInputState === AdaInputStateType.Updated + ) { + return AdaInputStateType.Restored; + } + + if ( + adaAmountInputTrack.lt(minimumAda) && + !isEmpty(selectedAssetUniqueIds) + ) { + const isValid = await this.props.validateAmount( + formattedAmountToNaturalUnits(minimumAda.toFormat()) + ); + + if (!isValid) { + return AdaInputStateType.None; + } + + return AdaInputStateType.Updated; + } + + if (isEmpty(selectedAssetUniqueIds)) { + return AdaInputStateType.Reset; + } + + return AdaInputStateType.None; + }; + + trySetMinimumAdaAmount = ( + adaInputState: AdaInputState, + minimumAda: BigNumber + ) => { + const { formFields } = this.state; + const { adaAmount: adaAmountField } = formFields.receiver; + + switch (adaInputState) { + case 'updated': + adaAmountField.onChange(minimumAda.toString()); + break; + case 'restored': + case 'reset': + adaAmountField.onChange(this.state.adaAmountInputTrack.toString()); + break; + case 'none': + default: + } + }; + + updateAdaAmount = async () => { + const { minimumAda } = this.state; + const formattedMinimumAda = minimumAda.toFormat(); + const isValid = await this.props.validateAmount( + formattedAmountToNaturalUnits(formattedMinimumAda) + ); + + if (!isValid) { + return; + } + + this.form.$('adaAmount').onChange(formattedMinimumAda); + this.setState({ + adaInputState: AdaInputStateType.None, + adaAmountInputTrack: minimumAda, + }); + }; + + onAdaAmountFieldChange = (value: string) => { + const { formFields } = this.state; + const { adaAmount: adaAmountField } = formFields.receiver; + + adaAmountField.onChange(value != null ? value : ''); + + const adaAmount = new BigNumber(value != null ? value : 0); + + this.setState({ + adaAmountInputTrack: adaAmount, + adaInputState: AdaInputStateType.None, + }); + }; + + isAdaAmountLessThanMinimumRequired = () => { + const adaAmountField = this.form.$('adaAmount'); + const adaAmount = new BigNumber(adaAmountField.value || 0); + return adaAmount.lt(this.state.minimumAda); + }; + resetTransactionFee() { if (this._isMounted) { - this._isCalculatingTransactionFee = false; this.setState({ isTransactionFeeCalculated: false, transactionFee: new BigNumber(0), transactionFeeError: null, + isCalculatingTransactionFee: false, }); } } @@ -554,21 +707,23 @@ export default class WalletSendForm extends Component { const { receiver } = formFields; const assetFields = omit(receiver.assetFields, uniqueId); const assetsDropdown = omit(receiver.assetsDropdown, uniqueId); - this.setState({ - selectedAssetUniqueIds: without(selectedAssetUniqueIds, uniqueId), - formFields: { - ...formFields, - receiver: { - ...receiver, - assetFields, - assetsDropdown, + this.setState( + { + selectedAssetUniqueIds: without(selectedAssetUniqueIds, uniqueId), + formFields: { + ...formFields, + receiver: { + ...receiver, + assetFields, + assetsDropdown, + }, }, }, - }); - this.removeAssetFields(uniqueId); - setTimeout(() => { - this.calculateTransactionFee(); - }); + async () => { + this.removeAssetFields(uniqueId); + await this.calculateTransactionFee(true); + } + ); }; addAssetFields = (uniqueId: string) => { @@ -611,7 +766,7 @@ export default class WalletSendForm extends Component { assetValue.isLessThanOrEqualTo(asset.quantity); const isValid = isValidAmount && isValidRange; if (isValid) { - this.calculateTransactionFee(); + await this.calculateTransactionFee(true); } else { this.resetTransactionFee(); } @@ -657,11 +812,17 @@ export default class WalletSendForm extends Component { this.resetTransactionFee(); }; + getMinimumAdaValue = () => { + const { minimumAda } = this.state; + return minimumAda.isZero() + ? TRANSACTION_MIN_ADA_VALUE + : minimumAda.toFormat(); + }; + renderReceiverRow = (): Node => { const { intl } = this.context; const { formFields, - minimumAda, transactionFeeError, selectedAssetUniqueIds, isReceiverAddressValid, @@ -680,13 +841,10 @@ export default class WalletSendForm extends Component { 40 * selectedAssetUniqueIds.length : assetsSeparatorBasicHeight; - const minimumAdaValue = minimumAda.isZero() - ? TRANSACTION_MIN_ADA_VALUE - : minimumAda.toFormat(); + const minimumAdaValue = this.getMinimumAdaValue(); const addAssetButtonClasses = classNames([ styles.addAssetButton, - !this.hasAvailableAssets ? styles.disabled : null, 'primary', ]); @@ -778,27 +936,48 @@ export default class WalletSendForm extends Component { this.addFocusableField(field); }} className="adaAmount" - value={adaAmountField.value} bigNumberFormat={this.getCurrentNumberFormat()} decimalPlaces={currencyMaxFractionalDigits} numberLocaleOptions={{ minimumFractionDigits: currencyMaxFractionalDigits, }} - onChange={(value) => { - adaAmountField.onChange(value); - }} + onChange={this.onAdaAmountFieldChange} currency={globalMessages.adaUnit} error={adaAmountField.error || transactionFeeError} onKeyPress={this.handleSubmitOnEnter} allowSigns={false} autoFocus={this._isAutoFocusEnabled} /> -
- - {intl.formatMessage(messages.minAdaRequired, { - minimumAda: minimumAdaValue, - })} - +
+ {this.isAdaAmountLessThanMinimumRequired() ? ( + <> +
diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeader.scss b/source/renderer/app/components/wallet/summary/WalletSummaryHeader.scss index d361922982..67f47d4c96 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummaryHeader.scss +++ b/source/renderer/app/components/wallet/summary/WalletSummaryHeader.scss @@ -14,12 +14,16 @@ } .walletContent { - align-items: center; display: flex; flex-direction: row; justify-content: space-between; } +.currency { + min-width: 187px; + padding-top: 6px; +} + .walletName { color: var(--theme-bordered-box-text-color); font-family: var(--font-regular); @@ -40,13 +44,21 @@ word-break: break-all; .currencyCode { - font-size: 16px; font-size: 16px; margin-left: 6px; opacity: 0.7; } } +.rewards { + @extend %smallText; + height: auto; +} + +.rewardsAmount { + font-family: var(--font-medium); +} + .transactionsCountWrapper { .numberOfTransactions, .numberOfPendingTransactions { diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.js b/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.js new file mode 100644 index 0000000000..1df687fe1b --- /dev/null +++ b/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.js @@ -0,0 +1,92 @@ +// @flow +import BigNumber from 'bignumber.js'; +import React from 'react'; +import { observer } from 'mobx-react'; +import { + defineMessages, + FormattedHTMLMessage, + FormattedMessage, +} from 'react-intl'; +import { PopOver } from 'react-polymorph/lib/components/PopOver'; +import SVGInline from 'react-svg-inline'; +import questionMarkIcon from '../../../assets/images/question-mark.inline.svg'; +import { useDiscreetModeFeature } from '../../../features'; +import type { ReplacerFn } from '../../../features/discreet-mode/types'; +import { formattedWalletAmount } from '../../../utils/formatters'; +import styles from './WalletSummaryHeaderRewards.scss'; + +const messages = defineMessages({ + rewards: { + id: 'wallet.summary.header.rewardsSummary', + defaultMessage: '!!!{total} rewards earned, {unspent} unspent rewards', + description: 'Headline for the Decentralisation notification.', + }, + unspendableTooltip: { + id: 'wallet.summary.header.unspendableTooltip', + defaultMessage: + '!!!info message about unspendable rewards due to missing utxos', + description: + 'Tooltip describing that rewards are unspendable on the Wallet summary header', + }, +}); + +export function getFormattedRewardAmount(amount: BigNumber): string { + return amount.isGreaterThan(0) && amount.isLessThan(0.1) + ? '< 0.1 ADA' + : formattedWalletAmount(amount, true, false, 'ADA', 1); +} + +export function discreetRewardsAmount( + isRestoring: boolean = false +): ReplacerFn { + return (isDiscreetMode, symbol, value) => { + if (isRestoring) { + return '-'; + } + if (!isDiscreetMode) { + return getFormattedRewardAmount(value); + } + return `${symbol} ADA`; + }; +} + +export type WalletSummaryHeaderRewardsProps = {| + total: BigNumber, + unspent: BigNumber, + walletAmount: BigNumber, + isRestoring: boolean, +|}; + +function WalletSummaryHeaderRewards(props: WalletSummaryHeaderRewardsProps) { + const discreetModeFeature = useDiscreetModeFeature(); + const { isRestoring, total, unspent, walletAmount } = props; + return ( +
+ + {walletAmount.isGreaterThan(0) && walletAmount.isEqualTo(unspent) && ( + } + > + + + + + )} +
+ ); +} + +export default observer(WalletSummaryHeaderRewards); diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.scss b/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.scss new file mode 100644 index 0000000000..86d32fbded --- /dev/null +++ b/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.scss @@ -0,0 +1,34 @@ +.component { + font-family: var(--font-light); + :global(.amount) { + font-family: var(--font-medium); + } +} + +.questionMark { + height: 19px; + margin-left: 4px; + width: 10px; + + :global { + .SVGInline { + svg { + height: 10px; + width: 10px; + path { + opacity: 0.3; + } + } + } + } + + &:hover :global { + .SVGInline { + svg { + path { + opacity: 0.5; + } + } + } + } +} diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.spec.js b/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.spec.js new file mode 100644 index 0000000000..0a50967ceb --- /dev/null +++ b/source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.spec.js @@ -0,0 +1,34 @@ +// @flow +import BigNumber from 'bignumber.js'; +import { + discreetRewardsAmount, + getFormattedRewardAmount, +} from './WalletSummaryHeaderRewards'; + +describe('getFormattedRewardAmount', () => { + it('should render integer amounts without decimal places', () => { + expect(getFormattedRewardAmount(new BigNumber(1))).toEqual('1 ADA'); + }); + it('should render fraction amounts with a single decimal place', () => { + expect(getFormattedRewardAmount(new BigNumber(0.512))).toEqual('0.5 ADA'); + }); + it('should indicate values below 0.1', () => { + expect(getFormattedRewardAmount(new BigNumber(0.05))).toEqual('< 0.1 ADA'); + }); +}); + +describe('discreetRewardsAmount', () => { + const symbol = '***'; + it('should replace the amount with a dash while restoring', () => { + const replacer = discreetRewardsAmount(true); + expect(replacer(true, symbol, new BigNumber(0))).toEqual('-'); + }); + it('should replace the amount with a discreet value', () => { + const replacer = discreetRewardsAmount(); + expect(replacer(true, symbol, new BigNumber(0))).toEqual('*** ADA'); + }); + it('should return the formatted ADA value', () => { + const replacer = discreetRewardsAmount(); + expect(replacer(false, symbol, new BigNumber(0.5))).toEqual('0.5 ADA'); + }); +}); diff --git a/source/renderer/app/config/stakingRewards.dummy.json b/source/renderer/app/config/stakingRewards.dummy.json index e2b0ab5c7a..0289ca7c57 100644 --- a/source/renderer/app/config/stakingRewards.dummy.json +++ b/source/renderer/app/config/stakingRewards.dummy.json @@ -1,8 +1,9 @@ [ { "date": "15.01.2019", - "wallet": "Main Wallet", - "reward": 0.2, + "wallet": "Wallet with no rewards", + "total": 0, + "unspent": 0, "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwg069gh4", "pool": { "id": "a476343dd1dd57d680656224886ad9c11b5c44f6331bf029e9008a702713eda4", @@ -20,7 +21,8 @@ { "date": "15.01.2019", "wallet": "Spending Money", - "reward": 1.003, + "total": 1.003, + "unspent": 0, "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwg123kg9", "pool": { "id": "afd042672ed0212d074c5814771dc0f9d696b0fe3ca00c6bf613c1843f70419d", @@ -38,7 +40,8 @@ { "date": "10.01.2019", "wallet": "Spending Money", - "reward": 2, + "total": 2, + "unspent": 1, "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgpt83k9", "pool": { "id": "4484e2076b4604250f63032644acf37f0630e208b5d03378d546f747f9b7d3ff", @@ -56,7 +59,8 @@ { "date": "10.01.2019", "wallet": "Saving", - "reward": 0.9, + "total": 0.9, + "unspent": 0, "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgklo341", "pool": { "id": "b537af120298162372fc393d87e35803a8573a654786838e7a34b8d2354ec2fb", @@ -74,7 +78,8 @@ { "date": "10.01.2019", "wallet": "Main Wallet", - "reward": 0.2, + "total": 0.2, + "unspent": 0, "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgbhs6f8", "pool": { "id": "9438c572026bf8a7019ae1733e4c6a1b4208fc12291e4788a7db70891d6bdb97", @@ -92,7 +97,8 @@ { "date": "05.01.2019", "wallet": "Main Wallet", - "reward": 1.6, + "total": 1.6, + "unspent": 0, "rewardsAddress": "stake1u8v3renevakp4w3rgfd7629qz8ynzpd96chfh2eddytsvwgkf873g", "pool": { "id": "9eebf901e2ab6ee31eddd54b9725df5b59f23a531f5cb6d547b69f3fa880df89", diff --git a/source/renderer/app/containers/wallet/WalletSummaryPage.js b/source/renderer/app/containers/wallet/WalletSummaryPage.js index 6c7a0a9281..b9d35e943e 100755 --- a/source/renderer/app/containers/wallet/WalletSummaryPage.js +++ b/source/renderer/app/containers/wallet/WalletSummaryPage.js @@ -66,6 +66,7 @@ export default class WalletSummaryPage extends Component { profile, assets, currency, + staking, } = stores; const { all, getAsset, assetSettingsDialogWasOpened, favorites } = assets; const { isInternalAddress } = addresses; @@ -152,6 +153,7 @@ export default class WalletSummaryPage extends Component { {total} rewards earned, {unspent} unspent rewards", "wallet.summary.header.transactionsLabel": "Number of transactions", + "wallet.summary.header.unspendableTooltip": "All the ada in this wallet is in the rewards account. Since transaction fees cannot be paid with rewards, please send 2 or more ada to this wallet to cover transaction fees.", "wallet.summary.noTokens.learnMore.linkLabel": "Learn more", "wallet.summary.noTokens.learnMore.linkUrl": "https://iohk.io/en/blog/posts/2021/02/04/native-tokens-to-bring-new-utility-to-life-on-cardano/", "wallet.summary.noTokens.learnMore.textBottom": "Start by visiting the IOHK blog for a useful primer.", @@ -1269,4 +1272,4 @@ "wallet.transferFunds.dialog2.total.label": "Total", "widgets.itemsDropdown.syncingLabel": "Syncing", "widgets.itemsDropdown.syncingLabelProgress": "Syncing {syncingProgress}%" -} \ No newline at end of file +} diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 3b603c2741..1b2c8c4145 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -514,8 +514,9 @@ "staking.rewards.no.rewards": "報酬なし", "staking.rewards.note": "ステークを委任することにより得た報酬は自動的に報酬アカウントに振り込まれ、ウォレット残高に追加されます。", "staking.rewards.tableHeader.date": "日付", - "staking.rewards.tableHeader.reward": "獲得した報酬の合計", "staking.rewards.tableHeader.rewardsAddress": "報酬アドレス", + "staking.rewards.tableHeader.total": "合計", + "staking.rewards.tableHeader.unspent": "未使用", "staking.rewards.tableHeader.wallet": "ウォレット", "staking.rewards.title": "獲得した委任報酬", "staking.stakePools.delegatingListTitle": "委任するステークプール", @@ -1148,7 +1149,9 @@ "wallet.summary.currency.lastFetched": "換算:{fetchedTimeAgo}", "wallet.summary.currency.title": "換算通貨:", "wallet.summary.header.pendingTransactionsLabel": "処理中のトランザクション数", + "wallet.summary.header.rewardsSummary": "獲得した報酬:{total}、未使用の報酬:{unspent}", "wallet.summary.header.transactionsLabel": "トランザクション数", + "wallet.summary.header.unspendableTooltip": "このウォレットのADAはすべて報酬アカウントに入っています。トランザクション手数料に報酬を使用することはできないため、このウォレットに手数料分として2ADA以上入金してください。", "wallet.summary.noTokens.learnMore.linkLabel": "もっと知る", "wallet.summary.noTokens.learnMore.linkUrl": "https://iohk.io/en/blog/posts/2021/02/04/native-tokens-to-bring-new-utility-to-life-on-cardano/", "wallet.summary.noTokens.learnMore.textBottom": "役立つ入門書については、IOHKブログにアクセスすることから始めてください。", @@ -1269,4 +1272,4 @@ "wallet.transferFunds.dialog2.total.label": "合計", "widgets.itemsDropdown.syncingLabel": "同期", "widgets.itemsDropdown.syncingLabelProgress": "同期中 {syncingProgress}%" -} \ No newline at end of file +} diff --git a/source/renderer/app/stores/StakingStore.js b/source/renderer/app/stores/StakingStore.js index cec09fc42e..f45e025668 100644 --- a/source/renderer/app/stores/StakingStore.js +++ b/source/renderer/app/stores/StakingStore.js @@ -418,6 +418,7 @@ export default class StakingStore extends Store { }; const { filePath } = await showSaveDialogChannel.send(params); + console.log(filePath); // if cancel button is clicked or path is empty if (!filePath) return; @@ -512,7 +513,21 @@ export default class StakingStore extends Store { @computed get rewards(): Array { const { wallets } = this.stores; - return wallets.allWallets.map(this._transformWalletToReward); + return wallets.allWallets.map((w) => this.getRewardForWallet(w)); + } + + getRewardForWallet(wallet: Wallet): Reward { + const { transactions, addresses } = this.stores; + const rewardsAddress = addresses.stakeAddresses[wallet.id]; + const syncingProgress = get(wallet.syncState, 'progress.quantity', ''); + return { + wallet: wallet.name, + total: wallet.reward.plus(transactions.withdrawals[wallet.id]), + unspent: wallet.reward, + isRestoring: wallet.isRestoring, + syncingProgress, + rewardsAddress, + }; } @action showCountdown(): boolean { @@ -831,22 +846,6 @@ export default class StakingStore extends Store { }); }; - _transformWalletToReward = (inputWallet: Wallet) => { - const { - id: walletId, - name: wallet, - isRestoring, - reward: rewards, - syncState, - } = inputWallet; - const { stakeAddresses } = this.stores.addresses; - const { withdrawals } = this.stores.transactions; - const reward = rewards.plus(withdrawals[walletId]); - const rewardsAddress = stakeAddresses[walletId]; - const syncingProgress = get(syncState, 'progress.quantity', ''); - return { wallet, reward, isRestoring, syncingProgress, rewardsAddress }; - }; - getStakePoolById = (stakePoolId: string) => this.stakePools.find(({ id }: StakePool) => id === stakePoolId); } diff --git a/source/renderer/app/utils/formatters.js b/source/renderer/app/utils/formatters.js index 08021da039..383aadfaca 100644 --- a/source/renderer/app/utils/formatters.js +++ b/source/renderer/app/utils/formatters.js @@ -20,11 +20,12 @@ export const formattedWalletAmount = ( amount: BigNumber, withCurrency: boolean = true, long: boolean = true, - currency: string = 'ADA' + currency: string = 'ADA', + decimalPlaces: number = DECIMAL_PLACES_IN_ADA ): string => { let formattedAmount = long - ? new BigNumber(amount).toFormat(DECIMAL_PLACES_IN_ADA) - : shortNumber(amount); + ? new BigNumber(amount).toFormat(decimalPlaces) + : shortNumber(amount, decimalPlaces); const { decimalSeparator } = BigNumber.config().FORMAT; if (!long && decimalSeparator !== '.') { // Only BigNumber.toFormat() method is applying correct separators. @@ -105,14 +106,17 @@ export const formattedTokenDecimals = ( // B Billion 1.00E+09 // T Trillion 1.00E+12 // Q Quadrillion 1.00E+15 -export const shortNumber = (value: number | BigNumber): string => { +export const shortNumber = ( + value: number | BigNumber, + decimalPlaces: number = DECIMAL_PLACES_IN_ADA +): string => { const amount = new BigNumber(value); let formattedAmount = ''; if (amount.isZero()) { formattedAmount = '0'; } else if (amount.isLessThan(1000)) { formattedAmount = `${amount.decimalPlaces( - DECIMAL_PLACES_IN_ADA, + decimalPlaces, BigNumber.ROUND_DOWN )}`; } else if (amount.isLessThan(1000000)) { diff --git a/storybook/stories/_support/utils.js b/storybook/stories/_support/utils.js index b8eac8610e..1e8542e074 100644 --- a/storybook/stories/_support/utils.js +++ b/storybook/stories/_support/utils.js @@ -6,6 +6,7 @@ import moment from 'moment'; import { get } from 'lodash'; import BigNumber from 'bignumber.js'; import seedrandom from 'seedrandom'; +import type { Reward } from '../../../source/renderer/app/api/staking/types'; import Wallet, { WalletSyncStateStatuses, } from '../../../source/renderer/app/domains/Wallet'; @@ -106,7 +107,7 @@ export const generateWallet = ( name: string, amount: string, assets?: WalletTokens = { available: [], total: [] }, - reward?: number = 0, + reward?: string | number = 0, delegatedStakePool?: StakePool, hasPassword?: boolean, status?: SyncStateStatus = WalletSyncStateStatuses.READY, @@ -135,6 +136,18 @@ export const generateWallet = ( delegatedStakePoolId: get(delegatedStakePool, 'id'), }); +export const generateRewardForWallet = ( + wallet: Wallet, + unspent: string | number = '0' +): Reward => ({ + wallet: wallet.name, + total: wallet.reward, + unspent: new BigNumber(unspent).dividedBy(LOVELACES_PER_ADA), + isRestoring: wallet.isRestoring, + syncingProgress: 100, + rewardsAddress: 'stake_fake_address', +}); + export const generateAssetDomain = ( policyId: string, assetName: string = '', diff --git a/storybook/stories/wallets/index.js b/storybook/stories/wallets/index.js index 68efb43588..da5e491077 100644 --- a/storybook/stories/wallets/index.js +++ b/storybook/stories/wallets/index.js @@ -2,6 +2,7 @@ // Screens sets import './summary/WalletSummary.stories'; +import './summary/WalletSummaryHeader.stories'; import './send/WalletSend.stories'; import './receive/WalletReceive.stories'; import './transactions/TransactionsList.stories'; diff --git a/storybook/stories/wallets/summary/WalletSummary.stories.js b/storybook/stories/wallets/summary/WalletSummary.stories.js index c5206c2a3d..30670f103f 100644 --- a/storybook/stories/wallets/summary/WalletSummary.stories.js +++ b/storybook/stories/wallets/summary/WalletSummary.stories.js @@ -9,6 +9,7 @@ import { action } from '@storybook/addon-actions'; import { generateAssetToken, generateHash, + generateRewardForWallet, generateWallet, } from '../../_support/utils'; import WalletsWrapper from '../_utils/WalletsWrapper'; @@ -198,11 +199,15 @@ storiesOf('Wallets|Summary', module) 'Currency' ); + const wallet = generateWallet('Wallet name', '45119903750165', assets); + const reward = generateRewardForWallet(wallet, '0'); + const [firstAsset] = walletAssets; return ( + {storyWithKnobs} + + ); +} + +storiesOf('Wallets|Summary', module) + .addDecorator(WalletSummaryHeaderDecorator) + .add('Wallet Summary Header', () => { + const rewardsGroup = 'Rewards'; + const wallet = generateWallet( + 'Wallet name', + text('wallet total', '4564321263', rewardsGroup), + undefined, + text('rewards total', '4141123', rewardsGroup) + ); + const reward = generateRewardForWallet( + wallet, + text('unspent rewards', '0', rewardsGroup) + ); + return ( + + ); + }); From cbcabc3198e328d1c67baaaa507cfd8929aa3740 Mon Sep 17 00:00:00 2001 From: Dominik Guzei Date: Thu, 27 Jan 2022 12:24:15 +0100 Subject: [PATCH 013/204] [DDW-614] manage translations --- .../app/i18n/locales/defaultMessages.json | 85 ++++++++++++++----- source/renderer/app/i18n/locales/en-US.json | 2 +- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 3 files changed, 68 insertions(+), 21 deletions(-) diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index add8dbc758..fff891c8ad 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -6023,30 +6023,44 @@ }, { "defaultMessage": "!!!Total rewards earned (ADA)", - "description": "Table header \"Reward\" label on staking rewards page", + "description": "Table header \"Total Reward\" label on staking rewards page", "end": { "column": 3, "line": 61 }, "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", - "id": "staking.rewards.tableHeader.reward", + "id": "staking.rewards.tableHeader.total", "start": { - "column": 21, + "column": 26, "line": 57 } }, + { + "defaultMessage": "!!!Unspent (ADA)", + "description": "Table header \"Unspent\" label on staking rewards page", + "end": { + "column": 3, + "line": 66 + }, + "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", + "id": "staking.rewards.tableHeader.unspent", + "start": { + "column": 28, + "line": 62 + } + }, { "defaultMessage": "!!!Rewards address", "description": "Table header \"Rewards address\" label on staking rewards page", "end": { "column": 3, - "line": 66 + "line": 71 }, "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", "id": "staking.rewards.tableHeader.rewardsAddress", "start": { "column": 29, - "line": 62 + "line": 67 } }, { @@ -6054,13 +6068,13 @@ "description": "Table header \"Date\" label in exported csv file", "end": { "column": 3, - "line": 71 + "line": 76 }, "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", "id": "staking.rewards.tableHeader.date", "start": { "column": 19, - "line": 67 + "line": 72 } }, { @@ -6068,13 +6082,13 @@ "description": "Rewards description text on staking rewards page", "end": { "column": 3, - "line": 77 + "line": 82 }, "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", "id": "staking.rewards.note", "start": { "column": 8, - "line": 72 + "line": 77 } }, { @@ -6082,13 +6096,13 @@ "description": "unknown stake pool label on staking rewards page.", "end": { "column": 3, - "line": 82 + "line": 87 }, "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", "id": "staking.delegationCenter.syncingTooltipLabel", "start": { "column": 23, - "line": 78 + "line": 83 } }, { @@ -6096,13 +6110,13 @@ "description": "View in explorer button label on staking rewards page.", "end": { "column": 3, - "line": 87 + "line": 92 }, "file": "source/renderer/app/components/staking/rewards/StakingRewards.js", "id": "staking.rewards.actionViewInExplorer", "start": { "column": 24, - "line": 83 + "line": 88 } } ], @@ -13089,13 +13103,13 @@ "description": "Tokens title in the wallet summary", "end": { "column": 3, - "line": 18 + "line": 19 }, "file": "source/renderer/app/components/wallet/summary/WalletSummary.js", "id": "wallet.summary.assets.tokensTitle", "start": { "column": 19, - "line": 14 + "line": 15 } } ], @@ -13155,13 +13169,13 @@ "description": "\"Number of transactions\" label on Wallet summary header page", "end": { "column": 3, - "line": 19 + "line": 21 }, "file": "source/renderer/app/components/wallet/summary/WalletSummaryHeader.js", "id": "wallet.summary.header.transactionsLabel", "start": { "column": 21, - "line": 15 + "line": 17 } }, { @@ -13169,18 +13183,51 @@ "description": "\"Number of pending transactions\" label on Wallet summary header page", "end": { "column": 3, - "line": 25 + "line": 27 }, "file": "source/renderer/app/components/wallet/summary/WalletSummaryHeader.js", "id": "wallet.summary.header.pendingTransactionsLabel", "start": { "column": 28, - "line": 20 + "line": 22 } } ], "path": "source/renderer/app/components/wallet/summary/WalletSummaryHeader.json" }, + { + "descriptors": [ + { + "defaultMessage": "!!!{total} rewards earned, {unspent} unspent rewards", + "description": "Headline for the Decentralisation notification.", + "end": { + "column": 3, + "line": 23 + }, + "file": "source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.js", + "id": "wallet.summary.header.rewardsSummary", + "start": { + "column": 11, + "line": 19 + } + }, + { + "defaultMessage": "!!!info message about unspendable rewards due to missing utxos", + "description": "Tooltip describing that rewards are unspendable on the Wallet summary header", + "end": { + "column": 3, + "line": 30 + }, + "file": "source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.js", + "id": "wallet.summary.header.unspendableTooltip", + "start": { + "column": 22, + "line": 24 + } + } + ], + "path": "source/renderer/app/components/wallet/summary/WalletSummaryHeaderRewards.json" + }, { "descriptors": [ { diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index a2f6705b54..c9803e7572 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -1272,4 +1272,4 @@ "wallet.transferFunds.dialog2.total.label": "Total", "widgets.itemsDropdown.syncingLabel": "Syncing", "widgets.itemsDropdown.syncingLabelProgress": "Syncing {syncingProgress}%" -} +} \ No newline at end of file diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 1b2c8c4145..937e0991d3 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -1272,4 +1272,4 @@ "wallet.transferFunds.dialog2.total.label": "合計", "widgets.itemsDropdown.syncingLabel": "同期", "widgets.itemsDropdown.syncingLabelProgress": "同期中 {syncingProgress}%" -} +} \ No newline at end of file From 48b1e8a1e941e9f46d44414557c5c8115673b1f5 Mon Sep 17 00:00:00 2001 From: Dominik Guzei Date: Thu, 27 Jan 2022 13:12:17 +0100 Subject: [PATCH 014/204] [DDW-614] Remove console.log statement --- source/renderer/app/stores/StakingStore.js | 1 - 1 file changed, 1 deletion(-) diff --git a/source/renderer/app/stores/StakingStore.js b/source/renderer/app/stores/StakingStore.js index f45e025668..d4dd87f3ea 100644 --- a/source/renderer/app/stores/StakingStore.js +++ b/source/renderer/app/stores/StakingStore.js @@ -418,7 +418,6 @@ export default class StakingStore extends Store { }; const { filePath } = await showSaveDialogChannel.send(params); - console.log(filePath); // if cancel button is clicked or path is empty if (!filePath) return; From ef26e00b30e7c3897c9048a4b9b514a68395a313 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:17:45 +0000 Subject: [PATCH 015/204] [DDW-773] temporarily removed husky pre-commit --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 57802061c4..4480742afe 100644 --- a/package.json +++ b/package.json @@ -267,7 +267,6 @@ }, "husky": { "hooks": { - "pre-commit": "pretty-quick --staged", "pre-push": "yarn check:all" } }, From 09e5f181a2ce56441465b65647f5725386499187 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:18:13 +0000 Subject: [PATCH 016/204] [DDW-773] removed flow folder and config --- .flowconfig | 29 ----------------------------- flow/declarations/EnumMap.js | 1 - flow/mappers/CSSModule.js.flow | 2 -- flow/mappers/GeneralStub.js.flow | 1 - flow/mappers/WebpackAsset.js.flow | 2 -- 5 files changed, 35 deletions(-) delete mode 100755 .flowconfig delete mode 100644 flow/declarations/EnumMap.js delete mode 100644 flow/mappers/CSSModule.js.flow delete mode 100644 flow/mappers/GeneralStub.js.flow delete mode 100644 flow/mappers/WebpackAsset.js.flow diff --git a/.flowconfig b/.flowconfig deleted file mode 100755 index 70c76366c3..0000000000 --- a/.flowconfig +++ /dev/null @@ -1,29 +0,0 @@ -[ignore] -/node_modules/fbjs/.* -/node_modules/electron-packager/.* -/node_modules/npm/.* -/node_modules/oboe/.* -/node_modules/jsonlint/.* -/node_modules/hd-wallet/.* -/node_modules/trezor-connect/.* -/node_modules/trezor-link/.* -/node_modules/protobufjs-old-fixed-webpack/.* -/dist/.* -/release/.* -/git/.* -/.cache-loader/.* -/state-cluster/.* -/utils/js-launcher/.* -/tests-report/.* -/node_modules/.cache - -[include] - -[libs] -flow/declarations/ - -[options] -esproposal.decorators=ignore -esproposal.optional_chaining=enable -module.ignore_non_literal_requires=true -module.name_mapper.extension='scss' -> '/flow/mappers/CSSModule.js.flow' diff --git a/flow/declarations/EnumMap.js b/flow/declarations/EnumMap.js deleted file mode 100644 index 35b0bf059d..0000000000 --- a/flow/declarations/EnumMap.js +++ /dev/null @@ -1 +0,0 @@ -declare type EnumMap = O & { [K]: V & $ElementType }; \ No newline at end of file diff --git a/flow/mappers/CSSModule.js.flow b/flow/mappers/CSSModule.js.flow deleted file mode 100644 index c98cc4de57..0000000000 --- a/flow/mappers/CSSModule.js.flow +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -declare export default { [string]: string } diff --git a/flow/mappers/GeneralStub.js.flow b/flow/mappers/GeneralStub.js.flow deleted file mode 100644 index ff8b4c5632..0000000000 --- a/flow/mappers/GeneralStub.js.flow +++ /dev/null @@ -1 +0,0 @@ -export default {}; diff --git a/flow/mappers/WebpackAsset.js.flow b/flow/mappers/WebpackAsset.js.flow deleted file mode 100644 index 37d49d3ed1..0000000000 --- a/flow/mappers/WebpackAsset.js.flow +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -declare export default string From 1bb2403253aa776d89e847ecb43ab01ac9c2df82 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:21:11 +0000 Subject: [PATCH 017/204] [DDW-773] uninstalled flow packages --- package.json | 4 - yarn.lock | 1299 +++----------------------------------------------- 2 files changed, 57 insertions(+), 1246 deletions(-) diff --git a/package.json b/package.json index 4480742afe..6e78778b40 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,6 @@ "@babel/plugin-transform-runtime": "7.2.0", "@babel/polyfill": "7.0.0", "@babel/preset-env": "7.16.4", - "@babel/preset-flow": "7.16.0", "@babel/preset-react": "7.0.0", "@babel/register": "7.0.0", "@dump247/storybook-state": "1.6.1", @@ -115,7 +114,6 @@ "eslint-config-prettier": "6.12.0", "eslint-formatter-pretty": "4.0.0", "eslint-import-resolver-webpack": "0.13.1", - "eslint-plugin-flowtype": "5.2.0", "eslint-plugin-import": "2.23.3", "eslint-plugin-jest": "24.4.0", "eslint-plugin-jsx-a11y": "6.3.1", @@ -126,8 +124,6 @@ "faker": "5.1.0", "fast-sass-loader": "1.5.0", "file-loader": "4.2.0", - "flow-bin": "0.119.1", - "gulp-flow-remove-types": "1.0.0", "gulp-shell": "0.8.0", "hash.js": "1.1.7", "html-loader": "0.5.5", diff --git a/yarn.lock b/yarn.lock index b82fb6c08e..ea1b14f906 100644 --- a/yarn.lock +++ b/yarn.lock @@ -796,12 +796,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-flow@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz#07427021d093ed77019408221beaf0272bbcfaec" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -1022,13 +1016,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.10.4" -"@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz#edd968dc2041c1b69e451a262e948d6654a79dc2" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-flow" "^7.16.0" - "@babel/plugin-transform-for-of@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" @@ -1541,14 +1528,6 @@ levenary "^1.1.1" semver "^5.5.0" -"@babel/preset-flow@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.0.tgz#9f1f6e72714d79460d48058cb5658fc87da7150b" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-flow-strip-types" "^7.16.0" - "@babel/preset-flow@^7.0.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" @@ -3349,10 +3328,6 @@ version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" -abab@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" @@ -3368,12 +3343,6 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" - dependencies: - acorn "^4.0.4" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -3397,7 +3366,7 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" -acorn@6.4.2, acorn@^4.0.4, acorn@^6.4.1, acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0, acorn@^8.2.4: +acorn@6.4.2, acorn@^6.4.1, acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0, acorn@^8.2.4: version "6.4.2" resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" @@ -3517,10 +3486,6 @@ ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" -ansi-escapes@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -3541,7 +3506,7 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@^2.0.0, ansi-regex@^2.1.1: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -3565,7 +3530,7 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: @@ -3595,13 +3560,6 @@ any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3633,12 +3591,6 @@ append-buffer@^1.0.2: dependencies: buffer-equal "^1.0.0" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -3710,12 +3662,6 @@ aria-query@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -3740,10 +3686,6 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -3752,10 +3694,6 @@ array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -3825,14 +3763,10 @@ array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" -array-uniq@^1.0.1, array-uniq@^1.0.2: +array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -4013,7 +3947,7 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" -async@^2.0.1, async@^2.1.4, async@^2.6.3: +async@^2.0.1, async@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" dependencies: @@ -4092,7 +4026,7 @@ axobject-query@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -4100,43 +4034,6 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - babel-helper-evaluate-path@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" @@ -4165,21 +4062,6 @@ babel-helper-to-multiple-sequence-expressions@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.3" - babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" @@ -4202,12 +4084,6 @@ babel-loader@8.0.4: mkdirp "^0.5.1" util.promisify "^1.0.0" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - babel-plugin-add-react-displayname@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" @@ -4233,15 +4109,6 @@ babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: find-root "^1.1.0" source-map "^0.5.7" -babel-plugin-istanbul@^4.0.0: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - babel-plugin-istanbul@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -4252,10 +4119,6 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" - babel-plugin-jest-hoist@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" @@ -4383,10 +4246,6 @@ babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - babel-plugin-transform-inline-consecutive-adds@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" @@ -4452,12 +4311,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" - dependencies: - babel-plugin-jest-hoist "^20.0.3" - babel-preset-jest@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" @@ -4493,62 +4346,13 @@ babel-preset-jest@^26.6.2: babel-plugin-transform-undefined-to-void "^6.9.4" lodash "^4.17.11" -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.15.0, babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - bach@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" @@ -4640,10 +4444,6 @@ becke-ch--regex--s0-0-v1--base--pl--lib@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz#429ceebbfa5f7e936e78d73fbdc7da7162b20e20" -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - big-integer@1.6.36: version "1.6.36" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" @@ -4803,7 +4603,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@2.3.2, braces@^1.8.2, braces@^2.3.1, braces@^2.3.2, braces@^3.0.1, braces@~3.0.2: +braces@2.3.2, braces@^2.3.1, braces@^2.3.2, braces@^3.0.1, braces@~3.0.2: version "2.3.2" resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: @@ -4850,7 +4650,7 @@ browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" -browser-resolve@^1.11.2, browser-resolve@^1.8.1: +browser-resolve@^1.8.1: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" dependencies: @@ -4961,12 +4761,6 @@ bs58check@2.1.2, bs58check@<3.0.0, bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" - dependencies: - node-int64 "^0.4.0" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -5047,10 +4841,6 @@ bufferutil@4.0.1: dependencies: node-gyp-build "~3.7.0" -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -5362,7 +5152,7 @@ chalk@4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -5492,10 +5282,6 @@ chromium-pickle-js@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -5644,19 +5430,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - -clone@^1.0.0, clone@^1.0.2, clone@^1.0.4: +clone@^1.0.2, clone@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -5905,10 +5683,6 @@ content-disposition@0.5.3: dependencies: safe-buffer "5.1.2" -content-type-parser@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -5987,7 +5761,7 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7, core-js@^2.6.10: +core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.10: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -6306,19 +6080,13 @@ csso@^4.0.2: dependencies: css-tree "1.0.0-alpha.39" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - dependencies: - cssom "0.3.x" +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" cssstyle@^2.3.0: version "2.3.0" @@ -6503,10 +6271,6 @@ date-fns@^2.0.1: version "2.16.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" -dateformat@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" - debounce-fn@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" @@ -6633,17 +6397,11 @@ default-compare@^1.0.0: dependencies: kind-of "^5.0.2" -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - dependencies: - strip-bom "^2.0.0" - default-resolution@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" -defaults@^1.0.0, defaults@^1.0.3: +defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" dependencies: @@ -6726,10 +6484,6 @@ depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" -deprecated@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -6745,12 +6499,6 @@ detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -6815,10 +6563,6 @@ diff-sequences@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - diff@^4.0.1, diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -7005,12 +6749,6 @@ dotenv@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -7248,12 +6986,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -end-of-stream@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" - dependencies: - once "~1.3.0" - enhanced-resolve@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" @@ -7495,7 +7227,7 @@ escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" -escodegen@^1.11.1, escodegen@^1.6.1: +escodegen@^1.11.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" dependencies: @@ -7602,13 +7334,6 @@ eslint-module-utils@^2.6.1: debug "^3.2.7" pkg-dir "^2.0.0" -eslint-plugin-flowtype@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.0.tgz#a4bef5dc18f9b2bdb41569a4ab05d73805a3d261" - dependencies: - lodash "^4.17.15" - string-natural-compare "^3.0.1" - eslint-plugin-import@2.23.3: version "2.23.3" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.3.tgz#8a1b073289fff03c4af0f04b6df956b7d463e191" @@ -7851,12 +7576,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - dependencies: - merge "^1.2.0" - exec-sh@^0.3.2: version "0.3.6" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" @@ -7905,12 +7624,6 @@ exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -8010,12 +7723,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -8069,7 +7776,7 @@ falafel@^2.1.0: isarray "^2.0.1" object-keys "^1.0.6" -fancy-log@^1.1.0, fancy-log@^1.3.2, fancy-log@^1.3.3: +fancy-log@^1.3.2, fancy-log@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" dependencies: @@ -8160,12 +7867,6 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -8260,10 +7961,6 @@ file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - filename-reserved-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" @@ -8276,13 +7973,6 @@ filenamify@^4.1.0: strip-outer "^1.0.1" trim-repeated "^1.0.0" -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - filesize@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -8336,10 +8026,6 @@ find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-index@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" - find-process@1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.7.tgz#8c76962259216c381ef1099371465b5b439ea121" @@ -8422,10 +8108,6 @@ fireworks-js@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/fireworks-js/-/fireworks-js-1.0.4.tgz#b76d47ddce2240009cd32264136d28541059764b" -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" - flagged-respawn@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" @@ -8449,17 +8131,6 @@ flora-colossus@^1.0.0: debug "^4.1.1" fs-extra "^7.0.0" -flow-bin@0.119.1: - version "0.119.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.119.1.tgz#b6d763b386ec9f1085848ca7df98909d80a16bd0" - -flow-remove-types@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" - dependencies: - babylon "^6.15.0" - vlq "^0.2.1" - flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -8506,7 +8177,7 @@ for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" -for-own@^0.1.3, for-own@^0.1.4: +for-own@^0.1.3: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: @@ -8755,12 +8426,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaze@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" - dependencies: - globule "~0.1.0" - gaze@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" @@ -8896,17 +8561,6 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-stream@^3.1.5: - version "3.1.18" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" - dependencies: - glob "^4.3.1" - glob2base "^0.0.12" - minimatch "^2.0.1" - ordered-read-streams "^0.1.0" - through2 "^0.6.1" - unique-stream "^1.0.0" - glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -8926,12 +8580,6 @@ glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" -glob-watcher@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" - dependencies: - gaze "^0.5.1" - glob-watcher@^5.0.3: version "5.0.5" resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" @@ -8944,12 +8592,6 @@ glob-watcher@^5.0.3: normalize-path "^3.0.0" object.defaults "^1.1.0" -glob2base@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - dependencies: - find-index "^0.1.1" - glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -8961,23 +8603,6 @@ glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glo once "^1.3.0" path-is-absolute "^1.0.0" -glob@^4.3.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - -glob@~3.1.21: - version "3.1.21" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" - dependencies: - graceful-fs "~1.2.0" - inherits "1" - minimatch "~0.2.11" - glob@~7.1.1: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -9065,10 +8690,6 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - globalthis@^1.0.0, globalthis@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" @@ -9131,14 +8752,6 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -globule@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" - dependencies: - glob "~3.1.21" - lodash "~1.0.1" - minimatch "~0.2.11" - glogg@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" @@ -9193,20 +8806,10 @@ graceful-fs@4.2.4, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" -graceful-fs@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.12.tgz#0034947ce9ed695ec8ab0b854bc919e82b1ffaef" - dependencies: - natives "^1.1.3" - graceful-fs@^4.2.3: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" -graceful-fs@~1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" - grapheme-splitter@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" @@ -9242,16 +8845,6 @@ gulp-cli@^2.2.0: v8flags "^3.2.0" yargs "^7.1.0" -gulp-flow-remove-types@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulp-flow-remove-types/-/gulp-flow-remove-types-1.0.0.tgz#d036db9d509c91e8875b363db680d0a831effa99" - dependencies: - flow-remove-types "^1.2.1" - gulp "^3.9.1" - gulp-util "^3.0.8" - jest "^20.0.4" - through2 "^2.0.3" - gulp-shell@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/gulp-shell/-/gulp-shell-0.8.0.tgz#0ed4980de1d0c67e5f6cce971d7201fd0be50555" @@ -9263,29 +8856,6 @@ gulp-shell@0.8.0: through2 "^3.0.1" tslib "^1.10.0" -gulp-util@^3.0.0, gulp-util@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - gulp@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" @@ -9295,24 +8865,6 @@ gulp@4.0.2: undertaker "^1.2.1" vinyl-fs "^3.0.0" -gulp@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" - dependencies: - archy "^1.0.0" - chalk "^1.0.0" - deprecated "^0.0.1" - gulp-util "^3.0.0" - interpret "^1.0.0" - liftoff "^2.1.0" - minimist "^1.1.0" - orchestrator "^0.3.0" - pretty-hrtime "^1.0.0" - semver "^4.1.0" - tildify "^1.0.0" - v8flags "^2.0.2" - vinyl-fs "^0.3.0" - gulplog@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" @@ -9326,7 +8878,7 @@ gzip-size@5.1.1: duplexer "^0.1.1" pify "^4.0.1" -handlebars@4.7.7, handlebars@^4.0.3: +handlebars@4.7.7: version "4.7.7" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" dependencies: @@ -9378,12 +8930,6 @@ has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -9506,13 +9052,6 @@ hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - home-or-tmp@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" @@ -9527,12 +9066,6 @@ hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" -html-encoding-sniffer@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -9862,10 +9395,6 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" - inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -10060,12 +9589,6 @@ is-buffer@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" @@ -10074,12 +9597,6 @@ is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -10143,16 +9660,6 @@ is-dom@^1.0.9: is-object "^1.0.1" is-window "^1.0.2" -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -10201,7 +9708,7 @@ is-generator@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" -is-glob@^2.0.0, is-glob@^2.0.1: +is-glob@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: @@ -10318,18 +9825,10 @@ is-plain-object@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - is-regex@^1.0.4, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" @@ -10498,48 +9997,10 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.1: - version "1.3.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.4.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" - istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" @@ -10559,15 +10020,6 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -10576,16 +10028,6 @@ istanbul-lib-report@^3.0.0: make-dir "^3.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - istanbul-lib-source-maps@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" @@ -10594,12 +10036,6 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - dependencies: - handlebars "^4.0.3" - istanbul-reports@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" @@ -10618,10 +10054,6 @@ iterate-value@^1.0.0: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" -jest-changed-files@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" - jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -10630,44 +10062,9 @@ jest-changed-files@^26.6.2: execa "^4.0.0" throat "^5.0.0" -jest-cli@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.3" - jest-config "^20.0.4" - jest-docblock "^20.0.3" - jest-environment-jsdom "^20.0.3" - jest-haste-map "^20.0.4" - jest-jasmine2 "^20.0.4" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve-dependencies "^20.0.3" - jest-runtime "^20.0.4" - jest-snapshot "^20.0.3" - jest-util "^20.0.3" - micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^2.3.0" - slash "^1.0.0" - string-length "^1.0.1" - throat "^3.0.0" - which "^1.2.12" - worker-farm "^1.3.1" - yargs "^7.0.2" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" dependencies: "@jest/core" "^26.6.3" "@jest/test-result" "^26.6.2" @@ -10683,21 +10080,6 @@ jest-cli@^26.6.3: prompts "^2.0.1" yargs "^15.4.1" -jest-config@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" - dependencies: - chalk "^1.1.3" - glob "^7.1.1" - jest-environment-jsdom "^20.0.3" - jest-environment-node "^20.0.3" - jest-jasmine2 "^20.0.4" - jest-matcher-utils "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-validate "^20.0.3" - pretty-format "^20.0.3" - jest-config@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" @@ -10729,15 +10111,6 @@ jest-css-modules-transform@4.3.0: postcss "^7.0.30 || ^8.0.0" postcss-nested "^4.2.1 || ^5.0.0" -jest-diff@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" - dependencies: - chalk "^1.1.3" - diff "^3.2.0" - jest-matcher-utils "^20.0.3" - pretty-format "^20.0.3" - jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" @@ -10756,10 +10129,6 @@ jest-diff@^27.0.0: jest-get-type "^27.3.1" pretty-format "^27.3.1" -jest-docblock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" - jest-docblock@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" @@ -10788,21 +10157,6 @@ jest-environment-jsdom@26.6.2, jest-environment-jsdom@^26.6.2: jest-util "^26.6.2" jsdom "^16.4.0" -jest-environment-jsdom@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" - dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" - jsdom "^9.12.0" - -jest-environment-node@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" - dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" - jest-environment-node@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" @@ -10822,17 +10176,6 @@ jest-get-type@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" -jest-haste-map@^20.0.4: - version "20.0.5" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^20.0.3" - micromatch "^2.3.11" - sane "~1.6.0" - worker-farm "^1.3.1" - jest-haste-map@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" @@ -10853,20 +10196,6 @@ jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-matchers "^20.0.3" - jest-message-util "^20.0.3" - jest-snapshot "^20.0.3" - once "^1.4.0" - p-map "^1.1.1" - jest-jasmine2@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" @@ -10897,13 +10226,6 @@ jest-leak-detector@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-matcher-utils@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" - dependencies: - chalk "^1.1.3" - pretty-format "^20.0.3" - jest-matcher-utils@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" @@ -10913,23 +10235,6 @@ jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-matchers@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" - dependencies: - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - -jest-message-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" - dependencies: - chalk "^1.1.3" - micromatch "^2.3.11" - slash "^1.0.0" - jest-message-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" @@ -10944,10 +10249,6 @@ jest-message-util@^26.6.2: slash "^3.0.0" stack-utils "^2.0.2" -jest-mock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" - jest-mock@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" @@ -10959,20 +10260,10 @@ jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" -jest-regex-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" - jest-regex-util@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" -jest-resolve-dependencies@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" - dependencies: - jest-regex-util "^20.0.3" - jest-resolve-dependencies@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" @@ -10981,14 +10272,6 @@ jest-resolve-dependencies@^26.6.3: jest-regex-util "^26.0.0" jest-snapshot "^26.6.2" -jest-resolve@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" - dependencies: - browser-resolve "^1.11.2" - is-builtin-module "^1.0.0" - resolve "^1.3.2" - jest-resolve@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" @@ -11027,26 +10310,6 @@ jest-runner@^26.6.3: source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" - dependencies: - babel-core "^6.0.0" - babel-jest "^20.0.3" - babel-plugin-istanbul "^4.0.0" - chalk "^1.1.3" - convert-source-map "^1.4.0" - graceful-fs "^4.1.11" - jest-config "^20.0.4" - jest-haste-map "^20.0.4" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-util "^20.0.3" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - strip-bom "3.0.0" - yargs "^7.0.2" - jest-runtime@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" @@ -11086,17 +10349,6 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" - dependencies: - chalk "^1.1.3" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-util "^20.0.3" - natural-compare "^1.4.0" - pretty-format "^20.0.3" - jest-snapshot@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" @@ -11122,18 +10374,6 @@ jest-svg-transformer@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/jest-svg-transformer/-/jest-svg-transformer-1.0.0.tgz#e38884ca4cd8b2295cdfa2a0b24667920c3a8a6d" -jest-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-message-util "^20.0.3" - jest-mock "^20.0.3" - jest-validate "^20.0.3" - leven "^2.1.0" - mkdirp "^0.5.1" - jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" @@ -11145,15 +10385,6 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" - dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.3" - leven "^2.1.0" - pretty-format "^20.0.3" - jest-validate@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" @@ -11200,12 +10431,6 @@ jest@26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" -jest@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" - dependencies: - jest-cli "^20.0.4" - js-base64@^2.1.8, js-base64@^2.3.2: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" @@ -11222,7 +10447,7 @@ js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.13.1, js-yaml@^3.7.0: +js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" dependencies: @@ -11265,34 +10490,6 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -11369,10 +10566,6 @@ json3@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -11589,10 +10782,6 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -11623,19 +10812,6 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -liftoff@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" - dependencies: - extend "^3.0.0" - findup-sync "^2.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -11748,42 +10924,10 @@ lodash-es@4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -11812,12 +10956,6 @@ lodash.difference@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - dependencies: - lodash._root "^3.0.0" - lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" @@ -11830,14 +10968,6 @@ lodash.get@^4.0.0, lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -11850,14 +10980,6 @@ lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -11866,10 +10988,6 @@ lodash.merge@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - lodash.some@^4.2.2: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" @@ -11878,20 +10996,6 @@ lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -11899,13 +11003,6 @@ lodash.template@^4.5.0: lodash._reinterpolate "^3.0.0" lodash.templatesettings "^4.0.0" -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.templatesettings@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" @@ -11928,7 +11025,7 @@ lodash.zip@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" -lodash@4.17.21, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~1.0.1, lodash@~4.17.10, lodash@~4.17.20, lodash@~4.17.4: +lodash@4.17.21, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10, lodash@~4.17.20, lodash@~4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -12283,10 +11380,6 @@ merge2@^1.2.3, merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -12295,24 +11388,6 @@ microevent.ts@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -12430,7 +11505,7 @@ minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@3.0.4, minimatch@^2.0.1, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~0.2.11, minimatch@~3.0.2: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -12444,7 +11519,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.5, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: +minimist@1.2.5, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -12591,12 +11666,6 @@ multimatch@^4.0.0: arrify "^2.0.1" minimatch "^3.0.4" -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" - mute-stdout@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" @@ -12653,10 +11722,6 @@ napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" -natives@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -12836,16 +11901,6 @@ node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" -node-notifier@^5.0.2: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - node-notifier@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" @@ -12941,7 +11996,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -13024,10 +12079,6 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -13036,10 +12087,6 @@ oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -13139,13 +12186,6 @@ object.map@^1.0.0: for-own "^1.0.0" make-iterator "^1.0.0" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -13194,12 +12234,6 @@ once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: dependencies: wrappy "1" -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -13265,18 +12299,6 @@ ora@^5.0.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" -orchestrator@^0.3.0: - version "0.3.8" - resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" - dependencies: - end-of-stream "~0.1.5" - sequencify "~0.0.7" - stream-consume "~0.1.0" - -ordered-read-streams@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" - ordered-read-streams@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" @@ -13303,7 +12325,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -13480,15 +12502,6 @@ parse-filepath@^1.0.1: map-cache "^0.2.0" path-root "^0.1.1" -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -13527,10 +12540,6 @@ parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -13568,7 +12577,7 @@ path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -13584,10 +12593,6 @@ path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" -path-parse@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -13688,7 +12693,7 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -14090,13 +13095,6 @@ pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" -pretty-format@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" - dependencies: - ansi-regex "^2.1.1" - ansi-styles "^3.0.0" - pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -14150,7 +13148,7 @@ prismjs@~1.17.0: optionalDependencies: clipboard "^2.0.0" -private@^0.1.8, private@~0.1.5: +private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -15065,24 +14063,6 @@ read-pkg@^5.2.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdir-glob@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" @@ -15239,12 +14219,6 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -15428,10 +14402,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" @@ -15448,7 +14418,7 @@ replace-homedir@^1.0.0: is-absolute "^1.0.0" remove-trailing-separator "^1.1.0" -request@^2.79.0, request@^2.83.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@^2.83.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" dependencies: @@ -15623,7 +14593,7 @@ rgb2hex@^0.1.0: version "0.1.10" resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.10.tgz#4fdd432665273e2d5900434940ceba0a04c8a8a8" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" dependencies: @@ -15797,18 +14767,6 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - sanitize-filename@1.6.3, sanitize-filename@^1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" @@ -15835,7 +14793,7 @@ sass-loader@7.1.0: pify "^3.0.0" semver "^5.5.0" -sax@^1.2.1, sax@~1.2.4: +sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -15919,7 +14877,7 @@ semver-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -15931,10 +14889,6 @@ semver@7.3.2, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" -semver@^4.1.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -15967,10 +14921,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -sequencify@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" - serialize-error@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-4.1.0.tgz#63e1e33ede20bcd89d9f0528ea4c15fbf0f2b78a" @@ -16289,12 +15239,6 @@ source-map-support@0.5.19, source-map-support@^0.5.9, source-map-support@~0.5.12 buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -16316,7 +15260,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -16568,10 +15512,6 @@ stream-browserify@^3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" -stream-consume@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -16609,12 +15549,6 @@ string-hash@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" -string-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" - dependencies: - strip-ansi "^3.0.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -16622,10 +15556,6 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-natural-compare@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" - string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -16716,10 +15646,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -16760,23 +15686,16 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" - dependencies: - first-chunk-stream "^1.0.0" - is-utf8 "^0.2.0" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -16910,7 +15829,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.2, supports-color@^3.2.3: +supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -16982,7 +15901,7 @@ svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" -symbol-tree@^3.2.1, symbol-tree@^3.2.4: +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -17134,16 +16053,6 @@ terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -17176,10 +16085,6 @@ thread-loader@2.1.3: loader-utils "^1.1.0" neo-async "^2.6.0" -throat@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -17195,13 +16100,6 @@ through2-filter@^3.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@^0.6.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - through2@^2.0.0, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -17220,12 +16118,6 @@ through@2, through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -tildify@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" - dependencies: - os-homedir "^1.0.0" - time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" @@ -17333,10 +16225,6 @@ to-camel-case@1.0.0: dependencies: to-space-case "^1.0.0" -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -17397,13 +16285,6 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@^2.3.2, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -17412,16 +16293,19 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" dependencies: punycode "^2.1.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - transform-loader@0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/transform-loader/-/transform-loader-0.2.4.tgz#e5c87877ba96d51d3f225368587b46e226d1cec9" @@ -17469,10 +16353,6 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - trim-trailing-lines@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" @@ -17823,10 +16703,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" - unique-stream@^2.0.2: version "2.3.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" @@ -18057,10 +16933,6 @@ use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - utf-8-validate@5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3" @@ -18135,12 +17007,6 @@ v8-to-istanbul@^7.0.0: convert-source-map "^1.6.0" source-map "^0.7.3" -v8flags@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" - v8flags@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" @@ -18224,19 +17090,6 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vinyl-fs@^0.3.0: - version "0.3.14" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" - dependencies: - defaults "^1.0.0" - glob-stream "^3.1.5" - glob-watcher "^0.0.6" - graceful-fs "^3.0.0" - mkdirp "^0.5.0" - strip-bom "^1.0.0" - through2 "^0.6.1" - vinyl "^0.4.0" - vinyl-fs@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" @@ -18271,21 +17124,6 @@ vinyl-sourcemap@^1.1.0: remove-bom-buffer "^3.0.0" vinyl "^2.0.0" -vinyl@^0.4.0: - version "0.4.6" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" - dependencies: - clone "^0.2.0" - clone-stats "^0.0.1" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - vinyl@^2.0.0, vinyl@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" @@ -18297,7 +17135,7 @@ vinyl@^2.0.0, vinyl@^2.1.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vlq@^0.2.1, vlq@^0.2.2: +vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" @@ -18341,10 +17179,6 @@ warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" - watchpack-chokidar2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" @@ -18437,14 +17271,6 @@ webdriverio@^6.9.1: serialize-error "^8.0.0" webdriver "6.12.1" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - -webidl-conversions@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -18568,7 +17394,7 @@ websocket-extensions@>=0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" dependencies: @@ -18582,13 +17408,6 @@ whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" -whatwg-url@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" @@ -18619,7 +17438,7 @@ which-pm-runs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" -which@1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -18657,7 +17476,7 @@ wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -worker-farm@^1.3.1, worker-farm@^1.7.0: +worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" dependencies: @@ -18735,10 +17554,6 @@ xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -18761,7 +17576,7 @@ xregexp@^4.2.4: dependencies: "@babel/runtime-corejs3" "^7.8.3" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -18835,7 +17650,7 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^7.0.2, yargs@^7.1.0: +yargs@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.1.tgz#67f0ef52e228d4ee0d6311acede8850f53464df6" dependencies: From 981d63e4a3aa2e6b13c61661d5983db13f6d835f Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:22:25 +0000 Subject: [PATCH 018/204] [DDW-773] installed ts packages, and packages required for migration --- package.json | 13 + yarn.lock | 1620 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1617 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 6e78778b40..b878ea9216 100644 --- a/package.json +++ b/package.json @@ -76,9 +76,11 @@ "@babel/plugin-proposal-decorators": "7.16.4", "@babel/plugin-proposal-object-rest-spread": "7.2.0", "@babel/plugin-transform-runtime": "7.2.0", + "@babel/plugin-transform-typescript": "^7.16.8", "@babel/polyfill": "7.0.0", "@babel/preset-env": "7.16.4", "@babel/preset-react": "7.0.0", + "@babel/preset-typescript": "^7.16.7", "@babel/register": "7.0.0", "@dump247/storybook-state": "1.6.1", "@storybook/addon-actions": "5.3.14", @@ -89,9 +91,17 @@ "@storybook/react": "5.3.14", "@testing-library/jest-dom": "5.15.1", "@testing-library/react": "12.1.2", + "@types/aes-js": "^3.1.1", + "@types/node": "^17.0.12", + "@types/qrcode.react": "^1.0.2", + "@types/react": "^17.0.38", + "@types/react-svg-inline": "^2.1.3", + "@typescript-eslint/eslint-plugin": "^5.10.1", + "@typescript-eslint/parser": "^5.10.1", "asar": "2.1.0", "autodll-webpack-plugin": "0.4.2", "axios": "0.24.0", + "babel-eslint": "^10.1.0", "babel-loader": "8.0.4", "babel-plugin-react-intl": "3.0.1", "bufferutil": "4.0.1", @@ -163,6 +173,9 @@ "thread-loader": "2.1.3", "timemachine": "0.3.2", "transform-loader": "0.2.4", + "ts-migrate": "^0.1.27", + "ts-node": "^10.4.0", + "typescript": "^4.5.5", "url-loader": "2.0.1", "utf-8-validate": "5.0.2", "webdriverio": "5.18.7", diff --git a/yarn.lock b/yarn.lock index ea1b14f906..b41b990971 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,6 +17,12 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" @@ -35,6 +41,12 @@ dependencies: "@babel/highlight" "^7.16.0" +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + dependencies: + "@babel/highlight" "^7.16.7" + "@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" @@ -47,6 +59,10 @@ version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" +"@babel/compat-data@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + "@babel/core@7.16.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" @@ -88,6 +104,46 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.6": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@^7.13.16": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/eslint-parser@7.16.3": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz#2a6b1702f3f5aea48e00cea5a5bcc241c437e459" @@ -112,6 +168,14 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -124,6 +188,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" @@ -138,6 +208,13 @@ "@babel/helper-explode-assignable-expression" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-builder-react-jsx-experimental@^7.10.4", "@babel/helper-builder-react-jsx-experimental@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz#4ea43dd63857b0a35cd1f1b161dc29b43414e79f" @@ -172,6 +249,15 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.2.1": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -194,6 +280,30 @@ "@babel/helper-replace-supers" "^7.16.0" "@babel/helper-split-export-declaration" "^7.16.0" +"@babel/helper-create-class-features-plugin@^7.16.10": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-regexp-features-plugin@7.16.0", "@babel/helper-create-regexp-features-plugin@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" @@ -209,6 +319,13 @@ "@babel/helper-regex" "^7.10.4" regexpu-core "^4.7.0" +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^4.7.1" + "@babel/helper-define-map@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" @@ -230,6 +347,25 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression@^7.10.4": version "7.11.4" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" @@ -242,6 +378,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -258,6 +400,14 @@ "@babel/template" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -270,6 +420,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -282,6 +438,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" @@ -294,6 +456,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" @@ -306,6 +474,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" @@ -331,6 +505,19 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" @@ -343,6 +530,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -351,6 +544,10 @@ version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" +"@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + "@babel/helper-regex@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" @@ -374,6 +571,14 @@ "@babel/helper-wrap-function" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + "@babel/helper-replace-supers@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" @@ -392,6 +597,16 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-simple-access@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" @@ -405,6 +620,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" @@ -429,6 +650,12 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" @@ -437,10 +664,18 @@ version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + "@babel/helper-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -459,6 +694,15 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + "@babel/helpers@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" @@ -475,6 +719,14 @@ "@babel/traverse" "^7.16.3" "@babel/types" "^7.16.0" +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -491,20 +743,58 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" +"@babel/parser@^7.1.6": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" +"@babel/parser@^7.13.16": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + +"@babel/parser@^7.16.10": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + +"@babel/parser@^7.16.12": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + +"@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + +"@babel/parser@^7.7.0": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": version "7.16.2" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" @@ -513,6 +803,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.0" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" @@ -529,6 +827,14 @@ "@babel/helper-remap-async-to-generator" "^7.16.4" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@7.2.1": version "7.2.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz#c734a53e0a1ec40fe5c22ee5069d26da3b187d05" @@ -536,6 +842,13 @@ "@babel/helper-create-class-features-plugin" "^7.2.1" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-proposal-class-properties@^7.1.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.7.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" @@ -543,6 +856,13 @@ "@babel/helper-create-class-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-proposal-class-properties@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" @@ -550,6 +870,13 @@ "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-proposal-class-static-block@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" @@ -558,6 +885,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-decorators@7.16.4": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.4.tgz#9b35ce0716425a93b978e79099e5f7ba217c1364" @@ -580,6 +915,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-namespace-from@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" @@ -594,6 +936,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" @@ -608,6 +957,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-logical-assignment-operators@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" @@ -622,6 +978,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" @@ -629,6 +992,13 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" @@ -636,6 +1006,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" @@ -650,6 +1027,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" @@ -657,6 +1041,16 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.6.2": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" @@ -675,6 +1069,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.0" +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" @@ -689,6 +1093,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" @@ -697,6 +1108,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-optional-chaining@^7.13.12": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" @@ -705,6 +1124,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" @@ -719,6 +1146,13 @@ "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-proposal-private-property-in-object@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" @@ -728,6 +1162,15 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" @@ -742,6 +1185,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-unicode-property-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -796,6 +1246,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-flow@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -868,6 +1324,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-arrow-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" @@ -880,6 +1342,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-async-to-generator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" @@ -896,6 +1364,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.16.0" +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" @@ -908,6 +1384,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-block-scoping@^7.10.4": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" @@ -920,6 +1402,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-classes@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" @@ -945,6 +1433,19 @@ "@babel/helper-split-export-declaration" "^7.16.0" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" @@ -957,6 +1458,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-destructuring@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" @@ -969,6 +1476,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" @@ -983,6 +1496,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-dotall-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-duplicate-keys@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" @@ -995,6 +1515,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" @@ -1009,6 +1535,13 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-flow-strip-types@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" @@ -1016,6 +1549,13 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.10.4" +"@babel/plugin-transform-flow-strip-types@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/plugin-transform-for-of@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" @@ -1028,6 +1568,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" @@ -1042,6 +1588,14 @@ "@babel/helper-function-name" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" @@ -1054,6 +1608,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-member-expression-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" @@ -1066,6 +1626,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-modules-amd@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" @@ -1082,6 +1648,14 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" @@ -1091,6 +1665,15 @@ "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" @@ -1100,6 +1683,15 @@ "@babel/helper-simple-access" "^7.16.0" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" @@ -1119,6 +1711,16 @@ "@babel/helper-validator-identifier" "^7.15.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" @@ -1133,6 +1735,13 @@ "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" @@ -1145,6 +1754,12 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.0" +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/plugin-transform-new-target@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" @@ -1157,6 +1772,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-object-super@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" @@ -1171,6 +1792,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.16.0" +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/plugin-transform-parameters@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" @@ -1184,6 +1812,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-property-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" @@ -1196,6 +1830,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.2.0", "@babel/plugin-transform-react-constant-elements@^7.6.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz#0f485260bf1c29012bb973e7e404749eaac12c9e" @@ -1258,6 +1898,12 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + dependencies: + regenerator-transform "^0.14.2" + "@babel/plugin-transform-reserved-words@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" @@ -1270,6 +1916,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-runtime@7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" @@ -1291,6 +1943,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-spread@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" @@ -1305,6 +1963,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-transform-sticky-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" @@ -1318,6 +1983,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-template-literals@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" @@ -1331,6 +2002,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-typeof-symbol@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" @@ -1343,6 +2020,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typescript@^7.16.7": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" + +"@babel/plugin-transform-typescript@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/plugin-transform-unicode-escapes@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" @@ -1355,6 +2054,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-unicode-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" @@ -1369,6 +2074,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/polyfill@7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff" @@ -1455,6 +2167,85 @@ core-js-compat "^3.19.1" semver "^6.3.0" +"@babel/preset-env@^7.1.6": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + "@babel/preset-env@^7.4.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" @@ -1535,6 +2326,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-flow-strip-types" "^7.10.4" +"@babel/preset-flow@^7.13.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-flow-strip-types" "^7.16.7" + "@babel/preset-modules@^0.1.3": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" @@ -1577,6 +2376,30 @@ "@babel/plugin-transform-react-jsx-source" "^7.10.4" "@babel/plugin-transform-react-pure-annotations" "^7.10.4" +"@babel/preset-typescript@^7.1.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" + +"@babel/preset-typescript@^7.13.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" + +"@babel/preset-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/register@7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" @@ -1589,6 +2412,26 @@ pirates "^4.0.0" source-map-support "^0.5.9" +"@babel/register@^7.0.0": + version "7.16.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.9.tgz#fcfb23cfdd9ad95c9771e58183de83b513857806" + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/register@^7.13.16": + version "7.16.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.9.tgz#fcfb23cfdd9ad95c9771e58183de83b513857806" + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + "@babel/runtime-corejs3@^7.10.2": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz#1e25de4fa994c57c18e5fdda6cc810dac70f5590" @@ -1631,6 +2474,14 @@ "@babel/parser" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" @@ -1659,6 +2510,66 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.16.10": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.7.0": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" @@ -1674,6 +2585,27 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.16.7": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.7.0": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1695,6 +2627,16 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + "@dump247/storybook-state@1.6.1": version "1.6.1" resolved "https://registry.yarnpkg.com/@dump247/storybook-state/-/storybook-state-1.6.1.tgz#ac805dbad22bba380ae4f74e741189ec6c68cd4a" @@ -1839,6 +2781,32 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + "@icons/material@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" @@ -2805,6 +3773,41 @@ varuint-bitcoin "^1.1.2" wif "^2.0.6" +"@ts-morph/bootstrap@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@ts-morph/bootstrap/-/bootstrap-0.9.1.tgz#4761cac8d9e5c7d2d7cdb120f6dda027c2b831cd" + dependencies: + "@ts-morph/common" "~0.9.0" + +"@ts-morph/common@~0.9.0": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.9.2.tgz#fc63ed4f8d3a45e4ed6849fe20a57f4f2baecc5d" + dependencies: + fast-glob "^3.2.5" + minimatch "^3.0.4" + mkdirp "^1.0.4" + path-browserify "^1.0.1" + +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + +"@types/aes-js@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/aes-js/-/aes-js-3.1.1.tgz#34b3978122310c135de4b377270d1d65676fae28" + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -2893,7 +3896,7 @@ version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" -"@types/json-schema@^7.0.7": +"@types/json-schema@^7.0.7", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -2945,6 +3948,10 @@ version "14.17.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.4.tgz#218712242446fc868d0e007af29a4408c7765bc0" +"@types/node@^17.0.12": + version "17.0.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.12.tgz#f7aa331b27f08244888c47b7df126184bc2339c5" + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -2973,6 +3980,12 @@ version "1.5.4" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" +"@types/qrcode.react@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/qrcode.react/-/qrcode.react-1.0.2.tgz#f892432cc41b5dac52e3ca8873b717c8bfea6002" + dependencies: + "@types/react" "*" + "@types/reach__router@^1.2.3": version "1.3.6" resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.6.tgz#413417ce74caab331c70ce6a03a4c825188e4709" @@ -2986,6 +3999,12 @@ dependencies: "@types/react" "*" +"@types/react-svg-inline@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@types/react-svg-inline/-/react-svg-inline-2.1.3.tgz#e76f2141de6a92c66597b81475255d86efd99d76" + dependencies: + "@types/react" "*" + "@types/react-textarea-autosize@^4.3.3": version "4.3.5" resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.5.tgz#6c4d2753fa1864c98c0b2b517f67bb1f6e4c46de" @@ -2999,12 +4018,24 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^17.0.38": + version "17.0.38" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" dependencies: "@types/node" "*" +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -3081,6 +4112,20 @@ dependencies: "@types/node" "*" +"@typescript-eslint/eslint-plugin@^5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz#870195d0f2146b36d11fc71131b75aba52354c69" + dependencies: + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/type-utils" "5.10.1" + "@typescript-eslint/utils" "5.10.1" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@^4.0.1": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" @@ -3092,6 +4137,15 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/parser@^5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.1.tgz#4ce9633cc33fc70bc13786cb793c1a76fe5ad6bd" + dependencies: + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/typescript-estree" "5.10.1" + debug "^4.3.2" + "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" @@ -3099,10 +4153,29 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" +"@typescript-eslint/scope-manager@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz#f0539c73804d2423506db2475352a4dec36cd809" + dependencies: + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/visitor-keys" "5.10.1" + +"@typescript-eslint/type-utils@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz#5e526c00142585e40ab1503e83f1ff608c367405" + dependencies: + "@typescript-eslint/utils" "5.10.1" + debug "^4.3.2" + tsutils "^3.21.0" + "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" +"@typescript-eslint/types@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.1.tgz#dca9bd4cb8c067fc85304a31f38ec4766ba2d1ea" + "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" @@ -3115,6 +4188,29 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz#b268e67be0553f8790ba3fe87113282977adda15" + dependencies: + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/visitor-keys" "5.10.1" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.1.tgz#fa682a33af47080ba2c4368ee0ad2128213a1196" + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/typescript-estree" "5.10.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" @@ -3122,6 +4218,13 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz#29102de692f59d7d34ecc457ed59ab5fc558010b" + dependencies: + "@typescript-eslint/types" "5.10.1" + eslint-visitor-keys "^3.0.0" + "@wdio/config@5.18.4": version "5.18.4" resolved "https://registry.yarnpkg.com/@wdio/config/-/config-5.18.4.tgz#cabbac2f42bb1f8ac768f79d0e7671976d97d30e" @@ -3354,6 +4457,10 @@ acorn-jsx@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + acorn-node@^1.3.0: version "1.8.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" @@ -3366,7 +4473,11 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" -acorn@6.4.2, acorn@^6.4.1, acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0, acorn@^8.2.4: +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + +acorn@6.4.2, acorn@^6.4.1, acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0, acorn@^8.2.4, acorn@^8.4.1: version "6.4.2" resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" @@ -3453,6 +4564,15 @@ ajv@^8.0.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ajv@^8.6.3: version "8.8.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" @@ -3645,6 +4765,10 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3898,6 +5022,16 @@ ast-types@0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" +ast-types@0.11.7: + version "0.11.7" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" + +ast-types@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + dependencies: + tslib "^2.0.1" + ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -4034,6 +5168,21 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-helper-evaluate-path@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" @@ -4220,6 +5369,13 @@ babel-plugin-polyfill-corejs3@^0.4.0: "@babel/helper-define-polyfill-provider" "^0.3.0" core-js-compat "^3.18.0" +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.20.0" + babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" @@ -4747,6 +5903,16 @@ browserslist@^4.17.5, browserslist@^4.18.1: node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + bs58@4.0.1, bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -5043,6 +6209,10 @@ caniuse-lite@^1.0.30001280: version "1.0.30001283" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b" +caniuse-lite@^1.0.30001286: + version "1.0.30001303" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz#9b168e4f43ccfc372b86f4bc5a551d9b909c95c9" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5145,7 +6315,7 @@ chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@4.1.2: +chalk@4.1.2, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" dependencies: @@ -5418,6 +6588,14 @@ clone-deep@^2.0.1: kind-of "^6.0.0" shallow-clone "^1.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-regexp@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" @@ -5742,6 +6920,20 @@ core-js-compat@^3.18.0, core-js-compat@^3.19.1: browserslist "^4.18.1" semver "7.0.0" +core-js-compat@^3.20.0: + version "3.20.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + +core-js-compat@^3.20.2: + version "3.20.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + core-js-compat@^3.6.2: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" @@ -5862,6 +7054,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest-runner@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/create-jest-runner/-/create-jest-runner-0.5.3.tgz#1387e2ce70b08e4c989ae55f677005b64f9ba97b" + dependencies: + chalk "^2.4.2" + jest-worker "^24.0.0" + throat "^4.1.0" + create-react-context@0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca" @@ -5876,6 +7076,10 @@ create-react-context@0.3.0, create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + cross-env@7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.2.tgz#bd5ed31339a93a3418ac4f3ca9ca3403082ae5f9" @@ -6307,7 +7511,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.1: +debug@^4.3.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" dependencies: @@ -6918,6 +8122,10 @@ electron-to-chromium@^1.3.896: version "1.4.4" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.4.tgz#57311918524c1a26878c330537f967804d43788a" +electron-to-chromium@^1.4.17: + version "1.4.54" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz#69005d39ed11542e1bcb65ec1a98e44d39527ba8" + electron@13.6.3: version "13.6.3" resolved "https://registry.yarnpkg.com/electron/-/electron-13.6.3.tgz#c0217178807d3e0b2175c49dbe33ea8dac447e73" @@ -7430,7 +8638,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -7438,6 +8646,10 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" +eslint-visitor-keys@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" + eslint@7.10.0: version "7.10.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" @@ -7480,6 +8692,51 @@ eslint@7.10.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^7.14.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + esm@3.2.25, esm@^3.2.25: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" @@ -7492,6 +8749,14 @@ espree@^7.3.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" +espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -7510,6 +8775,12 @@ esquery@^1.2.0: dependencies: estraverse "^5.1.0" +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + dependencies: + estraverse "^5.1.0" + esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -7789,7 +9060,7 @@ fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -7815,6 +9086,26 @@ fast-glob@^3.1.1, fast-glob@^3.2.4: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.2.5: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -7935,6 +9226,12 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + dependencies: + flat-cache "^3.0.4" + file-loader@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" @@ -8010,7 +9307,7 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-cache-dir@^2.1.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" dependencies: @@ -8120,10 +9417,21 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + flora-colossus@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93" @@ -8131,6 +9439,10 @@ flora-colossus@^1.0.0: debug "^4.1.1" fs-extra "^7.0.0" +flow-parser@0.*: + version "0.170.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.170.0.tgz#52cac19fd884c41894f39368bdf384183a597b3b" + flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -8555,7 +9867,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" dependencies: @@ -8690,6 +10002,18 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + dependencies: + type-fest "^0.20.2" + +globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + dependencies: + type-fest "^0.20.2" + globalthis@^1.0.0, globalthis@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" @@ -8730,6 +10054,17 @@ globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -9306,6 +10641,10 @@ ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -9726,6 +11065,12 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" @@ -10408,6 +11753,13 @@ jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" +jest-worker@^24.0.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + jest-worker@^25.4.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" @@ -10458,6 +11810,53 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jscodeshift@^0.13.0: + version "0.13.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.13.1.tgz#69bfe51e54c831296380585c6d9e733512aecdef" + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" + babel-core "^7.0.0-bridge.0" + chalk "^4.1.2" + flow-parser "0.*" + graceful-fs "^4.2.4" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.20.4" + temp "^0.8.4" + write-file-atomic "^2.3.0" + +jscodeshift@^0.6.3: + version "0.6.4" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e" + dependencies: + "@babel/core" "^7.1.6" + "@babel/parser" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/preset-env" "^7.1.6" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-typescript" "^7.1.0" + "@babel/register" "^7.0.0" + babel-core "^7.0.0-bridge.0" + colors "^1.1.2" + flow-parser "0.*" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.16.1" + temp "^0.8.1" + write-file-atomic "^2.3.0" + jsdom@^16.4.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -10536,6 +11935,10 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-schema@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.3.0.tgz#90a9c5054bd065422c00241851ce8d59475b701b" + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -10566,6 +11969,12 @@ json3@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" +json5-writer@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/json5-writer/-/json5-writer-0.1.8.tgz#98e1934ef6002f8ac12f36438e2b39c49af213fd" + dependencies: + jscodeshift "^0.6.3" + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -10984,7 +12393,7 @@ lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.merge@^4.6.1: +lodash.merge@^4.6.1, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -11017,6 +12426,10 @@ lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -11042,6 +12455,14 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-update@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-3.4.0.tgz#3b9a71e00ac5b1185cc193a36d654581c48f97b9" + dependencies: + ansi-escapes "^3.2.0" + cli-cursor "^2.1.0" + wrap-ansi "^5.0.0" + loglevel-plugin-prefix@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" @@ -11165,6 +12586,10 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -11376,7 +12801,7 @@ merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -11413,6 +12838,13 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -11593,7 +13025,7 @@ mkdirp@0.5.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkd dependencies: minimist "^1.2.5" -mkdirp@1.0.4, mkdirp@^1.0.3: +mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -11789,7 +13221,7 @@ node-addon-api@^3.0.0, node-addon-api@^3.0.2: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" -node-dir@^0.1.10: +node-dir@^0.1.10, node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" dependencies: @@ -12524,6 +13956,10 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + parse-node-version@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" @@ -12559,6 +13995,10 @@ path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -12693,6 +14133,10 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" +picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -13117,6 +14561,12 @@ pretty-hrtime@^1.0.0, pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + dependencies: + parse-ms "^2.1.0" + pretty-quick@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.0.2.tgz#7ed460f7e43a647b1044ad8b7f41a0c8a7f1c51c" @@ -14098,6 +15548,24 @@ recast@^0.14.7: private "~0.1.5" source-map "~0.6.1" +recast@^0.16.1: + version "0.16.2" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" + dependencies: + ast-types "0.11.7" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.20.4: + version "0.20.5" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" + dependencies: + ast-types "0.14.2" + esprima "~4.0.0" + source-map "~0.6.1" + tslib "^2.0.1" + recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -14237,6 +15705,10 @@ regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + regexpu-core@^4.7.0: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" @@ -14599,7 +16071,7 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: dependencies: glob "^7.1.3" -rimraf@2.6.3: +rimraf@2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: @@ -15019,6 +16491,12 @@ shallow-clone@^1.0.0: kind-of "^5.0.0" mixin-object "^2.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + dependencies: + kind-of "^6.0.2" + shallow-copy@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" @@ -15239,7 +16717,7 @@ source-map-support@0.5.19, source-map-support@^0.5.9, source-map-support@~0.5.12 buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.6: +source-map-support@^0.5.16, source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" dependencies: @@ -15587,6 +17065,14 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + "string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" @@ -15686,6 +17172,12 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + dependencies: + ansi-regex "^5.0.1" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -15930,6 +17422,16 @@ table@^6.0.1: slice-ansi "^4.0.0" string-width "^4.2.0" +table@^6.0.9: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + tapable@^0.1.8: version "0.1.10" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" @@ -16006,6 +17508,18 @@ telejson@^3.2.0: lodash "^4.17.15" memoizerific "^1.11.3" +temp@^0.8.1: + version "0.8.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + dependencies: + rimraf "~2.6.2" + +temp@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + dependencies: + rimraf "~2.6.2" + term-size@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" @@ -16085,6 +17599,10 @@ thread-loader@2.1.3: loader-utils "^1.1.0" neo-async "^2.6.0" +throat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -16389,6 +17907,52 @@ ts-essentials@^2.0.3: version "2.0.12" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" +ts-migrate-plugins@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/ts-migrate-plugins/-/ts-migrate-plugins-0.1.27.tgz#e7244d1d56661e51b07258944cede065bd0605f4" + dependencies: + eslint "^7.14.0" + jscodeshift "^0.13.0" + json-schema "^0.3.0" + ts-migrate-server "^0.1.27" + +ts-migrate-server@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/ts-migrate-server/-/ts-migrate-server-0.1.27.tgz#daa95b01634a651f4dd5ff90d35b93791e564905" + dependencies: + "@ts-morph/bootstrap" "^0.9.1" + pretty-ms "^7.0.1" + updatable-log "^0.2.0" + +ts-migrate@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/ts-migrate/-/ts-migrate-0.1.27.tgz#4b21f6eedcb33734579afd29df781cab994387c0" + dependencies: + create-jest-runner "^0.5.3" + json5 "^2.1.1" + json5-writer "^0.1.8" + ts-migrate-plugins "^0.1.27" + ts-migrate-server "^0.1.27" + updatable-log "^0.2.0" + yargs "^15.0.2" + +ts-node@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + yn "3.1.1" + ts-pnp@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -16525,6 +18089,10 @@ typeforce@^1.18.0: version "1.18.0" resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" +typescript@^4.5.5: + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + ua-parser-js@^0.7.18: version "0.7.27" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.27.tgz#b54f8ce9eb6c7abf3584edeaf9a3d8b3bd92edba" @@ -16826,6 +18394,14 @@ upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" +updatable-log@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/updatable-log/-/updatable-log-0.2.0.tgz#8adfe35dd744bd87e8bf217425e4e8bb81b6f3c6" + dependencies: + chalk "^2.4.2" + figures "^3.0.0" + log-update "^3.3.0" + update-notifier@^4.0.0: version "4.1.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" @@ -17495,7 +19071,7 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrap-ansi@^5.1.0: +wrap-ansi@^5.0.0, wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" dependencies: @@ -17515,6 +19091,14 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" @@ -17634,7 +19218,7 @@ yargs@^13.3.0, yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.4.1: +yargs@^15.0.2, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" dependencies: @@ -17681,6 +19265,10 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + zip-stream@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" From 4a657ee9f3c5e80eded76e41c00be35422041712 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:23:27 +0000 Subject: [PATCH 019/204] [DDW-773] updated babelrc configuration --- .babelrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.babelrc b/.babelrc index 71efb0f332..b61f60aa8d 100755 --- a/.babelrc +++ b/.babelrc @@ -2,7 +2,7 @@ "presets": [ "@babel/preset-env", "@babel/preset-react", - "@babel/preset-flow" + "@babel/preset-typescript" ], "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true }], From a4bd1fd5b41bd3e5c80e441657791fc0f7e50f1b Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:23:55 +0000 Subject: [PATCH 020/204] [DDW-773] updated package.json scripts to use typescript --- package.json | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index b878ea9216..e1d91bfe80 100644 --- a/package.json +++ b/package.json @@ -7,24 +7,24 @@ "scripts": { "build": "gulp build", "build:electron": "electron-rebuild -w usb --useCache -s --debug", - "check:all": "yarn prettier:check && yarn lint && yarn flow:test && yarn stylelint && yarn lockfile:check && yarn manage:translations", + "check:all": "yarn prettier:check && yarn lint && yarn compile && yarn stylelint && yarn lockfile:check && yarn manage:translations", "start": "gulp start", "start:dev": "NODE_ENV=development gulp start", "dev": "IS_WATCH_MODE=true gulp dev", "test": "NODE_ENV=test yarn build && yarn test:unit && yarn test:e2e:fail-fast", "test:jest": "NODE_OPTIONS=--experimental-vm-modules jest", - "test:generate:report": "node tests/reporter.js", - "test:unit": "yarn cucumber:run --require 'tests/**/unit/**/*.js' --tags '@unit and not @skip and not @wip'", - "test:unit:rerun": "yarn cucumber:rerun --require 'tests/**/unit/**/*.js' --tags '@unit and not @skip and not @wip'", + "test:generate:report": "ts-node tests/reporter.ts", + "test:unit": "yarn cucumber:run --require 'tests/**/unit/**/*.ts' --tags '@unit and not @skip and not @wip'", + "test:unit:rerun": "yarn cucumber:rerun --require 'tests/**/unit/**/*.ts' --tags '@unit and not @skip and not @wip'", "test:unit:watch": "nodemon --watch source --watch tests --exec \"yarn test:unit --tags '@unit and @watch'\"", - "test:unit:unbound": "yarn cucumber:run --require 'tests/**/unit/**/*.js' --tags '@unbound and not @skip and not @wip'", - "test:e2e": "yarn cucumber:run --require 'tests/setup-e2e.js' --require 'tests/**/e2e/**/*.js' --tags '@e2e and not @skip and not @wip'", - "test:e2e:fail-fast": "yarn cucumber:fail-fast --require 'tests/setup-e2e.js' --require 'tests/**/e2e/**/*.js' --tags '@e2e and not @skip and not @wip'", - "test:e2e:rerun": "yarn cucumber:rerun --require 'tests/setup-e2e.js' --require 'tests/**/e2e/**/*.js' --tags '@e2e and not @skip and not @wip'", - "test:e2e:rerun:fail-fast": "yarn cucumber:rerun --require 'tests/setup-e2e.js' --require 'tests/**/e2e/**/*.js' --tags '@e2e and not @skip and not @wip'", + "test:unit:unbound": "yarn cucumber:run --require 'tests/**/unit/**/*.ts' --tags '@unbound and not @skip and not @wip'", + "test:e2e": "yarn cucumber:run --require 'tests/setup-e2e.ts' --require 'tests/**/e2e/**/*.ts' --tags '@e2e and not @skip and not @wip'", + "test:e2e:fail-fast": "yarn cucumber:fail-fast --require 'tests/setup-e2e.ts' --require 'tests/**/e2e/**/*.ts' --tags '@e2e and not @skip and not @wip'", + "test:e2e:rerun": "yarn cucumber:rerun --require 'tests/setup-e2e.ts' --require 'tests/**/e2e/**/*.ts' --tags '@e2e and not @skip and not @wip'", + "test:e2e:rerun:fail-fast": "yarn cucumber:rerun --require 'tests/setup-e2e.ts' --require 'tests/**/e2e/**/*.ts' --tags '@e2e and not @skip and not @wip'", "test:e2e:watch": "gulp test:e2e:watch", "test:e2e:watch:once": "KEEP_APP_AFTER_TESTS=true yarn test:e2e --tags '@e2e and @watch'", - "cucumber": "cross-env NODE_ENV=test cucumber-js --require 'tests/setup-common.js' --require-module @babel/register -f json:tests-report/report-data.json -f summary:tests-report/summary.log -f node_modules/cucumber-pretty:tests-report/results.log --format-options '{\"snippetInterface\": \"async-await\"}' -f node_modules/cucumber-pretty --format-options '{\"snippetInterface\": \"async-await\"}' -f rerun:tests/@rerun.txt", + "cucumber": "cross-env NODE_ENV=test cucumber-js --require 'tests/setup-common.ts' --require-module @babel/register -f json:tests-report/report-data.json -f summary:tests-report/summary.log -f node_modules/cucumber-pretty:tests-report/results.log --format-options '{\"snippetInterface\": \"async-await\"}' -f node_modules/cucumber-pretty --format-options '{\"snippetInterface\": \"async-await\"}' -f rerun:tests/@rerun.txt", "cucumber:run": "yarn cucumber tests", "cucumber:fail-fast": "yarn cucumber tests --fail-fast", "cucumber:rerun": "yarn cucumber tests-report/@rerun.txt", @@ -33,19 +33,19 @@ "package": "gulp build && cross-env NODE_ENV=production node -r @babel/register -r @babel/polyfill scripts/package.js", "package:all": "yarn package --all", "cleanup": "mop -v", - "lint": "eslint --format=node_modules/eslint-formatter-pretty source storybook utils *.js", - "flow:test": "flow; test $? -eq 0 -o $? -eq 2", + "lint": "eslint --format=node_modules/eslint-formatter-pretty source storybook utils --ext .ts,.tsx", + "compile": "tsc --noEmit", "prettier": "./node_modules/.bin/prettier \"**/*.*\"", "prettier:check": "yarn prettier --check", "prettier:format": "yarn prettier --write --loglevel warn", "stylelint": "./node_modules/.bin/stylelint \"**/*.scss\"", "stylelint:fix": "yarn stylelint --fix", - "manage:translations": "gulp purge:translations && gulp clear:cache && gulp build && node ./translations/translation-runner.js", + "manage:translations": "gulp purge:translations && gulp clear:cache && gulp build && ts-node ./translations/translation-runner.ts", "storybook": "start-storybook -p 6006 -c storybook --ci /", "storybook:build": "build-storybook -c storybook -o dist/storybook", - "themes:check:createTheme": "gulp build:themes && node -r esm ./dist/scripts/check.js", - "themes:update": "gulp build:themes && node -r esm ./dist/scripts/update.js && yarn prettier --loglevel warn --write source/renderer/app/themes/daedalus/*.js", - "themes:copy": "node -r @babel/register -r @babel/polyfill source/renderer/app/themes/utils/copyTheme.js && yarn prettier --loglevel warn --write source/renderer/app/themes/daedalus/*.js", + "themes:check:createTheme": "gulp build:themes && ts-node -r esm ./dist/scripts/check.js", + "themes:update": "gulp build:themes && ts-node -r esm ./dist/scripts/update.js && yarn prettier --loglevel warn --write source/renderer/app/themes/daedalus/*.ts", + "themes:copy": "ts-node -r @babel/register -r @babel/polyfill source/renderer/app/themes/utils/copyTheme.ts && yarn prettier --loglevel warn --write source/renderer/app/themes/daedalus/*.ts", "clear:cache": "gulp clear:cache", "nix:alonzo_purple": "NETWORK=alonzo_purple nix-shell --argstr nodeImplementation cardano --argstr cluster alonzo_purple", "nix:mainnet": "NETWORK=mainnet nix-shell --argstr nodeImplementation cardano --argstr cluster mainnet", @@ -54,15 +54,15 @@ "nix:shelley_qa": "NETWORK=shelley_qa nix-shell --argstr nodeImplementation cardano --argstr cluster shelley_qa", "nix:staging": "NETWORK=staging nix-shell --argstr nodeImplementation cardano --argstr cluster staging", "nix:testnet": "NETWORK=testnet nix-shell --argstr nodeImplementation cardano --argstr cluster testnet", - "byron:wallet:importer": "node utils/api-importer/byron-wallet-importer.js", - "shelley:wallet:importer": "node utils/api-importer/shelley-wallet-importer.js", - "mary:wallet:importer": "node utils/api-importer/mary-wallet-importer.js", - "itn:byron:wallet:importer": "node utils/api-importer/itn-byron-wallet-importer.js", - "itn:shelley:wallet:importer": "node utils/api-importer/itn-shelley-wallet-importer.js", - "yoroi:wallet:importer": "node utils/api-importer/yoroi-wallet-importer.js", - "create-news-verification-hashes": "node utils/create-news-verification-hashes/index.js", - "lockfile:check": "node utils/lockfile-checker/index.js --check", - "lockfile:fix": "node utils/lockfile-checker/index.js --fix" + "byron:wallet:importer": "ts-node utils/api-importer/byron-wallet-importer.ts", + "shelley:wallet:importer": "ts-node utils/api-importer/shelley-wallet-importer.ts", + "mary:wallet:importer": "ts-node utils/api-importer/mary-wallet-importer.ts", + "itn:byron:wallet:importer": "ts-node utils/api-importer/itn-byron-wallet-importer.ts", + "itn:shelley:wallet:importer": "ts-node utils/api-importer/itn-shelley-wallet-importer.ts", + "yoroi:wallet:importer": "ts-node utils/api-importer/yoroi-wallet-importer.ts", + "create-news-verification-hashes": "ts-node utils/create-news-verification-hashes/index.ts", + "lockfile:check": "ts-node utils/lockfile-checker/index.ts --check", + "lockfile:fix": "ts-node utils/lockfile-checker/index.ts --fix" }, "bin": { "electron": "./node_modules/.bin/electron" From 4d1a5ce422c250edf082dd9c5f61b10279c59da6 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:24:17 +0000 Subject: [PATCH 021/204] [DDW-773] added ts extensions to prettierignore --- .prettierignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.prettierignore b/.prettierignore index cd386dc5fa..523aeda201 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,6 +11,8 @@ # But not these file types !*.js +!*.ts +!*.tsx !*.scss !*.json From 54aa1ea78a140699e355bb412ffb7ca332900d3e Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:24:42 +0000 Subject: [PATCH 022/204] [DDW-773] added tsconfig --- tsconfig.json | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 tsconfig.json diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..c2430cfcc8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,102 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2019", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": ["dom"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "jsx": "react", /* Specify what JSX code is generated. */ + "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true, /* Enable importing .json files */ + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": false, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + "noImplicitThis": false, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +,"exclude": ["node_modules"] +} From ded6e4611473270fac206c891f5f3334b436234f Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:26:06 +0000 Subject: [PATCH 023/204] [DDW-773] updated webpack configurations --- source/main/webpack.config.js | 22 ++++++++++++++++++---- source/renderer/webpack.config.js | 18 +++++++++++++++--- storybook/webpack.config.js | 14 ++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/source/main/webpack.config.js b/source/main/webpack.config.js index a35fbc21ed..5fd325a0f5 100644 --- a/source/main/webpack.config.js +++ b/source/main/webpack.config.js @@ -6,8 +6,8 @@ module.exports = { mode: 'development', devtool: 'cheap-module-source-map', entry: { - index: './source/main/index.js', - preload: './source/main/preload.js', + index: './source/main/index.ts', + preload: './source/main/preload.ts', }, optimization: { // https://github.com/webpack/webpack/issues/7470 @@ -35,13 +35,27 @@ module.exports = { 'js-chain-libs-node': 'commonjs2 js-chain-libs-node', 'trezor-connect': 'commonjs2 trezor-connect', }, + resolve: { + extensions: ['.tsx', '.ts', '.js', '.json'], + }, module: { rules: [ { - test: /\.jsx?$/, + test: /\.tsx?$/, include: /source/, exclude: /source\/renderer/, - use: (isCi ? [] : ['cache-loader']).concat(['babel-loader']), + use: (isCi ? [] : ['cache-loader']).concat([ + { + loader: 'babel-loader', + options: { + presets: [ + '@babel/preset-env', + '@babel/preset-react', + '@babel/preset-typescript', + ], + }, + }, + ]), }, { test: /(pdfkit|linebreak|fontkit|unicode|brotli|png-js).*\.js$/, diff --git a/source/renderer/webpack.config.js b/source/renderer/webpack.config.js index 61b482a771..9e0f2430a4 100644 --- a/source/renderer/webpack.config.js +++ b/source/renderer/webpack.config.js @@ -10,7 +10,7 @@ const isCi = process.env.CI && process.env.CI !== ''; module.exports = { mode: 'development', devtool: 'inline-cheap-module-source-map', - entry: './source/renderer/index.js', + entry: './source/renderer/index.ts', optimization: { // https://github.com/webpack/webpack/issues/7470 nodeEnv: false, @@ -22,14 +22,26 @@ module.exports = { // https://github.com/chentsulin/webpack-target-electron-renderer#how-this-module-works target: isTestEnv ? 'electron-renderer' : 'web', cache: true, + resolve: { + extensions: ['.tsx', '.ts', '.js', '.json'], + }, module: { rules: [ { - test: /\.jsx?$/, + test: /\.tsx?$/, include: /source/, exclude: /source\/main/, use: (isCi ? [] : ['cache-loader', 'thread-loader']).concat([ - 'babel-loader', + { + loader: 'babel-loader', + options: { + presets: [ + '@babel/preset-env', + '@babel/preset-react', + '@babel/preset-typescript', + ], + }, + }, ]), }, { diff --git a/storybook/webpack.config.js b/storybook/webpack.config.js index 5021eba563..58571af03f 100644 --- a/storybook/webpack.config.js +++ b/storybook/webpack.config.js @@ -65,9 +65,23 @@ module.exports = async ({ config }) => { optimization: { minimize: false, }, + resolve: { + extensions: ['.tsx', '.ts', '.js', '.json'], + }, module: { rules: [ jsxRule, + { + test: /.tsx?$/, + loader: 'babel-loader', + options: { + presets: [ + '@babel/preset-env', + '@babel/preset-react', + '@babel/preset-typescript', + ], + }, + }, { test: /\.scss/, use: [ From fc62360d11006dc197e648984922537d339ffffb Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:29:22 +0000 Subject: [PATCH 024/204] [DDW-773] updated eslintrc --- .eslintrc | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/.eslintrc b/.eslintrc index f6ed9a7c95..b93f68bb91 100755 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,5 @@ { - "parser": "@babel/eslint-parser", + "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { "legacyDecorators": true @@ -7,11 +7,11 @@ }, "extends": [ "airbnb", - "plugin:flowtype/recommended", + "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "prettier", "prettier/babel", - "prettier/flowtype", + "prettier/@typescript-eslint", "prettier/react", "plugin:jest/recommended" ], @@ -24,7 +24,7 @@ "rules": { "class-methods-use-this": 0, "consistent-return": "warn", - "flowtype/generic-spacing": 0, + "@typescript-eslint/generic-spacing": 0, "jsx-a11y/alt-text": 0, "lines-between-class-members": 0, "global-require": 0, @@ -71,17 +71,22 @@ "react/prefer-stateless-function": 0, "react/prop-types": "warn", "react/require-default-props": 0, + "react/jsx-first-prop-new-line": [1, "multiline-multiprop"], + "@typescript-eslint/ban-ts-comment": 1, + "@typescript-eslint/no-empty-function": 1, + "@typescript-eslint/ban-types": 1, + "import/no-unresolved": 1, + "@typescript-eslint/no-var-requires": 1, + "camelcase": 1, + "no-empty": 1, + "@typescript-eslint/no-explicit-any": 1, + "no-shadow": 1, + "react/no-did-update-set-state": 1, "react/sort-comp": 0, "react/state-in-constructor": 0, "react/static-property-placement": 0 }, - "plugins": [ - "flowtype", - "import", - "promise", - "react", - "jest" - ], + "plugins": ["@typescript-eslint", "import", "promise", "react", "jest"], "globals": { "API": true, "API_VERSION": true, @@ -91,6 +96,8 @@ "Process": true // TODO: remove after fix }, "settings": { - "import/resolver": "webpack" + "import/resolver": { + "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } + } } } From 9c980f723938b81e74275269b765145c611f3c27 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:30:53 +0000 Subject: [PATCH 025/204] [DDW-773] created global declaration file --- declaration.d.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 declaration.d.ts diff --git a/declaration.d.ts b/declaration.d.ts new file mode 100644 index 0000000000..ad58f50d54 --- /dev/null +++ b/declaration.d.ts @@ -0,0 +1,46 @@ +declare module '*.svg' { + const content: any; + export default content; +} + +declare module '*.scss' { + const content: any; + export default content; +} + +type Daedalus = { + actions: ActionsMap, + api: Api, + environment: Object, + reset: Function, + stores: StoresMap, + translations: Object, + utils: { + crypto: { + generateMnemonic: Function + } + }, + }; + +export type $ElementType< + T extends { [P in K & any]: any }, + K extends keyof T | number +> = T[K]; + +export type EnumMap< + K extends string, + V, + O extends Record = any +> = O & Record>; + +declare global { + namespace NodeJS { + interface ProcessEnv { + WALLET_COUNT: number; + } + } + const daedalus: Daedalus; +} + +export {}; + From 96420415e50c550e7f3565a3912f86e53d3271bd Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:32:50 +0000 Subject: [PATCH 026/204] [DDW-773] converted all javascript files to typescript files --- source/common/config/{appUpdateConfig.js => appUpdateConfig.ts} | 0 source/common/config/crypto/{decrypt.js => decrypt.ts} | 0 .../common/config/crypto/{valid-words.en.js => valid-words.en.ts} | 0 .../config/{downloadManagerConfig.js => downloadManagerConfig.ts} | 0 .../config/{electron-store.config.js => electron-store.config.ts} | 0 source/common/ipc/{api.js => api.ts} | 0 source/common/ipc/{constants.js => constants.ts} | 0 source/common/ipc/lib/{IpcChannel.js => IpcChannel.ts} | 0 source/common/ipc/lib/{IpcConversation.js => IpcConversation.ts} | 0 ...ress-introspection.types.js => address-introspection.types.ts} | 0 ...{address-pdf-request.types.js => address-pdf-request.types.ts} | 0 source/common/types/{app-update.types.js => app-update.types.ts} | 0 .../{bug-report-request.types.js => bug-report-request.types.ts} | 0 .../common/types/{cardano-node.types.js => cardano-node.types.ts} | 0 .../common/types/{csv-request.types.js => csv-request.types.ts} | 0 .../types/{downloadManager.types.js => downloadManager.types.ts} | 0 .../types/{electron-store.types.js => electron-store.types.ts} | 0 .../common/types/{environment.types.js => environment.types.ts} | 0 .../common/types/{file-dialog.types.js => file-dialog.types.ts} | 0 .../{file-meta-request.types.js => file-meta-request.types.ts} | 0 .../{hardware-wallets.types.js => hardware-wallets.types.ts} | 0 source/common/types/{locales.types.js => locales.types.ts} | 0 source/common/types/{logging.types.js => logging.types.ts} | 0 .../types/{no-disk-space.types.js => no-disk-space.types.ts} | 0 source/common/types/{number.types.js => number.types.ts} | 0 ...aper-wallet-request.types.js => paper-wallet-request.types.ts} | 0 .../common/types/{save-qrCode.types.js => save-qrCode.types.ts} | 0 .../{stateDirectoryPath.types.js => stateDirectoryPath.types.ts} | 0 .../{support-requests.types.js => support-requests.types.ts} | 0 .../{voting-pdf-request.types.js => voting-pdf-request.types.ts} | 0 .../utils/{environmentCheckers.js => environmentCheckers.ts} | 0 source/common/utils/{files.js => files.ts} | 0 source/common/utils/{helper.js => helper.ts} | 0 source/common/utils/{logging.js => logging.ts} | 0 source/common/utils/{reporting.js => reporting.ts} | 0 source/main/cardano/{CardanoNode.js => CardanoNode.ts} | 0 .../{CardanoSelfnodeLauncher.js => CardanoSelfnodeLauncher.ts} | 0 .../{CardanoWalletLauncher.js => CardanoWalletLauncher.ts} | 0 source/main/cardano/{config.js => config.ts} | 0 source/main/cardano/{setup.js => setup.ts} | 0 source/main/cardano/{utils.js => utils.ts} | 0 source/main/{config.js => config.ts} | 0 source/main/{environment.js => environment.ts} | 0 source/main/{index.js => index.ts} | 0 .../{bugReportRequestChannel.js => bugReportRequestChannel.ts} | 0 source/main/ipc/{cardano.ipc.js => cardano.ipc.ts} | 0 source/main/ipc/{compress-logs.js => compress-logs.ts} | 0 source/main/ipc/{control-ui-parts.js => control-ui-parts.ts} | 0 source/main/ipc/{download-logs.js => download-logs.ts} | 0 .../ipc/{downloadManagerChannel.js => downloadManagerChannel.ts} | 0 ...{electronStoreConversation.js => electronStoreConversation.ts} | 0 ...gationChannel.js => enableApplicationMenuNavigationChannel.ts} | 0 ...{generateAddressPDFChannel.js => generateAddressPDFChannel.ts} | 0 source/main/ipc/{generateCsvChannel.js => generateCsvChannel.ts} | 0 .../{generateFileMetaChannel.js => generateFileMetaChannel.ts} | 0 ...eneratePaperWalletChannel.js => generatePaperWalletChannel.ts} | 0 .../{generateVotingPDFChannel.js => generateVotingPDFChannel.ts} | 0 ...onReportChannel.js => generateWalletMigrationReportChannel.ts} | 0 ...{get-block-replay-progress.js => get-block-replay-progress.ts} | 0 .../ipc/{get-disk-space-status.js => get-disk-space-status.ts} | 0 source/main/ipc/{get-gpu-status.js => get-gpu-status.ts} | 0 source/main/ipc/{get-logs.js => get-logs.ts} | 0 ...pDirectoryPathChannel.js => getDesktopDirectoryPathChannel.ts} | 0 .../{getHardwareWalletChannel.js => getHardwareWalletChannel.ts} | 0 ...etRecoveryWalletIdChannel.js => getRecoveryWalletIdChannel.ts} | 0 ...ateDirectoryPathChannel.js => getStateDirectoryPathChannel.ts} | 0 .../ipc/{getSystemLocaleChannel.js => getSystemLocaleChannel.ts} | 0 source/main/ipc/{index.js => index.ts} | 0 source/main/ipc/{introspect-address.js => introspect-address.ts} | 0 source/main/ipc/lib/{MainIpcChannel.js => MainIpcChannel.ts} | 0 .../ipc/lib/{MainIpcConversation.js => MainIpcConversation.ts} | 0 source/main/ipc/{load-asset.js => load-asset.ts} | 0 .../ipc/{manageAppUpdateChannel.js => manageAppUpdateChannel.ts} | 0 source/main/ipc/{open-external-url.js => open-external-url.ts} | 0 .../main/ipc/{open-local-directory.js => open-local-directory.ts} | 0 .../{rebuild-application-menu.js => rebuild-application-menu.ts} | 0 source/main/ipc/{resize-window.js => resize-window.ts} | 0 .../ipc/{saveQRCodeImageChannel.js => saveQRCodeImageChannel.ts} | 0 .../ipc/{set-log-state-snapshot.js => set-log-state-snapshot.ts} | 0 ...{show-file-dialog-channels.js => show-file-dialog-channels.ts} | 0 source/main/menus/{MenuActions.types.js => MenuActions.types.ts} | 0 source/main/menus/{osx.js => osx.ts} | 0 source/main/menus/{win-linux.js => win-linux.ts} | 0 source/main/{preload.js => preload.ts} | 0 source/main/utils/{buildAppMenus.js => buildAppMenus.ts} | 0 source/main/utils/{config.js => config.ts} | 0 .../main/utils/{detectSystemLocale.js => detectSystemLocale.ts} | 0 source/main/utils/{downloadManager.js => downloadManager.ts} | 0 .../utils/{ensureDirectoryExists.js => ensureDirectoryExists.ts} | 0 .../utils/{getContentMinimumSize.js => getContentMinimumSize.ts} | 0 source/main/utils/{getLocale.js => getLocale.ts} | 0 source/main/utils/{getTranslation.js => getTranslation.ts} | 0 ...ckBlockReplayProgress.js => handleCheckBlockReplayProgress.ts} | 0 source/main/utils/{handleDiskSpace.js => handleDiskSpace.ts} | 0 .../{installChromeExtensions.js => installChromeExtensions.ts} | 0 source/main/utils/{logUsedVersion.js => logUsedVersion.ts} | 0 source/main/utils/{logging.js => logging.ts} | 0 source/main/utils/{mainErrorHandler.js => mainErrorHandler.ts} | 0 source/main/utils/{mainLocalStorage.js => mainLocalStorage.ts} | 0 source/main/utils/{pdf.js => pdf.ts} | 0 source/main/utils/{processes.js => processes.ts} | 0 .../utils/{rendererErrorHandler.js => rendererErrorHandler.ts} | 0 source/main/utils/{restoreKeystore.js => restoreKeystore.ts} | 0 source/main/utils/{rtsFlags.js => rtsFlags.ts} | 0 source/main/utils/{safeExitWithCode.js => safeExitWithCode.ts} | 0 source/main/utils/{setupLogging.js => setupLogging.ts} | 0 source/main/windows/{main.js => main.ts} | 0 source/main/windows/{windowBounds.js => windowBounds.ts} | 0 source/renderer/app/{App.js => App.ts} | 0 source/renderer/app/{Routes.js => Routes.ts} | 0 source/renderer/app/{ThemeManager.js => ThemeManager.ts} | 0 .../renderer/app/{WindowSizeManager.js => WindowSizeManager.ts} | 0 .../app/actions/{addresses-actions.js => addresses-actions.ts} | 0 source/renderer/app/actions/{app-actions.js => app-actions.ts} | 0 .../app/actions/{app-update-actions.js => app-update-actions.ts} | 0 .../renderer/app/actions/{assets-actions.js => assets-actions.ts} | 0 .../app/actions/{currency-actions.js => currency-actions.ts} | 0 .../app/actions/{dialogs-actions.js => dialogs-actions.ts} | 0 .../{hardware-wallets-actions.js => hardware-wallets-actions.ts} | 0 source/renderer/app/actions/{index.js => index.ts} | 0 source/renderer/app/actions/lib/{Action.js => Action.ts} | 0 .../{network-status-actions.js => network-status-actions.ts} | 0 .../{notifications-actions.js => notifications-actions.ts} | 0 .../app/actions/{profile-actions.js => profile-actions.ts} | 0 .../renderer/app/actions/{router-actions.js => router-actions.ts} | 0 .../app/actions/{sidebar-actions.js => sidebar-actions.ts} | 0 .../app/actions/{staking-actions.js => staking-actions.ts} | 0 .../actions/{transactions-actions.js => transactions-actions.ts} | 0 .../renderer/app/actions/{voting-actions.js => voting-actions.ts} | 0 .../{wallet-backup-actions.js => wallet-backup-actions.ts} | 0 .../{wallet-migration-actions.js => wallet-migration-actions.ts} | 0 .../{wallet-settings-actions.js => wallet-settings-actions.ts} | 0 .../app/actions/{wallets-actions.js => wallets-actions.ts} | 0 .../{wallets-local-actions.js => wallets-local-actions.ts} | 0 .../renderer/app/actions/{window-actions.js => window-actions.ts} | 0 .../requests/{constructAddress.js => constructAddress.ts} | 0 .../{createByronWalletAddress.js => createByronWalletAddress.ts} | 0 .../app/api/addresses/requests/{getAddress.js => getAddress.ts} | 0 .../api/addresses/requests/{getAddresses.js => getAddresses.ts} | 0 .../{getByronWalletAddresses.js => getByronWalletAddresses.ts} | 0 .../addresses/requests/{inspectAddress.js => inspectAddress.ts} | 0 source/renderer/app/api/addresses/{types.js => types.ts} | 0 source/renderer/app/api/{api.js => api.ts} | 0 .../app/api/assets/requests/{getAssets.js => getAssets.ts} | 0 .../assets/requests/{getUnknownAsset.js => getUnknownAsset.ts} | 0 source/renderer/app/api/assets/{types.js => types.ts} | 0 source/renderer/app/api/common/{errors.js => errors.ts} | 0 source/renderer/app/api/common/{types.js => types.ts} | 0 source/renderer/app/api/{errors.js => errors.ts} | 0 source/renderer/app/api/{index.js => index.ts} | 0 .../network/requests/{getNetworkClock.js => getNetworkClock.ts} | 0 .../api/network/requests/{getNetworkInfo.js => getNetworkInfo.ts} | 0 .../requests/{getNetworkParameters.js => getNetworkParameters.ts} | 0 source/renderer/app/api/network/{types.js => types.ts} | 0 source/renderer/app/api/news/requests/{getNews.js => getNews.ts} | 0 .../app/api/news/requests/{getNewsHash.js => getNewsHash.ts} | 0 source/renderer/app/api/news/{types.js => types.ts} | 0 source/renderer/app/api/nodes/{errors.js => errors.ts} | 0 .../{checkSmashServerHealth.js => checkSmashServerHealth.ts} | 0 .../staking/requests/{getDelegationFee.js => getDelegationFee.ts} | 0 .../staking/requests/{getSmashSettings.js => getSmashSettings.ts} | 0 .../api/staking/requests/{getStakePools.js => getStakePools.ts} | 0 .../api/staking/requests/{joinStakePool.js => joinStakePool.ts} | 0 .../api/staking/requests/{quitStakePool.js => quitStakePool.ts} | 0 .../requests/{updateSmashSettings.js => updateSmashSettings.ts} | 0 source/renderer/app/api/staking/{types.js => types.ts} | 0 ...eByronWalletTransaction.js => createByronWalletTransaction.ts} | 0 ...{createExternalTransaction.js => createExternalTransaction.ts} | 0 .../requests/{createTransaction.js => createTransaction.ts} | 0 .../{deleteLegacyTransaction.js => deleteLegacyTransaction.ts} | 0 .../requests/{deleteTransaction.js => deleteTransaction.ts} | 0 ...ronWalletTransactionFee.js => getByronWalletTransactionFee.ts} | 0 .../requests/{getICOPublicKey.js => getICOPublicKey.ts} | 0 ...TransactionHistory.js => getLegacyWalletTransactionHistory.ts} | 0 .../transactions/requests/{getPublicKey.js => getPublicKey.ts} | 0 .../requests/{getTransaction.js => getTransaction.ts} | 0 .../requests/{getTransactionFee.js => getTransactionFee.ts} | 0 .../{getTransactionHistory.js => getTransactionHistory.ts} | 0 .../requests/{getWithdrawalHistory.js => getWithdrawalHistory.ts} | 0 .../api/transactions/requests/{selectCoins.js => selectCoins.ts} | 0 source/renderer/app/api/transactions/{types.js => types.ts} | 0 source/renderer/app/api/utils/{apiHelpers.js => apiHelpers.ts} | 0 .../app/api/utils/{externalRequest.js => externalRequest.ts} | 0 source/renderer/app/api/utils/{hashing.js => hashing.ts} | 0 source/renderer/app/api/utils/{index.js => index.ts} | 0 .../renderer/app/api/utils/{localStorage.js => localStorage.ts} | 0 source/renderer/app/api/utils/{mnemonics.js => mnemonics.ts} | 0 source/renderer/app/api/utils/{patchAdaApi.js => patchAdaApi.ts} | 0 source/renderer/app/api/utils/{request.js => request.ts} | 0 source/renderer/app/api/utils/{requestV0.js => requestV0.ts} | 0 .../{createWalletSignature.js => createWalletSignature.ts} | 0 source/renderer/app/api/voting/{types.js => types.ts} | 0 .../requests/{createHardwareWallet.js => createHardwareWallet.ts} | 0 .../app/api/wallets/requests/{createWallet.js => createWallet.ts} | 0 .../requests/{deleteLegacyWallet.js => deleteLegacyWallet.ts} | 0 .../app/api/wallets/requests/{deleteWallet.js => deleteWallet.ts} | 0 .../requests/{exportWalletAsJSON.js => exportWalletAsJSON.ts} | 0 .../requests/{getAccountPublicKey.js => getAccountPublicKey.ts} | 0 .../requests/{getByronWalletUtxos.js => getByronWalletUtxos.ts} | 0 .../wallets/requests/{getCurrencyList.js => getCurrencyList.ts} | 0 .../wallets/requests/{getCurrencyRate.js => getCurrencyRate.ts} | 0 .../wallets/requests/{getLegacyWallet.js => getLegacyWallet.ts} | 0 .../wallets/requests/{getLegacyWallets.js => getLegacyWallets.ts} | 0 .../app/api/wallets/requests/{getWallet.js => getWallet.ts} | 0 .../requests/{getWalletPublicKey.js => getWalletPublicKey.ts} | 0 .../api/wallets/requests/{getWalletUtxos.js => getWalletUtxos.ts} | 0 .../app/api/wallets/requests/{getWallets.js => getWallets.ts} | 0 .../requests/{importWalletAsJSON.js => importWalletAsJSON.ts} | 0 .../requests/{importWalletAsKey.js => importWalletAsKey.ts} | 0 .../requests/{restoreByronWallet.js => restoreByronWallet.ts} | 0 ...estoreExportedByronWallet.js => restoreExportedByronWallet.ts} | 0 .../requests/{restoreLegacyWallet.js => restoreLegacyWallet.ts} | 0 .../api/wallets/requests/{restoreWallet.js => restoreWallet.ts} | 0 .../api/wallets/requests/{transferFunds.js => transferFunds.ts} | 0 ...{transferFundsCalculateFee.js => transferFundsCalculateFee.ts} | 0 ...ateByronSpendingPassword.js => updateByronSpendingPassword.ts} | 0 .../requests/{updateByronWallet.js => updateByronWallet.ts} | 0 .../{updateSpendingPassword.js => updateSpendingPassword.ts} | 0 .../app/api/wallets/requests/{updateWallet.js => updateWallet.ts} | 0 source/renderer/app/api/wallets/{types.js => types.ts} | 0 .../appUpdate/{AppUpdateOverlay.js => AppUpdateOverlay.ts} | 0 source/renderer/app/components/assets/{Asset.js => Asset.ts} | 0 .../app/components/assets/{AssetAmount.js => AssetAmount.ts} | 0 .../app/components/assets/{AssetContent.js => AssetContent.ts} | 0 .../assets/{AssetSettingsDialog.js => AssetSettingsDialog.ts} | 0 ...TransactionConfirmation.js => AssetTransactionConfirmation.ts} | 0 ...ransactionConfirmation.js => AssetsTransactionConfirmation.ts} | 0 .../dapp/{DappTransactionRequest.js => DappTransactionRequest.ts} | 0 .../{HardwareWalletStatus.js => HardwareWalletStatus.ts} | 0 .../components/layout/{CenteredLayout.js => CenteredLayout.ts} | 0 .../app/components/layout/{SidebarLayout.js => SidebarLayout.ts} | 0 source/renderer/app/components/layout/{TopBar.js => TopBar.ts} | 0 .../app/components/layout/{TopBarLayout.js => TopBarLayout.ts} | 0 .../layout/{VerticalFlexContainer.js => VerticalFlexContainer.ts} | 0 .../{NoDiskSpaceError.js => NoDiskSpaceError.ts} | 0 .../syncing-connecting/{LogosDisplay.js => LogosDisplay.ts} | 0 .../loading/syncing-connecting/{ReportIssue.js => ReportIssue.ts} | 0 .../loading/syncing-connecting/{StatusIcons.js => StatusIcons.ts} | 0 .../{SyncingConnecting.js => SyncingConnecting.ts} | 0 ...cingConnectingBackground.js => SyncingConnectingBackground.ts} | 0 .../{SyncingConnectingStatus.js => SyncingConnectingStatus.ts} | 0 .../system-time-error/{SystemTimeError.js => SystemTimeError.ts} | 0 .../app/components/navigation/{NavButton.js => NavButton.ts} | 0 .../app/components/navigation/{NavDropdown.js => NavDropdown.ts} | 0 .../app/components/navigation/{Navigation.js => Navigation.ts} | 0 .../app/components/news/{AlertsOverlay.js => AlertsOverlay.ts} | 0 .../components/news/{IncidentOverlay.js => IncidentOverlay.ts} | 0 source/renderer/app/components/news/{NewsFeed.js => NewsFeed.ts} | 0 source/renderer/app/components/news/{NewsItem.js => NewsItem.ts} | 0 .../renderer/app/components/news/{UpdateItem.js => UpdateItem.ts} | 0 .../{InlineNotification.js => InlineNotification.ts} | 0 .../components/notifications/{LegacyBadge.js => LegacyBadge.ts} | 0 .../{LegacyNotification.js => LegacyNotification.ts} | 0 .../components/notifications/{Notification.js => Notification.ts} | 0 .../{NotificationActions.js => NotificationActions.ts} | 0 .../{RestoreNotification.js => RestoreNotification.ts} | 0 .../{DataLayerMigrationForm.js => DataLayerMigrationForm.ts} | 0 .../initial-settings/{InitialSettings.js => InitialSettings.ts} | 0 .../profile/terms-of-use/{TermsOfUseForm.js => TermsOfUseForm.ts} | 0 .../profile/terms-of-use/{TermsOfUseText.js => TermsOfUseText.ts} | 0 .../components/settings/{SettingsLayout.js => SettingsLayout.ts} | 0 .../categories/{DisplaySettings.js => DisplaySettings.ts} | 0 .../categories/{GeneralSettings.js => GeneralSettings.ts} | 0 ...{SecuritySettings.messages.js => SecuritySettings.messages.ts} | 0 .../categories/{SecuritySettings.js => SecuritySettings.ts} | 0 .../categories/{StakePoolsSettings.js => StakePoolsSettings.ts} | 0 .../categories/{SupportSettings.js => SupportSettings.ts} | 0 .../categories/{TermsOfUseSettings.js => TermsOfUseSettings.ts} | 0 .../categories/{WalletsSettings.js => WalletsSettings.ts} | 0 .../settings/menu/{SecurityMenuItem.js => SecurityMenuItem.ts} | 0 .../menu/{SettingsMenu.messages.js => SettingsMenu.messages.ts} | 0 .../components/settings/menu/{SettingsMenu.js => SettingsMenu.ts} | 0 .../settings/menu/{SettingsMenuItem.js => SettingsMenuItem.ts} | 0 .../renderer/app/components/settings/menu/{hooks.js => hooks.ts} | 0 source/renderer/app/components/sidebar/{Sidebar.js => Sidebar.ts} | 0 .../components/sidebar/{SidebarCategory.js => SidebarCategory.ts} | 0 ...idebarCategoryNetworkInfo.js => SidebarCategoryNetworkInfo.ts} | 0 ...goryWrapper.messages.js => SidebarCategoryWrapper.messages.ts} | 0 .../{SidebarCategoryWrapper.js => SidebarCategoryWrapper.ts} | 0 .../app/components/sidebar/{SidebarMenu.js => SidebarMenu.ts} | 0 source/renderer/app/components/sidebar/{helpers.js => helpers.ts} | 0 source/renderer/app/components/sidebar/{types.js => types.ts} | 0 .../{SidebarWalletMenuItem.js => SidebarWalletMenuItem.ts} | 0 .../{SidebarWalletsMenu.spec.js => SidebarWalletsMenu.spec.ts} | 0 .../wallets/{SidebarWalletsMenu.js => SidebarWalletsMenu.ts} | 0 .../sidebar/wallets/{WalletSearch.js => WalletSearch.ts} | 0 .../sidebar/wallets/{WalletSortButton.js => WalletSortButton.ts} | 0 .../splash/{SplashNetworkFlight.js => SplashNetworkFlight.ts} | 0 .../staking/{StakingUnavailable.js => StakingUnavailable.ts} | 0 .../countdown/{StakingCountdown.js => StakingCountdown.ts} | 0 .../{DelegationCenter.js => DelegationCenter.ts} | 0 .../{DelegationCenterBody.js => DelegationCenterBody.ts} | 0 .../{DelegationCenterHeader.js => DelegationCenterHeader.ts} | 0 ...{DelegationCenterNoWallets.js => DelegationCenterNoWallets.ts} | 0 .../staking/delegation-center/{DonutRing.js => DonutRing.ts} | 0 .../delegation-center/{DropdownMenu.js => DropdownMenu.ts} | 0 .../delegation-center/{WalletColumn.js => WalletColumn.ts} | 0 .../staking/delegation-center/{WalletRow.js => WalletRow.ts} | 0 .../staking/delegation-center/{helpers.js => helpers.ts} | 0 .../widgets/{WalletAmount.js => WalletAmount.ts} | 0 .../staking/delegation-center/widgets/{index.js => index.ts} | 0 ...egationSetupWizardDialog.js => DelegationSetupWizardDialog.ts} | 0 ...ssages.js => DelegationStepsChooseStakePoolDialog.messages.ts} | 0 ...StakePoolDialog.js => DelegationStepsChooseStakePoolDialog.ts} | 0 ...ChooseWalletDialog.js => DelegationStepsChooseWalletDialog.ts} | 0 ....messages.js => DelegationStepsConfirmationDialog.messages.ts} | 0 ...ConfirmationDialog.js => DelegationStepsConfirmationDialog.ts} | 0 ...elegationStepsIntroDialog.js => DelegationStepsIntroDialog.ts} | 0 ...NotAvailableDialog.js => DelegationStepsNotAvailableDialog.ts} | 0 ...ationStepsSuccessDialog.js => DelegationStepsSuccessDialog.ts} | 0 .../{OversaturationText.js => OversaturationText.ts} | 0 .../staking/epochs/{StakingEpochs.js => StakingEpochs.ts} | 0 ...EpochsCurrentEpochData.js => StakingEpochsCurrentEpochData.ts} | 0 .../{StakingEpochsDataTable.js => StakingEpochsDataTable.ts} | 0 .../epochs/{StakingEpochsNoData.js => StakingEpochsNoData.ts} | 0 ...ochsPreviousEpochData.js => StakingEpochsPreviousEpochData.ts} | 0 .../app/components/staking/epochs/{helpers.js => helpers.ts} | 0 .../components/staking/info/{StakingInfo.js => StakingInfo.ts} | 0 .../info/{StakingInfoCountdown.js => StakingInfoCountdown.ts} | 0 .../{StakingWithNavigation.js => StakingWithNavigation.ts} | 0 .../legacy/{BlockGenerationInfo.js => BlockGenerationInfo.ts} | 0 .../app/components/staking/legacy/{Staking.js => Staking.ts} | 0 .../staking/legacy/{StakingChart.js => StakingChart.ts} | 0 .../legacy/{StakingChartTooltip.js => StakingChartTooltip.ts} | 0 .../{StakingChartTooltipItem.js => StakingChartTooltipItem.ts} | 0 .../staking/legacy/{StakingSwitch.js => StakingSwitch.ts} | 0 .../legacy/{StakingSystemState.js => StakingSystemState.ts} | 0 ...{StakingSystemStateElement.js => StakingSystemStateElement.ts} | 0 .../navigation/{StakingNavigation.js => StakingNavigation.ts} | 0 .../redeem-itn-rewards/{LoadingOverlay.js => LoadingOverlay.ts} | 0 .../redeem-itn-rewards/{NoWalletsDialog.js => NoWalletsDialog.ts} | 0 ...emptionUnavailableDialog.js => RedemptionUnavailableDialog.ts} | 0 .../{Step1ConfigurationDialog.js => Step1ConfigurationDialog.ts} | 0 .../{Step2ConfirmationDialog.js => Step2ConfirmationDialog.ts} | 0 .../{Step3FailureDialog.js => Step3FailureDialog.ts} | 0 .../{Step3SuccessDialog.js => Step3SuccessDialog.ts} | 0 .../staking/rewards/{RewardAmount.js => RewardAmount.ts} | 0 .../staking/rewards/{StakingRewards.js => StakingRewards.ts} | 0 .../staking/stake-pools/{StakePools.js => StakePools.ts} | 0 .../staking/stake-pools/{StakePoolsList.js => StakePoolsList.ts} | 0 .../stake-pools/{StakePoolsRanking.js => StakePoolsRanking.ts} | 0 .../{StakePoolsRankingLoader.js => StakePoolsRankingLoader.ts} | 0 .../stake-pools/{StakePoolsSearch.js => StakePoolsSearch.ts} | 0 .../stake-pools/{StakePoolsTable.js => StakePoolsTable.ts} | 0 .../{StakePoolsTableBody.js => StakePoolsTableBody.ts} | 0 .../{StakePoolsTableHeader.js => StakePoolsTableHeader.ts} | 0 .../app/components/staking/stake-pools/{helpers.js => helpers.ts} | 0 .../components/staking/widgets/{PoolPopOver.js => PoolPopOver.ts} | 0 .../app/components/staking/widgets/{ThumbPool.js => ThumbPool.ts} | 0 .../staking/widgets/{ThumbPoolContent.js => ThumbPoolContent.ts} | 0 .../widgets/{ThumbSelectedPool.js => ThumbSelectedPool.ts} | 0 .../components/staking/widgets/{TooltipPool.js => TooltipPool.ts} | 0 source/renderer/app/components/static/{About.js => About.ts} | 0 .../status/{DaedalusDiagnostics.js => DaedalusDiagnostics.ts} | 0 .../voting/{VotingFooterLinks.js => VotingFooterLinks.ts} | 0 .../components/voting/{VotingNoWallets.js => VotingNoWallets.ts} | 0 ...istrationDialogWizard.js => VotingRegistrationDialogWizard.ts} | 0 .../voting/{VotingUnavailable.js => VotingUnavailable.ts} | 0 .../voting-info/{AppStore.messages.js => AppStore.messages.ts} | 0 .../components/voting/voting-info/{AppStore.js => AppStore.ts} | 0 .../voting-info/{Headline.messages.js => Headline.messages.ts} | 0 .../components/voting/voting-info/{Headline.js => Headline.ts} | 0 .../{RegisterToVote.messages.js => RegisterToVote.messages.ts} | 0 .../voting/voting-info/{RegisterToVote.js => RegisterToVote.ts} | 0 .../{ResultsPhase.messages.js => ResultsPhase.messages.ts} | 0 .../voting/voting-info/{ResultsPhase.js => ResultsPhase.ts} | 0 .../{SnapshotPhase.messages.js => SnapshotPhase.messages.ts} | 0 .../voting/voting-info/{SnapshotPhase.js => SnapshotPhase.ts} | 0 .../{TallyingPhase.messages.js => TallyingPhase.messages.ts} | 0 .../voting/voting-info/{TallyingPhase.js => TallyingPhase.ts} | 0 .../{VotingInfo.messages.js => VotingInfo.messages.ts} | 0 .../voting/voting-info/{VotingInfo.js => VotingInfo.ts} | 0 .../{VotingPhase.messages.js => VotingPhase.messages.ts} | 0 .../voting/voting-info/{VotingPhase.js => VotingPhase.ts} | 0 ...tepsChooseWallet.js => VotingRegistrationStepsChooseWallet.ts} | 0 ...istrationStepsConfirm.js => VotingRegistrationStepsConfirm.ts} | 0 ...tepsEnterPinCode.js => VotingRegistrationStepsEnterPinCode.ts} | 0 ...egistrationStepsQrCode.js => VotingRegistrationStepsQrCode.ts} | 0 ...trationStepsRegister.js => VotingRegistrationStepsRegister.ts} | 0 .../widgets/{ConfirmationDialog.js => ConfirmationDialog.ts} | 0 .../{VotingRegistrationDialog.js => VotingRegistrationDialog.ts} | 0 .../renderer/app/components/wallet/{WalletAdd.js => WalletAdd.ts} | 0 .../wallet/{WalletBackupDialog.js => WalletBackupDialog.ts} | 0 .../wallet/{WalletConnectDialog.js => WalletConnectDialog.ts} | 0 .../wallet/{WalletCreateDialog.js => WalletCreateDialog.ts} | 0 .../wallet/{WalletRestoreDialog.js => WalletRestoreDialog.ts} | 0 .../wallet/{WalletSendForm.spec.js => WalletSendForm.spec.ts} | 0 .../components/wallet/{WalletSendForm.js => WalletSendForm.ts} | 0 ...rivacyWarningDialog.js => WalletBackupPrivacyWarningDialog.ts} | 0 ...alletRecoveryInstructions.js => WalletRecoveryInstructions.ts} | 0 ...hraseDisplayDialog.js => WalletRecoveryPhraseDisplayDialog.ts} | 0 ...eryPhraseEntryDialog.js => WalletRecoveryPhraseEntryDialog.ts} | 0 ...tRecoveryPhraseMnemonic.js => WalletRecoveryPhraseMnemonic.ts} | 0 .../{WalletFileImportDialog.js => WalletFileImportDialog.ts} | 0 .../layouts/{WalletWithNavigation.js => WalletWithNavigation.ts} | 0 .../navigation/{WalletNavigation.js => WalletNavigation.ts} | 0 .../wallet/not-responding/{NotResponding.js => NotResponding.ts} | 0 .../{CompletionDialog.js => CompletionDialog.ts} | 0 .../{ConfirmationDialog.js => ConfirmationDialog.ts} | 0 .../{InstructionsDialog.js => InstructionsDialog.ts} | 0 .../paper-wallet-certificate/{PrintDialog.js => PrintDialog.ts} | 0 .../{SecuringPasswordDialog.js => SecuringPasswordDialog.ts} | 0 .../{VerificationDialog.js => VerificationDialog.ts} | 0 .../wallet/receive/{AddressActions.js => AddressActions.ts} | 0 .../wallet/receive/{AddressRandom.js => AddressRandom.ts} | 0 .../wallet/receive/{AddressSequential.js => AddressSequential.ts} | 0 .../receive/{VirtualAddressesList.js => VirtualAddressesList.ts} | 0 .../receive/{WalletReceiveDialog.js => WalletReceiveDialog.ts} | 0 .../receive/{WalletReceiveRandom.js => WalletReceiveRandom.ts} | 0 .../{WalletReceiveSequential.js => WalletReceiveSequential.ts} | 0 .../components/wallet/send-form/{AssetInput.js => AssetInput.ts} | 0 ...messages.js => WalletSendAssetsConfirmationDialog.messages.ts} | 0 ...onfirmationDialog.js => WalletSendAssetsConfirmationDialog.ts} | 0 ...ialog.messages.js => WalletSendConfirmationDialog.messages.ts} | 0 ...tSendConfirmationDialog.js => WalletSendConfirmationDialog.ts} | 0 .../app/components/wallet/send-form/{messages.js => messages.ts} | 0 ...eSpendingPasswordDialog.js => ChangeSpendingPasswordDialog.ts} | 0 .../settings/{DelegateWalletButton.js => DelegateWalletButton.ts} | 0 .../wallet/settings/{DeleteWallet.js => DeleteWallet.ts} | 0 .../{DeleteWalletConfirmation.js => DeleteWalletConfirmation.ts} | 0 .../{ExportWalletToFileDialog.js => ExportWalletToFileDialog.ts} | 0 .../wallet/settings/{ICOPublicKeyBox.js => ICOPublicKeyBox.ts} | 0 .../settings/{ICOPublicKeyDialog.js => ICOPublicKeyDialog.ts} | 0 ...odeDialog.messages.js => ICOPublicKeyQRCodeDialog.messages.ts} | 0 .../{ICOPublicKeyQRCodeDialog.js => ICOPublicKeyQRCodeDialog.ts} | 0 .../wallet/settings/{PublicKeyField.js => PublicKeyField.ts} | 0 .../settings/{PublicKeyFieldSkin.js => PublicKeyFieldSkin.ts} | 0 .../settings/{SetWalletPassword.js => SetWalletPassword.ts} | 0 .../{UndelegateWalletButton.js => UndelegateWalletButton.ts} | 0 ...onfirmationDialog.js => UndelegateWalletConfirmationDialog.ts} | 0 ...ateWalletSuccessDialog.js => UndelegateWalletSuccessDialog.ts} | 0 .../wallet/settings/{UnpairWallet.js => UnpairWallet.ts} | 0 .../settings/{WalletPublicKeyBox.js => WalletPublicKeyBox.ts} | 0 .../{WalletPublicKeyDialog.js => WalletPublicKeyDialog.ts} | 0 ...letPublicKeyQRCodeDialog.js => WalletPublicKeyQRCodeDialog.ts} | 0 ...eryPhraseStep1Dialog.js => WalletRecoveryPhraseStep1Dialog.ts} | 0 ...eryPhraseStep2Dialog.js => WalletRecoveryPhraseStep2Dialog.ts} | 0 ...eryPhraseStep3Dialog.js => WalletRecoveryPhraseStep3Dialog.ts} | 0 ...eryPhraseStep4Dialog.js => WalletRecoveryPhraseStep4Dialog.ts} | 0 ...icationWidget.js => WalletRecoveryPhraseVerificationWidget.ts} | 0 .../wallet/settings/{WalletSettings.js => WalletSettings.ts} | 0 ...alletSettingsRemoveButton.js => WalletSettingsRemoveButton.ts} | 0 ...rmationDialog.js => WalletSettingsRemoveConfirmationDialog.ts} | 0 .../wallet/skins/{AmountInputSkin.js => AmountInputSkin.ts} | 0 .../wallet/summary/{WalletSummary.js => WalletSummary.ts} | 0 .../summary/{WalletSummaryAsset.js => WalletSummaryAsset.ts} | 0 .../{WalletSummaryCurrency.js => WalletSummaryCurrency.ts} | 0 .../summary/{WalletSummaryHeader.js => WalletSummaryHeader.ts} | 0 .../wallet-no-tokens/{WalletNoTokens.js => WalletNoTokens.ts} | 0 ...alletTokenPicker.messages.js => WalletTokenPicker.messages.ts} | 0 ...{WalletTokenPicker.stories.js => WalletTokenPicker.stories.ts} | 0 .../{WalletTokenPicker.js => WalletTokenPicker.ts} | 0 ...{WalletTokenPickerCheckbox.js => WalletTokenPickerCheckbox.ts} | 0 .../wallet/tokens/wallet-token-picker/{const.js => const.ts} | 0 .../wallet/tokens/wallet-token-picker/{helpers.js => helpers.ts} | 0 .../tokens/wallet-token-picker/{hooks.spec.js => hooks.spec.ts} | 0 .../wallet/tokens/wallet-token-picker/{hooks.js => hooks.ts} | 0 .../wallet/tokens/wallet-token-picker/{types.js => types.ts} | 0 .../{WalletToken.messages.js => WalletToken.messages.ts} | 0 .../wallet/tokens/wallet-token/{WalletToken.js => WalletToken.ts} | 0 .../wallet-token/{WalletTokenFooter.js => WalletTokenFooter.ts} | 0 .../wallet-token/{WalletTokenHeader.js => WalletTokenHeader.ts} | 0 .../wallet/tokens/wallet-token/{helpers.js => helpers.ts} | 0 ...{WalletTokensList.messages.js => WalletTokensList.messages.ts} | 0 .../{WalletTokensList.js => WalletTokensList.ts} | 0 .../{WalletTokensSearch.js => WalletTokensSearch.ts} | 0 .../tokens/wallet-tokens/{WalletTokens.js => WalletTokens.ts} | 0 .../{CancelTransactionButton.js => CancelTransactionButton.ts} | 0 ...nfirmationDialog.js => CancelTransactionConfirmationDialog.ts} | 0 .../wallet/transactions/{FilterButton.js => FilterButton.ts} | 0 .../wallet/transactions/{FilterDialog.js => FilterDialog.ts} | 0 .../transactions/{FilterResultInfo.js => FilterResultInfo.ts} | 0 .../wallet/transactions/{Transaction.js => Transaction.ts} | 0 .../{TransactionTypeIcon.js => TransactionTypeIcon.ts} | 0 .../{WalletNoTransactions.js => WalletNoTransactions.ts} | 0 .../transactions/{WalletTransactions.js => WalletTransactions.ts} | 0 .../{WalletTransactionsHeader.js => WalletTransactionsHeader.ts} | 0 .../{WalletTransactionsList.js => WalletTransactionsList.ts} | 0 .../{WalletTransactionsSearch.js => WalletTransactionsSearch.ts} | 0 .../metadata/{MetadataValueView.js => MetadataValueView.ts} | 0 .../{TransactionMetadataView.js => TransactionMetadataView.ts} | 0 .../{SimpleTransactionList.js => SimpleTransactionList.ts} | 0 .../{VirtualTransactionList.js => VirtualTransactionList.ts} | 0 .../app/components/wallet/transactions/{types.js => types.ts} | 0 .../{TransferFundsStep1Dialog.js => TransferFundsStep1Dialog.ts} | 0 .../{TransferFundsStep2Dialog.js => TransferFundsStep2Dialog.ts} | 0 .../app/components/wallet/utxo/{WalletUtxo.js => WalletUtxo.ts} | 0 .../wallet/utxo/{WalletUtxoCursor.js => WalletUtxoCursor.ts} | 0 .../utxo/{WalletUtxoDescription.js => WalletUtxoDescription.ts} | 0 .../wallet/utxo/{WalletUtxoTick.js => WalletUtxoTick.ts} | 0 .../wallet/utxo/{WalletUtxoTooltip.js => WalletUtxoTooltip.ts} | 0 .../wallet/wallet-create/{ConfigDialog.js => ConfigDialog.ts} | 0 .../wallet/wallet-create/{HashDialog.js => HashDialog.ts} | 0 .../{InstructionsDialog.js => InstructionsDialog.ts} | 0 .../wallet-create/{MnemonicsDialog.js => MnemonicsDialog.ts} | 0 .../wallet/wallet-create/{TemplateDialog.js => TemplateDialog.ts} | 0 .../wallet/wallet-create/{ValidateDialog.js => ValidateDialog.ts} | 0 .../{WalletCreateDialog.js => WalletCreateDialog.ts} | 0 .../wallet-create/{WalletCreateSteps.js => WalletCreateSteps.ts} | 0 .../{WalletImportFileDialog.js => WalletImportFileDialog.ts} | 0 .../{WalletSelectImportDialog.js => WalletSelectImportDialog.ts} | 0 .../{ConfigurationDialog.js => ConfigurationDialog.ts} | 0 .../wallet-restore/{MnemonicsDialog.js => MnemonicsDialog.ts} | 0 .../wallet/wallet-restore/{SuccessDialog.js => SuccessDialog.ts} | 0 .../wallet-restore/{WalletTypeDialog.js => WalletTypeDialog.ts} | 0 .../widgets/{ConfirmationDialog.js => ConfirmationDialog.ts} | 0 .../widgets/{WalletRestoreDialog.js => WalletRestoreDialog.ts} | 0 .../widgets/{WalletRestoreSteps.js => WalletRestoreSteps.ts} | 0 .../components/widgets/{BackToTopButton.js => BackToTopButton.ts} | 0 .../widgets/{BigButtonForDialogs.js => BigButtonForDialogs.ts} | 0 .../app/components/widgets/{BorderedBox.js => BorderedBox.ts} | 0 .../app/components/widgets/{ButtonLink.js => ButtonLink.ts} | 0 .../components/widgets/{CountdownWidget.js => CountdownWidget.ts} | 0 source/renderer/app/components/widgets/{Dialog.js => Dialog.ts} | 0 .../widgets/{DialogBackButton.js => DialogBackButton.ts} | 0 .../widgets/{DialogCloseButton.js => DialogCloseButton.ts} | 0 .../widgets/{ExternalLinkButton.js => ExternalLinkButton.ts} | 0 ...ttedHTMLMessageWithLink.js => FormattedHTMLMessageWithLink.ts} | 0 .../{FullyDecentralizedEffect.js => FullyDecentralizedEffect.ts} | 0 .../components/widgets/{LoadingSpinner.js => LoadingSpinner.ts} | 0 .../app/components/widgets/{NewsFeedIcon.js => NewsFeedIcon.ts} | 0 .../widgets/{NodeSyncStatusIcon.js => NodeSyncStatusIcon.ts} | 0 .../app/components/widgets/{ProgressBar.js => ProgressBar.ts} | 0 .../widgets/{ProgressBarLarge.js => ProgressBarLarge.ts} | 0 .../renderer/app/components/widgets/{RadioSet.js => RadioSet.ts} | 0 source/renderer/app/components/widgets/{Slider.js => Slider.ts} | 0 .../app/components/widgets/{TadaButton.js => TadaButton.ts} | 0 ...alletTestEnvironmentLabel.js => WalletTestEnvironmentLabel.ts} | 0 .../widgets/{WholeSelectionText.js => WholeSelectionText.ts} | 0 .../widgets/forms/{AssetsDropdown.js => AssetsDropdown.ts} | 0 .../widgets/forms/{FileUploadWidget.js => FileUploadWidget.ts} | 0 .../forms/{FormFieldSkinTooltip.js => FormFieldSkinTooltip.ts} | 0 .../widgets/forms/{ImageUploadWidget.js => ImageUploadWidget.ts} | 0 .../forms/{InlineEditingDropdown.js => InlineEditingDropdown.ts} | 0 .../forms/{InlineEditingInput.js => InlineEditingInput.ts} | 0 .../{InlineEditingSmallInput.js => InlineEditingSmallInput.ts} | 0 .../forms/{ItemDropdownOption.js => ItemDropdownOption.ts} | 0 .../widgets/forms/{ItemsDropdown.js => ItemsDropdown.ts} | 0 .../forms/{MnemonicInputWidget.js => MnemonicInputWidget.ts} | 0 .../components/widgets/forms/{NormalSwitch.js => NormalSwitch.ts} | 0 .../widgets/forms/{PasswordInput.js => PasswordInput.ts} | 0 .../app/components/widgets/forms/{PinCode.js => PinCode.ts} | 0 .../forms/{ProfileSettingsForm.js => ProfileSettingsForm.ts} | 0 .../widgets/forms/{ReadOnlyInput.js => ReadOnlyInput.ts} | 0 .../app/components/widgets/forms/{TinyButton.js => TinyButton.ts} | 0 .../components/widgets/forms/{TinyCheckbox.js => TinyCheckbox.ts} | 0 .../widgets/forms/{TinyDatePicker.js => TinyDatePicker.ts} | 0 .../app/components/widgets/forms/{TinyInput.js => TinyInput.ts} | 0 .../app/components/widgets/forms/{TinySelect.js => TinySelect.ts} | 0 .../app/components/widgets/forms/{TinySwitch.js => TinySwitch.ts} | 0 .../widgets/forms/{WalletsDropdown.js => WalletsDropdown.ts} | 0 .../forms/{WalletsDropdownLabel.js => WalletsDropdownLabel.ts} | 0 .../notification-dot/{NotificationDot.js => NotificationDot.ts} | 0 .../app/components/widgets/splash/{Splash.js => Splash.ts} | 0 source/renderer/app/config/{assetsConfig.js => assetsConfig.ts} | 0 source/renderer/app/config/{cryptoConfig.js => cryptoConfig.ts} | 0 .../{currencyConfig.coinapi.js => currencyConfig.coinapi.ts} | 0 .../{currencyConfig.coingecko.js => currencyConfig.coingecko.ts} | 0 .../config/{currencyConfig.nomics.js => currencyConfig.nomics.ts} | 0 .../renderer/app/config/{currencyConfig.js => currencyConfig.ts} | 0 ...{generateStakePoolFakeData.js => generateStakePoolFakeData.ts} | 0 .../config/{hardwareWalletsConfig.js => hardwareWalletsConfig.ts} | 0 source/renderer/app/config/{numbersConfig.js => numbersConfig.ts} | 0 source/renderer/app/config/{profileConfig.js => profileConfig.ts} | 0 source/renderer/app/config/{sidebarConfig.js => sidebarConfig.ts} | 0 source/renderer/app/config/{stakingConfig.js => stakingConfig.ts} | 0 .../{stakingStakePools.dummy.js => stakingStakePools.dummy.ts} | 0 source/renderer/app/config/{timingConfig.js => timingConfig.ts} | 0 source/renderer/app/config/{topBarConfig.js => topBarConfig.ts} | 0 source/renderer/app/config/{txnsConfig.js => txnsConfig.ts} | 0 source/renderer/app/config/{urlsConfig.js => urlsConfig.ts} | 0 source/renderer/app/config/{utxoConfig.js => utxoConfig.ts} | 0 source/renderer/app/config/{votingConfig.js => votingConfig.ts} | 0 .../{walletNavigationConfig.js => walletNavigationConfig.ts} | 0 ...icationConfig.js => walletRecoveryPhraseVerificationConfig.ts} | 0 .../app/config/{walletRestoreConfig.js => walletRestoreConfig.ts} | 0 source/renderer/app/config/{walletsConfig.js => walletsConfig.ts} | 0 source/renderer/app/containers/{MainLayout.js => MainLayout.ts} | 0 source/renderer/app/containers/{Root.js => Root.ts} | 0 .../app/containers/{TopBarContainer.js => TopBarContainer.ts} | 0 .../appUpdate/{AppUpdateContainer.js => AppUpdateContainer.ts} | 0 ...SettingsDialogContainer.js => AssetSettingsDialogContainer.ts} | 0 .../app/containers/loading/{LoadingPage.js => LoadingPage.ts} | 0 .../loading/{NoDiskSpaceErrorPage.js => NoDiskSpaceErrorPage.ts} | 0 .../{SyncingConnectingPage.js => SyncingConnectingPage.ts} | 0 .../loading/{SystemTimeErrorPage.js => SystemTimeErrorPage.ts} | 0 .../news/{NewsFeedContainer.js => NewsFeedContainer.ts} | 0 .../news/{NewsOverlayContainer.js => NewsOverlayContainer.ts} | 0 .../{NotificationsContainer.js => NotificationsContainer.ts} | 0 .../{DataLayerMigrationPage.js => DataLayerMigrationPage.ts} | 0 .../profile/{InitialSettingsPage.js => InitialSettingsPage.ts} | 0 .../containers/profile/{TermsOfUsePage.js => TermsOfUsePage.ts} | 0 .../renderer/app/containers/settings/{Settings.js => Settings.ts} | 0 .../categories/{DisplaySettingsPage.js => DisplaySettingsPage.ts} | 0 .../categories/{GeneralSettingsPage.js => GeneralSettingsPage.ts} | 0 .../{SecuritySettingsPage.js => SecuritySettingsPage.ts} | 0 .../{StakePoolsSettingsPage.js => StakePoolsSettingsPage.ts} | 0 .../categories/{SupportSettingsPage.js => SupportSettingsPage.ts} | 0 .../{TermsOfUseSettingsPage.js => TermsOfUseSettingsPage.ts} | 0 .../categories/{WalletsSettingsPage.js => WalletsSettingsPage.ts} | 0 .../splash/{SplashNetworkPage.js => SplashNetworkPage.ts} | 0 .../staking/{DelegationCenterPage.js => DelegationCenterPage.ts} | 0 ...{RedeemItnRewardsContainer.js => RedeemItnRewardsContainer.ts} | 0 .../staking/{StakePoolsListPage.js => StakePoolsListPage.ts} | 0 source/renderer/app/containers/staking/{Staking.js => Staking.ts} | 0 .../staking/{StakingCountdownPage.js => StakingCountdownPage.ts} | 0 .../staking/{StakingEpochsPage.js => StakingEpochsPage.ts} | 0 .../containers/staking/{StakingInfoPage.js => StakingInfoPage.ts} | 0 .../staking/{StakingRewardsPage.js => StakingRewardsPage.ts} | 0 ...DialogContainer.js => DelegationSetupWizardDialogContainer.ts} | 0 .../{NoWalletsContainer.js => NoWalletsContainer.ts} | 0 ...nUnavailableContainer.js => RedemptionUnavailableContainer.ts} | 0 ...p1ConfigurationContainer.js => Step1ConfigurationContainer.ts} | 0 ...tep2ConfirmationContainer.js => Step2ConfirmationContainer.ts} | 0 .../{Step3ResultContainer.js => Step3ResultContainer.ts} | 0 .../app/containers/static/{AboutDialog.js => AboutDialog.ts} | 0 ...{DaedalusDiagnosticsDialog.js => DaedalusDiagnosticsDialog.ts} | 0 .../{VotingRegistrationPage.js => VotingRegistrationPage.ts} | 0 ...ionDialogContainer.js => VotingRegistrationDialogContainer.ts} | 0 ...eateCertificatePage.js => PaperWalletCreateCertificatePage.ts} | 0 .../wallet/{TransferFundsPage.js => TransferFundsPage.ts} | 0 source/renderer/app/containers/wallet/{Wallet.js => Wallet.ts} | 0 .../app/containers/wallet/{WalletAddPage.js => WalletAddPage.ts} | 0 .../wallet/{WalletReceivePage.js => WalletReceivePage.ts} | 0 .../containers/wallet/{WalletSendPage.js => WalletSendPage.ts} | 0 .../wallet/{WalletSettingsPage.js => WalletSettingsPage.ts} | 0 .../wallet/{WalletSummaryPage.js => WalletSummaryPage.ts} | 0 .../wallet/{WalletTokensPage.js => WalletTokensPage.ts} | 0 .../{WalletTransactionsPage.js => WalletTransactionsPage.ts} | 0 .../containers/wallet/{WalletUtxoPage.js => WalletUtxoPage.ts} | 0 ...letBackupDialogContainer.js => WalletBackupDialogContainer.ts} | 0 ...tConnectDialogContainer.js => WalletConnectDialogContainer.ts} | 0 ...letCreateDialogContainer.js => WalletCreateDialogContainer.ts} | 0 ...ateDialogContainerOld.js => WalletCreateDialogContainerOld.ts} | 0 ...letImportDialogContainer.js => WalletImportDialogContainer.ts} | 0 ...tRestoreDialogContainer.js => WalletRestoreDialogContainer.ts} | 0 ...reDialogContainerOld.js => WalletRestoreDialogContainerOld.ts} | 0 ...ialogContainer.js => WalletSendConfirmationDialogContainer.ts} | 0 ...{CompletionDialogContainer.js => CompletionDialogContainer.ts} | 0 ...tructionsDialogContainer.js => InstructionsDialogContainer.ts} | 0 .../{PrintDialogContainer.js => PrintDialogContainer.ts} | 0 ...swordDialogContainer.js => SecuringPasswordDialogContainer.ts} | 0 ...ificationDialogContainer.js => VerificationDialogContainer.ts} | 0 ...ialogContainer.js => ChangeSpendingPasswordDialogContainer.ts} | 0 ...eteWalletDialogContainer.js => DeleteWalletDialogContainer.ts} | 0 ...ileDialogContainer.js => ExportWalletToFileDialogContainer.ts} | 0 .../{PublicKeyDialogContainer.js => PublicKeyDialogContainer.ts} | 0 ...QRCodeDialogContainer.js => PublicKeyQRCodeDialogContainer.ts} | 0 ...alletDialogContainer.js => UndelegateWalletDialogContainer.ts} | 0 ...airWalletDialogContainer.js => UnpairWalletDialogContainer.ts} | 0 ...ecoveryPhraseContainer.js => WalletRecoveryPhraseContainer.ts} | 0 ...nsferFundsStep1Container.js => TransferFundsStep1Container.ts} | 0 ...nsferFundsStep2Container.js => TransferFundsStep2Container.ts} | 0 .../{ConfigDialogContainer.js => ConfigDialogContainer.ts} | 0 .../{HashDialogContainer.js => HashDialogContainer.ts} | 0 ...tructionsDialogContainer.js => InstructionsDialogContainer.ts} | 0 .../{MnemonicsDialogContainer.js => MnemonicsDialogContainer.ts} | 0 .../{TemplateDialogContainer.js => TemplateDialogContainer.ts} | 0 .../{ValidateDialogContainer.js => ValidateDialogContainer.ts} | 0 ...ileImportStepContainer.js => WalletFileImportStepContainer.ts} | 0 ...tImportStepContainer.js => WalletSelectImportStepContainer.ts} | 0 ...tepConfigurationContainer.js => StepConfigurationContainer.ts} | 0 .../{StepMnemonicsContainer.js => StepMnemonicsContainer.ts} | 0 .../{StepSuccessContainer.js => StepSuccessContainer.ts} | 0 .../{StepWalletTypeContainer.js => StepWalletTypeContainer.ts} | 0 source/renderer/app/domains/{ApiError.js => ApiError.ts} | 0 source/renderer/app/domains/{Asset.js => Asset.ts} | 0 source/renderer/app/domains/{News.js => News.ts} | 0 source/renderer/app/domains/{Profile.js => Profile.ts} | 0 source/renderer/app/domains/{StakePool.js => StakePool.ts} | 0 source/renderer/app/domains/{User.js => User.ts} | 0 source/renderer/app/domains/{Wallet.js => Wallet.ts} | 0 .../renderer/app/domains/{WalletAddress.js => WalletAddress.ts} | 0 .../app/domains/{WalletTransaction.js => WalletTransaction.ts} | 0 .../__mocks__/{react-svg-inline.js => react-svg-inline.ts} | 0 .../app/features/discreet-mode/api/{index.js => index.ts} | 0 .../renderer/app/features/discreet-mode/{config.js => config.ts} | 0 .../app/features/discreet-mode/{context.js => context.ts} | 0 .../app/features/discreet-mode/{feature.js => feature.ts} | 0 source/renderer/app/features/discreet-mode/{index.js => index.ts} | 0 .../{integration-tests.spec.js => integration-tests.spec.ts} | 0 .../{defaultReplacer.spec.js => defaultReplacer.spec.ts} | 0 .../replacers/{defaultReplacer.js => defaultReplacer.ts} | 0 ...{discreetWalletAmount.spec.js => discreetWalletAmount.spec.ts} | 0 .../{discreetWalletAmount.js => discreetWalletAmount.ts} | 0 ...{discreetWalletTokenAmount.js => discreetWalletTokenAmount.ts} | 0 source/renderer/app/features/discreet-mode/{types.js => types.ts} | 0 ...{DiscreetModeFeatureInject.js => DiscreetModeFeatureInject.ts} | 0 ...{DiscreetTokenWalletAmount.js => DiscreetTokenWalletAmount.ts} | 0 .../ui/{DiscreetValue.story.js => DiscreetValue.story.ts} | 0 .../discreet-mode/ui/{DiscreetValue.js => DiscreetValue.ts} | 0 .../ui/{DiscreetWalletAmount.js => DiscreetWalletAmount.ts} | 0 ...tToggleTopBar.messages.js => DiscreetToggleTopBar.messages.ts} | 0 .../{DiscreetToggleTopBar.js => DiscreetToggleTopBar.ts} | 0 .../{DiscreetModeToggle.story.js => DiscreetModeToggle.story.ts} | 0 .../{DiscreetModeToggle.js => DiscreetModeToggle.ts} | 0 .../renderer/app/features/discreet-mode/ui/{index.js => index.ts} | 0 .../discreet-mode/ui/{withDiscreetMode.js => withDiscreetMode.ts} | 0 source/renderer/app/features/{index.js => index.ts} | 0 .../app/features/local-storage/{context.js => context.ts} | 0 source/renderer/app/features/local-storage/{index.js => index.ts} | 0 source/renderer/app/features/local-storage/{types.js => types.ts} | 0 ...{BrowserLocalStorageBridge.js => BrowserLocalStorageBridge.ts} | 0 .../renderer/app/features/local-storage/ui/{index.js => index.ts} | 0 .../app/i18n/{LocalizableError.js => LocalizableError.ts} | 0 source/renderer/app/i18n/{errors.js => errors.ts} | 0 .../renderer/app/i18n/{global-messages.js => global-messages.ts} | 0 source/renderer/app/i18n/{translations.js => translations.ts} | 0 source/renderer/app/i18n/{types.js => types.ts} | 0 source/renderer/app/{index.js => index.ts} | 0 .../{bugReportRequestChannel.js => bugReportRequestChannel.ts} | 0 source/renderer/app/ipc/{cardano.ipc.js => cardano.ipc.ts} | 0 .../renderer/app/ipc/{control-ui-parts.js => control-ui-parts.ts} | 0 .../ipc/{downloadManagerChannel.js => downloadManagerChannel.ts} | 0 ...{electronStoreConversation.js => electronStoreConversation.ts} | 0 ...gationChannel.js => enableApplicationMenuNavigationChannel.ts} | 0 ...{generateAddressPDFChannel.js => generateAddressPDFChannel.ts} | 0 .../app/ipc/{generateCsvChannel.js => generateCsvChannel.ts} | 0 .../{generateFileMetaChannel.js => generateFileMetaChannel.ts} | 0 ...eneratePaperWalletChannel.js => generatePaperWalletChannel.ts} | 0 .../{generateVotingPDFChannel.js => generateVotingPDFChannel.ts} | 0 ...onReportChannel.js => generateWalletMigrationReportChannel.ts} | 0 .../app/ipc/{get-gpu-status.ipc.js => get-gpu-status.ipc.ts} | 0 .../ipc/{getBlockReplayChannel.js => getBlockReplayChannel.ts} | 0 ...pDirectoryPathChannel.js => getDesktopDirectoryPathChannel.ts} | 0 .../app/ipc/{getDiskSpaceChannel.js => getDiskSpaceChannel.ts} | 0 .../{getHardwareWalletChannel.js => getHardwareWalletChannel.ts} | 0 ...etRecoveryWalletIdChannel.js => getRecoveryWalletIdChannel.ts} | 0 ...ateDirectoryPathChannel.js => getStateDirectoryPathChannel.ts} | 0 .../ipc/{getSystemLocaleChannel.js => getSystemLocaleChannel.ts} | 0 .../app/ipc/{introspect-address.js => introspect-address.ts} | 0 .../app/ipc/lib/{RendererIpcChannel.js => RendererIpcChannel.ts} | 0 .../{RendererIpcConversation.js => RendererIpcConversation.ts} | 0 source/renderer/app/ipc/{loadAsset.js => loadAsset.ts} | 0 source/renderer/app/ipc/{logs.ipc.js => logs.ipc.ts} | 0 .../ipc/{manageAppUpdateChannel.js => manageAppUpdateChannel.ts} | 0 .../app/ipc/{open-external-url.js => open-external-url.ts} | 0 .../app/ipc/{open-local-directory.js => open-local-directory.ts} | 0 .../{rebuild-application-menu.js => rebuild-application-menu.ts} | 0 .../ipc/{saveQRCodeImageChannel.js => saveQRCodeImageChannel.ts} | 0 ...etStateSnapshotLogChannel.js => setStateSnapshotLogChannel.ts} | 0 ...{show-file-dialog-channels.js => show-file-dialog-channels.ts} | 0 source/renderer/app/{routes-config.js => routes-config.ts} | 0 .../renderer/app/stores/{AddressesStore.js => AddressesStore.ts} | 0 source/renderer/app/stores/{AppStore.js => AppStore.ts} | 0 .../renderer/app/stores/{AppUpdateStore.js => AppUpdateStore.ts} | 0 source/renderer/app/stores/{AssetsStore.js => AssetsStore.ts} | 0 source/renderer/app/stores/{CurrencyStore.js => CurrencyStore.ts} | 0 .../stores/{HardwareWalletsStore.js => HardwareWalletsStore.ts} | 0 .../app/stores/{NetworkStatusStore.js => NetworkStatusStore.ts} | 0 source/renderer/app/stores/{NewsFeedStore.js => NewsFeedStore.ts} | 0 source/renderer/app/stores/{ProfileStore.js => ProfileStore.ts} | 0 .../app/stores/{SidebarStore.spec.js => SidebarStore.spec.ts} | 0 source/renderer/app/stores/{SidebarStore.js => SidebarStore.ts} | 0 source/renderer/app/stores/{StakingStore.js => StakingStore.ts} | 0 .../app/stores/{TransactionsStore.js => TransactionsStore.ts} | 0 .../renderer/app/stores/{UiDialogsStore.js => UiDialogsStore.ts} | 0 .../stores/{UiNotificationsStore.js => UiNotificationsStore.ts} | 0 .../app/stores/{VotingStore.spec.js => VotingStore.spec.ts} | 0 source/renderer/app/stores/{VotingStore.js => VotingStore.ts} | 0 .../app/stores/{WalletBackupStore.js => WalletBackupStore.ts} | 0 .../stores/{WalletMigrationStore.js => WalletMigrationStore.ts} | 0 .../app/stores/{WalletSettingsStore.js => WalletSettingsStore.ts} | 0 .../app/stores/{WalletsLocalStore.js => WalletsLocalStore.ts} | 0 source/renderer/app/stores/{WalletsStore.js => WalletsStore.ts} | 0 source/renderer/app/stores/{WindowStore.js => WindowStore.ts} | 0 source/renderer/app/stores/{index.js => index.ts} | 0 .../app/stores/lib/{CachedRequest.js => CachedRequest.ts} | 0 .../lib/{LocalizedCachedRequest.js => LocalizedCachedRequest.ts} | 0 .../app/stores/lib/{LocalizedRequest.js => LocalizedRequest.ts} | 0 source/renderer/app/stores/lib/{Reaction.js => Reaction.ts} | 0 source/renderer/app/stores/lib/{Request.js => Request.ts} | 0 source/renderer/app/stores/lib/{Store.js => Store.ts} | 0 source/renderer/app/themes/{daedalus.js => daedalus.ts} | 0 source/renderer/app/themes/daedalus/{cardano.js => cardano.ts} | 0 .../renderer/app/themes/daedalus/{dark-blue.js => dark-blue.ts} | 0 .../app/themes/daedalus/{dark-cardano.js => dark-cardano.ts} | 0 .../themes/daedalus/{flight-candidate.js => flight-candidate.ts} | 0 .../daedalus/{incentivized-testnet.js => incentivized-testnet.ts} | 0 source/renderer/app/themes/daedalus/{index.js => index.ts} | 0 .../renderer/app/themes/daedalus/{light-blue.js => light-blue.ts} | 0 .../themes/daedalus/{shelley-testnet.js => shelley-testnet.ts} | 0 source/renderer/app/themes/daedalus/{white.js => white.ts} | 0 source/renderer/app/themes/daedalus/{yellow.js => yellow.ts} | 0 source/renderer/app/themes/{index.js => index.ts} | 0 source/renderer/app/themes/overrides/{index.js => index.ts} | 0 source/renderer/app/themes/scripts/{check.js => check.ts} | 0 source/renderer/app/themes/scripts/{update.js => update.ts} | 0 source/renderer/app/themes/{types.js => types.ts} | 0 .../app/themes/utils/{checkCreateTheme.js => checkCreateTheme.ts} | 0 source/renderer/app/themes/utils/{constants.js => constants.ts} | 0 source/renderer/app/themes/utils/{copyTheme.js => copyTheme.ts} | 0 .../app/themes/utils/{createShades.js => createShades.ts} | 0 .../renderer/app/themes/utils/{createTheme.js => createTheme.ts} | 0 .../renderer/app/themes/utils/{findUpdates.js => findUpdates.ts} | 0 .../app/themes/utils/{updateThemes.js => updateThemes.ts} | 0 .../app/themes/utils/{updateThemesCLI.js => updateThemesCLI.ts} | 0 .../app/themes/utils/{writeThemeUpdate.js => writeThemeUpdate.ts} | 0 source/renderer/app/types/{LogTypes.js => LogTypes.ts} | 0 .../app/types/{TransactionMetadata.js => TransactionMetadata.ts} | 0 .../{applicationDialogTypes.js => applicationDialogTypes.ts} | 0 .../app/types/{coreSystemInfoTypes.js => coreSystemInfoTypes.ts} | 0 source/renderer/app/types/{currencyTypes.js => currencyTypes.ts} | 0 source/renderer/app/types/{gpuStatus.js => gpuStatus.ts} | 0 source/renderer/app/types/{i18nTypes.js => i18nTypes.ts} | 0 .../app/types/{injectedPropsType.js => injectedPropsType.ts} | 0 source/renderer/app/types/{networkTypes.js => networkTypes.ts} | 0 .../app/types/{notificationTypes.js => notificationTypes.ts} | 0 source/renderer/app/types/{sidebarTypes.js => sidebarTypes.ts} | 0 source/renderer/app/types/{stakingTypes.js => stakingTypes.ts} | 0 .../renderer/app/types/{systemInfoTypes.js => systemInfoTypes.ts} | 0 .../app/types/{walletBackupTypes.js => walletBackupTypes.ts} | 0 .../app/types/{walletExportTypes.js => walletExportTypes.ts} | 0 ...ificationTypes.js => walletRecoveryPhraseVerificationTypes.ts} | 0 .../app/types/{walletRestoreTypes.js => walletRestoreTypes.ts} | 0 .../utils/{ReactToolboxMobxForm.js => ReactToolboxMobxForm.ts} | 0 .../app/utils/{addressPDFGenerator.js => addressPDFGenerator.ts} | 0 source/renderer/app/utils/{assets.js => assets.ts} | 0 source/renderer/app/utils/{asyncForEach.js => asyncForEach.ts} | 0 source/renderer/app/utils/{colors.js => colors.ts} | 0 source/renderer/app/utils/{crypto.js => crypto.ts} | 0 source/renderer/app/utils/{csvGenerator.js => csvGenerator.ts} | 0 .../renderer/app/utils/{domManipulation.js => domManipulation.ts} | 0 .../app/utils/{fileMetaGenerator.js => fileMetaGenerator.ts} | 0 source/renderer/app/utils/{form.js => form.ts} | 0 .../app/utils/{formatCpuInfo.spec.js => formatCpuInfo.spec.ts} | 0 source/renderer/app/utils/{formatCpuInfo.js => formatCpuInfo.ts} | 0 source/renderer/app/utils/{formatters.js => formatters.ts} | 0 .../app/utils/{hardwareWalletUtils.js => hardwareWalletUtils.ts} | 0 .../{humanizeDurationByLocale.js => humanizeDurationByLocale.ts} | 0 source/renderer/app/utils/{i18nContext.js => i18nContext.ts} | 0 source/renderer/app/utils/{index.js => index.ts} | 0 source/renderer/app/utils/{logging.js => logging.ts} | 0 .../renderer/app/utils/mobx-features/{feature.js => feature.ts} | 0 source/renderer/app/utils/mobx-features/{hooks.js => hooks.ts} | 0 .../renderer/app/utils/mobx-features/{reaction.js => reaction.ts} | 0 source/renderer/app/utils/{network.js => network.ts} | 0 source/renderer/app/utils/{numbers.js => numbers.ts} | 0 .../{paperWalletPdfGenerator.js => paperWalletPdfGenerator.ts} | 0 source/renderer/app/utils/{routing.js => routing.ts} | 0 source/renderer/app/utils/{serialize.js => serialize.ts} | 0 source/renderer/app/utils/{shelleyLedger.js => shelleyLedger.ts} | 0 source/renderer/app/utils/{shelleyTrezor.js => shelleyTrezor.ts} | 0 .../renderer/app/utils/{sortComparators.js => sortComparators.ts} | 0 source/renderer/app/utils/{staking.js => staking.ts} | 0 source/renderer/app/utils/{storesUtils.js => storesUtils.ts} | 0 source/renderer/app/utils/{strings.js => strings.ts} | 0 source/renderer/app/utils/{transaction.js => transaction.ts} | 0 .../{transactionsCsvGenerator.js => transactionsCsvGenerator.ts} | 0 source/renderer/app/utils/{utxoUtils.js => utxoUtils.ts} | 0 source/renderer/app/utils/{validations.js => validations.ts} | 0 .../app/utils/{votingPDFGenerator.js => votingPDFGenerator.ts} | 0 source/renderer/app/utils/{waitFor.js => waitFor.ts} | 0 source/renderer/app/utils/{waitForExist.js => waitForExist.ts} | 0 ...ificationUtils.js => walletRecoveryPhraseVerificationUtils.ts} | 0 .../app/utils/{walletSorting.spec.js => walletSorting.spec.ts} | 0 source/renderer/app/utils/{walletSorting.js => walletSorting.ts} | 0 source/renderer/app/utils/{walletUtils.js => walletUtils.ts} | 0 ...letsForStakePoolsRanking.js => walletsForStakePoolsRanking.ts} | 0 source/renderer/{index.js => index.ts} | 0 storybook/{addons.js => addons.ts} | 0 .../addons/DaedalusMenu/{DaedalusMenu.js => DaedalusMenu.ts} | 0 .../DaedalusMenu/{DaedalusMenuStyles.js => DaedalusMenuStyles.ts} | 0 storybook/addons/DaedalusMenu/{index.js => index.ts} | 0 storybook/addons/DaedalusMenu/{register.js => register.ts} | 0 storybook/{config.js => config.ts} | 0 ...eetModeNotificationKnob.js => DiscreetModeNotificationKnob.ts} | 0 .../{DiscreetModeToggleKnob.js => DiscreetModeToggleKnob.ts} | 0 .../stories/_support/{StoryDecorator.js => StoryDecorator.ts} | 0 storybook/stories/_support/{StoryLayout.js => StoryLayout.ts} | 0 storybook/stories/_support/{StoryProvider.js => StoryProvider.ts} | 0 storybook/stories/_support/{StoryWrapper.js => StoryWrapper.ts} | 0 storybook/stories/_support/{config.js => config.ts} | 0 storybook/stories/_support/{environment.js => environment.ts} | 0 .../stories/_support/{profileSettings.js => profileSettings.ts} | 0 storybook/stories/_support/{utils.js => utils.ts} | 0 storybook/stories/assets/{Asset.stories.js => Asset.stories.ts} | 0 ...etSettingsDialog.stories.js => AssetSettingsDialog.stories.ts} | 0 .../common/{ItemsDropdown.stories.js => ItemsDropdown.stories.ts} | 0 .../stories/common/{Widgets.stories.js => Widgets.stories.ts} | 0 ...ransactionRequest.stories.js => TransactionRequest.stories.ts} | 0 storybook/stories/{index.js => index.ts} | 0 .../stories/navigation/{Sidebar.stories.js => Sidebar.stories.ts} | 0 .../{SidebarCategory.stories.js => SidebarCategory.stories.ts} | 0 ...idebarWalletsMenu.stories.js => SidebarWalletsMenu.stories.ts} | 0 .../news/{AlertsOverlay.stories.js => AlertsOverlay.stories.ts} | 0 .../{AppUpdateOverlay.stories.js => AppUpdateOverlay.stories.ts} | 0 .../{IncidentOverlay.stories.js => IncidentOverlay.stories.ts} | 0 .../stories/news/{NewsFeed.stories.js => NewsFeed.stories.ts} | 0 .../news/_utils/{fakeDataNewsFeed.js => fakeDataNewsFeed.ts} | 0 .../stories/news/_utils/{fakeDataUpdate.js => fakeDataUpdate.ts} | 0 storybook/stories/nodes/_utils/{props.js => props.ts} | 0 .../stories/nodes/about/{About.stories.js => About.stories.ts} | 0 ...{TopBarEnvironment.stories.js => TopBarEnvironment.stories.ts} | 0 .../stories/nodes/errors/{Errors.stories.js => Errors.stories.ts} | 0 .../{NoDiskSpaceError.stories.js => NoDiskSpaceError.stories.ts} | 0 .../{SystemTimeError.stories.js => SystemTimeError.stories.ts} | 0 storybook/stories/nodes/{index.js => index.ts} | 0 .../stories/nodes/splash/{Splash.stories.js => Splash.stories.ts} | 0 .../status/{Diagnostics.stories.js => Diagnostics.stories.ts} | 0 .../stories/nodes/status/{Status.stories.js => Status.stories.ts} | 0 .../nodes/syncing/{Syncing.stories.js => Syncing.stories.ts} | 0 ...{SyncingConnecting.stories.js => SyncingConnecting.stories.ts} | 0 ...ataLayerMigration.stories.js => DataLayerMigration.stories.ts} | 0 .../nodes/updates/{Updates.stories.js => Updates.stories.ts} | 0 .../{Notifications.stories.js => Notifications.stories.ts} | 0 .../settings/general/{General.stories.js => General.stories.ts} | 0 storybook/stories/settings/{index.js => index.ts} | 0 .../language/{Language.stories.js => Language.stories.ts} | 0 .../settings/utils/{SettingsWrapper.js => SettingsWrapper.ts} | 0 .../{CountdownParty.stories.js => CountdownParty.stories.ts} | 0 .../{DelegationCenter.stories.js => DelegationCenter.stories.ts} | 0 .../{DelegationSteps.stories.js => DelegationSteps.stories.ts} | 0 .../stories/staking/{Epochs.stories.js => Epochs.stories.ts} | 0 .../stories/staking/{Legacy.stories.js => Legacy.stories.ts} | 0 .../{RedeemItnWallets.stories.js => RedeemItnWallets.stories.ts} | 0 .../stories/staking/{Rewards.stories.js => Rewards.stories.ts} | 0 .../staking/{StakePools.stories.js => StakePools.stories.ts} | 0 .../{StakePoolsTable.stories.js => StakePoolsTable.stories.ts} | 0 .../stories/staking/{Staking.stories.js => Staking.stories.ts} | 0 .../stories/staking/{StakingWrapper.js => StakingWrapper.ts} | 0 .../staking/{Undelegate.stories.js => Undelegate.stories.ts} | 0 storybook/stories/voting/{Voting.stories.js => Voting.stories.ts} | 0 .../_utils/{CreateWalletScreens.js => CreateWalletScreens.ts} | 0 ...hNavigationLayout.js => HardwareWalletWithNavigationLayout.ts} | 0 .../{HardwareWalletsWrapper.js => HardwareWalletsWrapper.ts} | 0 ...alletWithNavigationLayout.js => WalletWithNavigationLayout.ts} | 0 ...alletsTransactionsWrapper.js => WalletsTransactionsWrapper.ts} | 0 .../wallets/_utils/{WalletsWrapper.js => WalletsWrapper.ts} | 0 .../_utils/{defaultWalletProps.js => defaultWalletProps.ts} | 0 .../stories/wallets/addWallet/{Add.stories.js => Add.stories.ts} | 0 .../addWallet/{AddWallet.stories.js => AddWallet.stories.ts} | 0 .../wallets/addWallet/{Create.stories.js => Create.stories.ts} | 0 .../wallets/addWallet/{Import.stories.js => Import.stories.ts} | 0 .../wallets/addWallet/{Restore.stories.js => Restore.stories.ts} | 0 .../addWallet/{RestoreOld.stories.js => RestoreOld.stories.ts} | 0 ...alletExportToFile.stories.js => WalletExportToFile.stories.ts} | 0 .../{HardwareWallets.stories.js => HardwareWallets.stories.ts} | 0 .../{WalletImportFile.stories.js => WalletImportFile.stories.ts} | 0 storybook/stories/wallets/{index.js => index.ts} | 0 ...egacyNotification.stories.js => LegacyNotification.stories.ts} | 0 .../{TransferFunds.stories.js => TransferFunds.stories.ts} | 0 .../{PaperWallets.stories.js => PaperWallets.stories.ts} | 0 .../{WalletReceive.stories.js => WalletReceive.stories.ts} | 0 .../wallets/send/{WalletSend.stories.js => WalletSend.stories.ts} | 0 ...{SetWalletPassword.stories.js => SetWalletPassword.stories.ts} | 0 .../{PublicKeyQRCode.stories.js => PublicKeyQRCode.stories.ts} | 0 .../settings/{WalletDelete.stories.js => WalletDelete.stories.ts} | 0 .../{WalletPublicKey.stories.js => WalletPublicKey.stories.ts} | 0 ...ion.stories.js => WalletRecoveryPhraseVerification.stories.ts} | 0 .../{WalletSettings.stories.js => WalletSettings.stories.ts} | 0 ...tSettingsScreen.stories.js => WalletSettingsScreen.stories.ts} | 0 .../settings/{WalletUnpair.stories.js => WalletUnpair.stories.ts} | 0 .../{WalletSummary.stories.js => WalletSummary.stories.ts} | 0 .../tokens/{WalletTokens.stories.js => WalletTokens.stories.ts} | 0 .../{WalletTokensList.stories.js => WalletTokensList.stories.ts} | 0 .../{Transaction.stories.js => Transaction.stories.ts} | 0 ...nsactionMetadata.stories.js => TransactionMetadata.stories.ts} | 0 .../{TransactionsList.stories.js => TransactionsList.stories.ts} | 0 .../wallets/transactions/{Utxo.stories.js => Utxo.stories.ts} | 0 tests/_utils/{TestDecorator.js => TestDecorator.ts} | 0 tests/addresses/e2e/steps/{addresses.js => addresses.ts} | 0 tests/app/e2e/steps/{about-dialog.js => about-dialog.ts} | 0 .../{app-version-difference.js => app-version-difference.ts} | 0 tests/app/e2e/steps/{cardano-node.js => cardano-node.ts} | 0 tests/app/e2e/steps/{daedalus-process.js => daedalus-process.ts} | 0 .../steps/{data-layer-migration.js => data-layer-migration.ts} | 0 tests/app/e2e/steps/{helpers.js => helpers.ts} | 0 tests/app/e2e/steps/{inject-fault.js => inject-fault.ts} | 0 .../steps/{local-time-difference.js => local-time-difference.ts} | 0 tests/app/e2e/steps/{no-disk-space.js => no-disk-space.ts} | 0 tests/app/e2e/steps/{node-restart.js => node-restart.ts} | 0 ...necting-notification.js => trouble-connecting-notification.ts} | 0 ...le-syncing-notification.js => trouble-syncing-notification.ts} | 0 tests/assets/unit/{assets.spec.js => assets.spec.ts} | 0 tests/common/e2e/steps/{config.js => config.ts} | 0 tests/common/e2e/steps/{helpers.js => helpers.ts} | 0 tests/common/unit/{networks.spec.js => networks.spec.ts} | 0 ...orm-validation.steps.js => mnemonics-form-validation.steps.ts} | 0 .../e2e/steps/{delegation-pending.js => delegation-pending.ts} | 0 tests/delegation/e2e/steps/{delegation.js => delegation.ts} | 0 tests/delegation/e2e/steps/{helpers.js => helpers.ts} | 0 tests/delegation/e2e/steps/{rewards.js => rewards.ts} | 0 tests/delegation/e2e/steps/{stake-pools.js => stake-pools.ts} | 0 .../e2e/steps/{general-settings.js => general-settings.ts} | 0 tests/navigation/e2e/steps/{helpers.js => helpers.ts} | 0 tests/navigation/e2e/steps/{sidebar.js => sidebar.ts} | 0 tests/news/e2e/steps/{newsfeed-steps.js => newsfeed-steps.ts} | 0 ...{paper-wallets-certificate.js => paper-wallets-certificate.ts} | 0 tests/{reporter.js => reporter.ts} | 0 tests/settings/e2e/steps/{basic-setup.js => basic-setup.ts} | 0 tests/settings/e2e/steps/{custom-formats.js => custom-formats.ts} | 0 .../e2e/steps/{general-settings.js => general-settings.ts} | 0 tests/settings/e2e/steps/{helpers.js => helpers.ts} | 0 .../settings/e2e/steps/{select-language.js => select-language.ts} | 0 tests/settings/e2e/steps/{settings.js => settings.ts} | 0 tests/settings/e2e/steps/{terms-of-use.js => terms-of-use.ts} | 0 tests/settings/unit/steps/{file-names.js => file-names.ts} | 0 tests/{setup-common.js => setup-common.ts} | 0 tests/{setup-e2e.js => setup-e2e.ts} | 0 tests/transactions/e2e/steps/{transactions.js => transactions.ts} | 0 tests/transactions/e2e/steps/{utxos.js => utxos.ts} | 0 tests/transactions/unit/steps/{helpers.js => helpers.ts} | 0 tests/transactions/unit/steps/{utxos-chart.js => utxos-chart.ts} | 0 tests/{types.js => types.ts} | 0 ...ce-wallets-notification.js => balance-wallets-notification.ts} | 0 tests/wallets/e2e/steps/{create-wallet.js => create-wallet.ts} | 0 tests/wallets/e2e/steps/{delete-wallet.js => delete-wallet.ts} | 0 tests/wallets/e2e/steps/{helpers.js => helpers.ts} | 0 ...mport-and-migrate-wallets.js => import-and-migrate-wallets.ts} | 0 ...erification-steps.js => recovery-phrase-verification-steps.ts} | 0 tests/wallets/e2e/steps/{restore-wallet.js => restore-wallet.ts} | 0 .../steps/{transfer-funds-wizard.js => transfer-funds-wizard.ts} | 0 .../steps/{wallet-not-responding.js => wallet-not-responding.ts} | 0 tests/wallets/e2e/steps/{wallets-limit.js => wallets-limit.ts} | 0 .../e2e/steps/{wallets-ordering.js => wallets-ordering.ts} | 0 tests/wallets/e2e/steps/{wallets.js => wallets.ts} | 0 tests/wallets/unit/steps/{mnemonics.js => mnemonics.ts} | 0 .../unit/steps/{spending-password.js => spending-password.ts} | 0 tests/wallets/unit/{wallet-utils.spec.js => wallet-utils.spec.ts} | 0 translations/{translation-runner.js => translation-runner.ts} | 0 .../{byron-wallet-importer.js => byron-wallet-importer.ts} | 0 ...{itn-byron-wallet-importer.js => itn-byron-wallet-importer.ts} | 0 ...-shelley-wallet-importer.js => itn-shelley-wallet-importer.ts} | 0 .../{mary-wallet-importer.js => mary-wallet-importer.ts} | 0 utils/api-importer/{mnemonics.js => mnemonics.ts} | 0 .../{shelley-wallet-importer.js => shelley-wallet-importer.ts} | 0 .../{yoroi-wallet-importer.js => yoroi-wallet-importer.ts} | 0 utils/create-news-verification-hashes/{index.js => index.ts} | 0 utils/lockfile-checker/{index.js => index.ts} | 0 1030 files changed, 0 insertions(+), 0 deletions(-) rename source/common/config/{appUpdateConfig.js => appUpdateConfig.ts} (100%) rename source/common/config/crypto/{decrypt.js => decrypt.ts} (100%) rename source/common/config/crypto/{valid-words.en.js => valid-words.en.ts} (100%) rename source/common/config/{downloadManagerConfig.js => downloadManagerConfig.ts} (100%) rename source/common/config/{electron-store.config.js => electron-store.config.ts} (100%) rename source/common/ipc/{api.js => api.ts} (100%) rename source/common/ipc/{constants.js => constants.ts} (100%) rename source/common/ipc/lib/{IpcChannel.js => IpcChannel.ts} (100%) rename source/common/ipc/lib/{IpcConversation.js => IpcConversation.ts} (100%) rename source/common/types/{address-introspection.types.js => address-introspection.types.ts} (100%) rename source/common/types/{address-pdf-request.types.js => address-pdf-request.types.ts} (100%) rename source/common/types/{app-update.types.js => app-update.types.ts} (100%) rename source/common/types/{bug-report-request.types.js => bug-report-request.types.ts} (100%) rename source/common/types/{cardano-node.types.js => cardano-node.types.ts} (100%) rename source/common/types/{csv-request.types.js => csv-request.types.ts} (100%) rename source/common/types/{downloadManager.types.js => downloadManager.types.ts} (100%) rename source/common/types/{electron-store.types.js => electron-store.types.ts} (100%) rename source/common/types/{environment.types.js => environment.types.ts} (100%) rename source/common/types/{file-dialog.types.js => file-dialog.types.ts} (100%) rename source/common/types/{file-meta-request.types.js => file-meta-request.types.ts} (100%) rename source/common/types/{hardware-wallets.types.js => hardware-wallets.types.ts} (100%) rename source/common/types/{locales.types.js => locales.types.ts} (100%) rename source/common/types/{logging.types.js => logging.types.ts} (100%) rename source/common/types/{no-disk-space.types.js => no-disk-space.types.ts} (100%) rename source/common/types/{number.types.js => number.types.ts} (100%) rename source/common/types/{paper-wallet-request.types.js => paper-wallet-request.types.ts} (100%) rename source/common/types/{save-qrCode.types.js => save-qrCode.types.ts} (100%) rename source/common/types/{stateDirectoryPath.types.js => stateDirectoryPath.types.ts} (100%) rename source/common/types/{support-requests.types.js => support-requests.types.ts} (100%) rename source/common/types/{voting-pdf-request.types.js => voting-pdf-request.types.ts} (100%) rename source/common/utils/{environmentCheckers.js => environmentCheckers.ts} (100%) rename source/common/utils/{files.js => files.ts} (100%) rename source/common/utils/{helper.js => helper.ts} (100%) rename source/common/utils/{logging.js => logging.ts} (100%) rename source/common/utils/{reporting.js => reporting.ts} (100%) rename source/main/cardano/{CardanoNode.js => CardanoNode.ts} (100%) rename source/main/cardano/{CardanoSelfnodeLauncher.js => CardanoSelfnodeLauncher.ts} (100%) rename source/main/cardano/{CardanoWalletLauncher.js => CardanoWalletLauncher.ts} (100%) rename source/main/cardano/{config.js => config.ts} (100%) rename source/main/cardano/{setup.js => setup.ts} (100%) rename source/main/cardano/{utils.js => utils.ts} (100%) rename source/main/{config.js => config.ts} (100%) rename source/main/{environment.js => environment.ts} (100%) rename source/main/{index.js => index.ts} (100%) rename source/main/ipc/{bugReportRequestChannel.js => bugReportRequestChannel.ts} (100%) rename source/main/ipc/{cardano.ipc.js => cardano.ipc.ts} (100%) rename source/main/ipc/{compress-logs.js => compress-logs.ts} (100%) rename source/main/ipc/{control-ui-parts.js => control-ui-parts.ts} (100%) rename source/main/ipc/{download-logs.js => download-logs.ts} (100%) rename source/main/ipc/{downloadManagerChannel.js => downloadManagerChannel.ts} (100%) rename source/main/ipc/{electronStoreConversation.js => electronStoreConversation.ts} (100%) rename source/main/ipc/{enableApplicationMenuNavigationChannel.js => enableApplicationMenuNavigationChannel.ts} (100%) rename source/main/ipc/{generateAddressPDFChannel.js => generateAddressPDFChannel.ts} (100%) rename source/main/ipc/{generateCsvChannel.js => generateCsvChannel.ts} (100%) rename source/main/ipc/{generateFileMetaChannel.js => generateFileMetaChannel.ts} (100%) rename source/main/ipc/{generatePaperWalletChannel.js => generatePaperWalletChannel.ts} (100%) rename source/main/ipc/{generateVotingPDFChannel.js => generateVotingPDFChannel.ts} (100%) rename source/main/ipc/{generateWalletMigrationReportChannel.js => generateWalletMigrationReportChannel.ts} (100%) rename source/main/ipc/{get-block-replay-progress.js => get-block-replay-progress.ts} (100%) rename source/main/ipc/{get-disk-space-status.js => get-disk-space-status.ts} (100%) rename source/main/ipc/{get-gpu-status.js => get-gpu-status.ts} (100%) rename source/main/ipc/{get-logs.js => get-logs.ts} (100%) rename source/main/ipc/{getDesktopDirectoryPathChannel.js => getDesktopDirectoryPathChannel.ts} (100%) rename source/main/ipc/{getHardwareWalletChannel.js => getHardwareWalletChannel.ts} (100%) rename source/main/ipc/{getRecoveryWalletIdChannel.js => getRecoveryWalletIdChannel.ts} (100%) rename source/main/ipc/{getStateDirectoryPathChannel.js => getStateDirectoryPathChannel.ts} (100%) rename source/main/ipc/{getSystemLocaleChannel.js => getSystemLocaleChannel.ts} (100%) rename source/main/ipc/{index.js => index.ts} (100%) rename source/main/ipc/{introspect-address.js => introspect-address.ts} (100%) rename source/main/ipc/lib/{MainIpcChannel.js => MainIpcChannel.ts} (100%) rename source/main/ipc/lib/{MainIpcConversation.js => MainIpcConversation.ts} (100%) rename source/main/ipc/{load-asset.js => load-asset.ts} (100%) rename source/main/ipc/{manageAppUpdateChannel.js => manageAppUpdateChannel.ts} (100%) rename source/main/ipc/{open-external-url.js => open-external-url.ts} (100%) rename source/main/ipc/{open-local-directory.js => open-local-directory.ts} (100%) rename source/main/ipc/{rebuild-application-menu.js => rebuild-application-menu.ts} (100%) rename source/main/ipc/{resize-window.js => resize-window.ts} (100%) rename source/main/ipc/{saveQRCodeImageChannel.js => saveQRCodeImageChannel.ts} (100%) rename source/main/ipc/{set-log-state-snapshot.js => set-log-state-snapshot.ts} (100%) rename source/main/ipc/{show-file-dialog-channels.js => show-file-dialog-channels.ts} (100%) rename source/main/menus/{MenuActions.types.js => MenuActions.types.ts} (100%) rename source/main/menus/{osx.js => osx.ts} (100%) rename source/main/menus/{win-linux.js => win-linux.ts} (100%) rename source/main/{preload.js => preload.ts} (100%) rename source/main/utils/{buildAppMenus.js => buildAppMenus.ts} (100%) rename source/main/utils/{config.js => config.ts} (100%) rename source/main/utils/{detectSystemLocale.js => detectSystemLocale.ts} (100%) rename source/main/utils/{downloadManager.js => downloadManager.ts} (100%) rename source/main/utils/{ensureDirectoryExists.js => ensureDirectoryExists.ts} (100%) rename source/main/utils/{getContentMinimumSize.js => getContentMinimumSize.ts} (100%) rename source/main/utils/{getLocale.js => getLocale.ts} (100%) rename source/main/utils/{getTranslation.js => getTranslation.ts} (100%) rename source/main/utils/{handleCheckBlockReplayProgress.js => handleCheckBlockReplayProgress.ts} (100%) rename source/main/utils/{handleDiskSpace.js => handleDiskSpace.ts} (100%) rename source/main/utils/{installChromeExtensions.js => installChromeExtensions.ts} (100%) rename source/main/utils/{logUsedVersion.js => logUsedVersion.ts} (100%) rename source/main/utils/{logging.js => logging.ts} (100%) rename source/main/utils/{mainErrorHandler.js => mainErrorHandler.ts} (100%) rename source/main/utils/{mainLocalStorage.js => mainLocalStorage.ts} (100%) rename source/main/utils/{pdf.js => pdf.ts} (100%) rename source/main/utils/{processes.js => processes.ts} (100%) rename source/main/utils/{rendererErrorHandler.js => rendererErrorHandler.ts} (100%) rename source/main/utils/{restoreKeystore.js => restoreKeystore.ts} (100%) rename source/main/utils/{rtsFlags.js => rtsFlags.ts} (100%) rename source/main/utils/{safeExitWithCode.js => safeExitWithCode.ts} (100%) rename source/main/utils/{setupLogging.js => setupLogging.ts} (100%) rename source/main/windows/{main.js => main.ts} (100%) rename source/main/windows/{windowBounds.js => windowBounds.ts} (100%) rename source/renderer/app/{App.js => App.ts} (100%) rename source/renderer/app/{Routes.js => Routes.ts} (100%) rename source/renderer/app/{ThemeManager.js => ThemeManager.ts} (100%) rename source/renderer/app/{WindowSizeManager.js => WindowSizeManager.ts} (100%) rename source/renderer/app/actions/{addresses-actions.js => addresses-actions.ts} (100%) rename source/renderer/app/actions/{app-actions.js => app-actions.ts} (100%) rename source/renderer/app/actions/{app-update-actions.js => app-update-actions.ts} (100%) rename source/renderer/app/actions/{assets-actions.js => assets-actions.ts} (100%) rename source/renderer/app/actions/{currency-actions.js => currency-actions.ts} (100%) rename source/renderer/app/actions/{dialogs-actions.js => dialogs-actions.ts} (100%) rename source/renderer/app/actions/{hardware-wallets-actions.js => hardware-wallets-actions.ts} (100%) rename source/renderer/app/actions/{index.js => index.ts} (100%) rename source/renderer/app/actions/lib/{Action.js => Action.ts} (100%) rename source/renderer/app/actions/{network-status-actions.js => network-status-actions.ts} (100%) rename source/renderer/app/actions/{notifications-actions.js => notifications-actions.ts} (100%) rename source/renderer/app/actions/{profile-actions.js => profile-actions.ts} (100%) rename source/renderer/app/actions/{router-actions.js => router-actions.ts} (100%) rename source/renderer/app/actions/{sidebar-actions.js => sidebar-actions.ts} (100%) rename source/renderer/app/actions/{staking-actions.js => staking-actions.ts} (100%) rename source/renderer/app/actions/{transactions-actions.js => transactions-actions.ts} (100%) rename source/renderer/app/actions/{voting-actions.js => voting-actions.ts} (100%) rename source/renderer/app/actions/{wallet-backup-actions.js => wallet-backup-actions.ts} (100%) rename source/renderer/app/actions/{wallet-migration-actions.js => wallet-migration-actions.ts} (100%) rename source/renderer/app/actions/{wallet-settings-actions.js => wallet-settings-actions.ts} (100%) rename source/renderer/app/actions/{wallets-actions.js => wallets-actions.ts} (100%) rename source/renderer/app/actions/{wallets-local-actions.js => wallets-local-actions.ts} (100%) rename source/renderer/app/actions/{window-actions.js => window-actions.ts} (100%) rename source/renderer/app/api/addresses/requests/{constructAddress.js => constructAddress.ts} (100%) rename source/renderer/app/api/addresses/requests/{createByronWalletAddress.js => createByronWalletAddress.ts} (100%) rename source/renderer/app/api/addresses/requests/{getAddress.js => getAddress.ts} (100%) rename source/renderer/app/api/addresses/requests/{getAddresses.js => getAddresses.ts} (100%) rename source/renderer/app/api/addresses/requests/{getByronWalletAddresses.js => getByronWalletAddresses.ts} (100%) rename source/renderer/app/api/addresses/requests/{inspectAddress.js => inspectAddress.ts} (100%) rename source/renderer/app/api/addresses/{types.js => types.ts} (100%) rename source/renderer/app/api/{api.js => api.ts} (100%) rename source/renderer/app/api/assets/requests/{getAssets.js => getAssets.ts} (100%) rename source/renderer/app/api/assets/requests/{getUnknownAsset.js => getUnknownAsset.ts} (100%) rename source/renderer/app/api/assets/{types.js => types.ts} (100%) rename source/renderer/app/api/common/{errors.js => errors.ts} (100%) rename source/renderer/app/api/common/{types.js => types.ts} (100%) rename source/renderer/app/api/{errors.js => errors.ts} (100%) rename source/renderer/app/api/{index.js => index.ts} (100%) rename source/renderer/app/api/network/requests/{getNetworkClock.js => getNetworkClock.ts} (100%) rename source/renderer/app/api/network/requests/{getNetworkInfo.js => getNetworkInfo.ts} (100%) rename source/renderer/app/api/network/requests/{getNetworkParameters.js => getNetworkParameters.ts} (100%) rename source/renderer/app/api/network/{types.js => types.ts} (100%) rename source/renderer/app/api/news/requests/{getNews.js => getNews.ts} (100%) rename source/renderer/app/api/news/requests/{getNewsHash.js => getNewsHash.ts} (100%) rename source/renderer/app/api/news/{types.js => types.ts} (100%) rename source/renderer/app/api/nodes/{errors.js => errors.ts} (100%) rename source/renderer/app/api/staking/requests/{checkSmashServerHealth.js => checkSmashServerHealth.ts} (100%) rename source/renderer/app/api/staking/requests/{getDelegationFee.js => getDelegationFee.ts} (100%) rename source/renderer/app/api/staking/requests/{getSmashSettings.js => getSmashSettings.ts} (100%) rename source/renderer/app/api/staking/requests/{getStakePools.js => getStakePools.ts} (100%) rename source/renderer/app/api/staking/requests/{joinStakePool.js => joinStakePool.ts} (100%) rename source/renderer/app/api/staking/requests/{quitStakePool.js => quitStakePool.ts} (100%) rename source/renderer/app/api/staking/requests/{updateSmashSettings.js => updateSmashSettings.ts} (100%) rename source/renderer/app/api/staking/{types.js => types.ts} (100%) rename source/renderer/app/api/transactions/requests/{createByronWalletTransaction.js => createByronWalletTransaction.ts} (100%) rename source/renderer/app/api/transactions/requests/{createExternalTransaction.js => createExternalTransaction.ts} (100%) rename source/renderer/app/api/transactions/requests/{createTransaction.js => createTransaction.ts} (100%) rename source/renderer/app/api/transactions/requests/{deleteLegacyTransaction.js => deleteLegacyTransaction.ts} (100%) rename source/renderer/app/api/transactions/requests/{deleteTransaction.js => deleteTransaction.ts} (100%) rename source/renderer/app/api/transactions/requests/{getByronWalletTransactionFee.js => getByronWalletTransactionFee.ts} (100%) rename source/renderer/app/api/transactions/requests/{getICOPublicKey.js => getICOPublicKey.ts} (100%) rename source/renderer/app/api/transactions/requests/{getLegacyWalletTransactionHistory.js => getLegacyWalletTransactionHistory.ts} (100%) rename source/renderer/app/api/transactions/requests/{getPublicKey.js => getPublicKey.ts} (100%) rename source/renderer/app/api/transactions/requests/{getTransaction.js => getTransaction.ts} (100%) rename source/renderer/app/api/transactions/requests/{getTransactionFee.js => getTransactionFee.ts} (100%) rename source/renderer/app/api/transactions/requests/{getTransactionHistory.js => getTransactionHistory.ts} (100%) rename source/renderer/app/api/transactions/requests/{getWithdrawalHistory.js => getWithdrawalHistory.ts} (100%) rename source/renderer/app/api/transactions/requests/{selectCoins.js => selectCoins.ts} (100%) rename source/renderer/app/api/transactions/{types.js => types.ts} (100%) rename source/renderer/app/api/utils/{apiHelpers.js => apiHelpers.ts} (100%) rename source/renderer/app/api/utils/{externalRequest.js => externalRequest.ts} (100%) rename source/renderer/app/api/utils/{hashing.js => hashing.ts} (100%) rename source/renderer/app/api/utils/{index.js => index.ts} (100%) rename source/renderer/app/api/utils/{localStorage.js => localStorage.ts} (100%) rename source/renderer/app/api/utils/{mnemonics.js => mnemonics.ts} (100%) rename source/renderer/app/api/utils/{patchAdaApi.js => patchAdaApi.ts} (100%) rename source/renderer/app/api/utils/{request.js => request.ts} (100%) rename source/renderer/app/api/utils/{requestV0.js => requestV0.ts} (100%) rename source/renderer/app/api/voting/requests/{createWalletSignature.js => createWalletSignature.ts} (100%) rename source/renderer/app/api/voting/{types.js => types.ts} (100%) rename source/renderer/app/api/wallets/requests/{createHardwareWallet.js => createHardwareWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{createWallet.js => createWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{deleteLegacyWallet.js => deleteLegacyWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{deleteWallet.js => deleteWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{exportWalletAsJSON.js => exportWalletAsJSON.ts} (100%) rename source/renderer/app/api/wallets/requests/{getAccountPublicKey.js => getAccountPublicKey.ts} (100%) rename source/renderer/app/api/wallets/requests/{getByronWalletUtxos.js => getByronWalletUtxos.ts} (100%) rename source/renderer/app/api/wallets/requests/{getCurrencyList.js => getCurrencyList.ts} (100%) rename source/renderer/app/api/wallets/requests/{getCurrencyRate.js => getCurrencyRate.ts} (100%) rename source/renderer/app/api/wallets/requests/{getLegacyWallet.js => getLegacyWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{getLegacyWallets.js => getLegacyWallets.ts} (100%) rename source/renderer/app/api/wallets/requests/{getWallet.js => getWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{getWalletPublicKey.js => getWalletPublicKey.ts} (100%) rename source/renderer/app/api/wallets/requests/{getWalletUtxos.js => getWalletUtxos.ts} (100%) rename source/renderer/app/api/wallets/requests/{getWallets.js => getWallets.ts} (100%) rename source/renderer/app/api/wallets/requests/{importWalletAsJSON.js => importWalletAsJSON.ts} (100%) rename source/renderer/app/api/wallets/requests/{importWalletAsKey.js => importWalletAsKey.ts} (100%) rename source/renderer/app/api/wallets/requests/{restoreByronWallet.js => restoreByronWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{restoreExportedByronWallet.js => restoreExportedByronWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{restoreLegacyWallet.js => restoreLegacyWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{restoreWallet.js => restoreWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{transferFunds.js => transferFunds.ts} (100%) rename source/renderer/app/api/wallets/requests/{transferFundsCalculateFee.js => transferFundsCalculateFee.ts} (100%) rename source/renderer/app/api/wallets/requests/{updateByronSpendingPassword.js => updateByronSpendingPassword.ts} (100%) rename source/renderer/app/api/wallets/requests/{updateByronWallet.js => updateByronWallet.ts} (100%) rename source/renderer/app/api/wallets/requests/{updateSpendingPassword.js => updateSpendingPassword.ts} (100%) rename source/renderer/app/api/wallets/requests/{updateWallet.js => updateWallet.ts} (100%) rename source/renderer/app/api/wallets/{types.js => types.ts} (100%) rename source/renderer/app/components/appUpdate/{AppUpdateOverlay.js => AppUpdateOverlay.ts} (100%) rename source/renderer/app/components/assets/{Asset.js => Asset.ts} (100%) rename source/renderer/app/components/assets/{AssetAmount.js => AssetAmount.ts} (100%) rename source/renderer/app/components/assets/{AssetContent.js => AssetContent.ts} (100%) rename source/renderer/app/components/assets/{AssetSettingsDialog.js => AssetSettingsDialog.ts} (100%) rename source/renderer/app/components/assets/{AssetTransactionConfirmation.js => AssetTransactionConfirmation.ts} (100%) rename source/renderer/app/components/assets/{AssetsTransactionConfirmation.js => AssetsTransactionConfirmation.ts} (100%) rename source/renderer/app/components/dapp/{DappTransactionRequest.js => DappTransactionRequest.ts} (100%) rename source/renderer/app/components/hardware-wallet/{HardwareWalletStatus.js => HardwareWalletStatus.ts} (100%) rename source/renderer/app/components/layout/{CenteredLayout.js => CenteredLayout.ts} (100%) rename source/renderer/app/components/layout/{SidebarLayout.js => SidebarLayout.ts} (100%) rename source/renderer/app/components/layout/{TopBar.js => TopBar.ts} (100%) rename source/renderer/app/components/layout/{TopBarLayout.js => TopBarLayout.ts} (100%) rename source/renderer/app/components/layout/{VerticalFlexContainer.js => VerticalFlexContainer.ts} (100%) rename source/renderer/app/components/loading/no-disk-space-error/{NoDiskSpaceError.js => NoDiskSpaceError.ts} (100%) rename source/renderer/app/components/loading/syncing-connecting/{LogosDisplay.js => LogosDisplay.ts} (100%) rename source/renderer/app/components/loading/syncing-connecting/{ReportIssue.js => ReportIssue.ts} (100%) rename source/renderer/app/components/loading/syncing-connecting/{StatusIcons.js => StatusIcons.ts} (100%) rename source/renderer/app/components/loading/syncing-connecting/{SyncingConnecting.js => SyncingConnecting.ts} (100%) rename source/renderer/app/components/loading/syncing-connecting/{SyncingConnectingBackground.js => SyncingConnectingBackground.ts} (100%) rename source/renderer/app/components/loading/syncing-connecting/{SyncingConnectingStatus.js => SyncingConnectingStatus.ts} (100%) rename source/renderer/app/components/loading/system-time-error/{SystemTimeError.js => SystemTimeError.ts} (100%) rename source/renderer/app/components/navigation/{NavButton.js => NavButton.ts} (100%) rename source/renderer/app/components/navigation/{NavDropdown.js => NavDropdown.ts} (100%) rename source/renderer/app/components/navigation/{Navigation.js => Navigation.ts} (100%) rename source/renderer/app/components/news/{AlertsOverlay.js => AlertsOverlay.ts} (100%) rename source/renderer/app/components/news/{IncidentOverlay.js => IncidentOverlay.ts} (100%) rename source/renderer/app/components/news/{NewsFeed.js => NewsFeed.ts} (100%) rename source/renderer/app/components/news/{NewsItem.js => NewsItem.ts} (100%) rename source/renderer/app/components/news/{UpdateItem.js => UpdateItem.ts} (100%) rename source/renderer/app/components/notifications/{InlineNotification.js => InlineNotification.ts} (100%) rename source/renderer/app/components/notifications/{LegacyBadge.js => LegacyBadge.ts} (100%) rename source/renderer/app/components/notifications/{LegacyNotification.js => LegacyNotification.ts} (100%) rename source/renderer/app/components/notifications/{Notification.js => Notification.ts} (100%) rename source/renderer/app/components/notifications/{NotificationActions.js => NotificationActions.ts} (100%) rename source/renderer/app/components/notifications/{RestoreNotification.js => RestoreNotification.ts} (100%) rename source/renderer/app/components/profile/data-layer-migration/{DataLayerMigrationForm.js => DataLayerMigrationForm.ts} (100%) rename source/renderer/app/components/profile/initial-settings/{InitialSettings.js => InitialSettings.ts} (100%) rename source/renderer/app/components/profile/terms-of-use/{TermsOfUseForm.js => TermsOfUseForm.ts} (100%) rename source/renderer/app/components/profile/terms-of-use/{TermsOfUseText.js => TermsOfUseText.ts} (100%) rename source/renderer/app/components/settings/{SettingsLayout.js => SettingsLayout.ts} (100%) rename source/renderer/app/components/settings/categories/{DisplaySettings.js => DisplaySettings.ts} (100%) rename source/renderer/app/components/settings/categories/{GeneralSettings.js => GeneralSettings.ts} (100%) rename source/renderer/app/components/settings/categories/{SecuritySettings.messages.js => SecuritySettings.messages.ts} (100%) rename source/renderer/app/components/settings/categories/{SecuritySettings.js => SecuritySettings.ts} (100%) rename source/renderer/app/components/settings/categories/{StakePoolsSettings.js => StakePoolsSettings.ts} (100%) rename source/renderer/app/components/settings/categories/{SupportSettings.js => SupportSettings.ts} (100%) rename source/renderer/app/components/settings/categories/{TermsOfUseSettings.js => TermsOfUseSettings.ts} (100%) rename source/renderer/app/components/settings/categories/{WalletsSettings.js => WalletsSettings.ts} (100%) rename source/renderer/app/components/settings/menu/{SecurityMenuItem.js => SecurityMenuItem.ts} (100%) rename source/renderer/app/components/settings/menu/{SettingsMenu.messages.js => SettingsMenu.messages.ts} (100%) rename source/renderer/app/components/settings/menu/{SettingsMenu.js => SettingsMenu.ts} (100%) rename source/renderer/app/components/settings/menu/{SettingsMenuItem.js => SettingsMenuItem.ts} (100%) rename source/renderer/app/components/settings/menu/{hooks.js => hooks.ts} (100%) rename source/renderer/app/components/sidebar/{Sidebar.js => Sidebar.ts} (100%) rename source/renderer/app/components/sidebar/{SidebarCategory.js => SidebarCategory.ts} (100%) rename source/renderer/app/components/sidebar/{SidebarCategoryNetworkInfo.js => SidebarCategoryNetworkInfo.ts} (100%) rename source/renderer/app/components/sidebar/{SidebarCategoryWrapper.messages.js => SidebarCategoryWrapper.messages.ts} (100%) rename source/renderer/app/components/sidebar/{SidebarCategoryWrapper.js => SidebarCategoryWrapper.ts} (100%) rename source/renderer/app/components/sidebar/{SidebarMenu.js => SidebarMenu.ts} (100%) rename source/renderer/app/components/sidebar/{helpers.js => helpers.ts} (100%) rename source/renderer/app/components/sidebar/{types.js => types.ts} (100%) rename source/renderer/app/components/sidebar/wallets/{SidebarWalletMenuItem.js => SidebarWalletMenuItem.ts} (100%) rename source/renderer/app/components/sidebar/wallets/{SidebarWalletsMenu.spec.js => SidebarWalletsMenu.spec.ts} (100%) rename source/renderer/app/components/sidebar/wallets/{SidebarWalletsMenu.js => SidebarWalletsMenu.ts} (100%) rename source/renderer/app/components/sidebar/wallets/{WalletSearch.js => WalletSearch.ts} (100%) rename source/renderer/app/components/sidebar/wallets/{WalletSortButton.js => WalletSortButton.ts} (100%) rename source/renderer/app/components/splash/{SplashNetworkFlight.js => SplashNetworkFlight.ts} (100%) rename source/renderer/app/components/staking/{StakingUnavailable.js => StakingUnavailable.ts} (100%) rename source/renderer/app/components/staking/countdown/{StakingCountdown.js => StakingCountdown.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenter.js => DelegationCenter.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenterBody.js => DelegationCenterBody.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenterHeader.js => DelegationCenterHeader.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenterNoWallets.js => DelegationCenterNoWallets.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{DonutRing.js => DonutRing.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{DropdownMenu.js => DropdownMenu.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{WalletColumn.js => WalletColumn.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{WalletRow.js => WalletRow.ts} (100%) rename source/renderer/app/components/staking/delegation-center/{helpers.js => helpers.ts} (100%) rename source/renderer/app/components/staking/delegation-center/widgets/{WalletAmount.js => WalletAmount.ts} (100%) rename source/renderer/app/components/staking/delegation-center/widgets/{index.js => index.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationSetupWizardDialog.js => DelegationSetupWizardDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsChooseStakePoolDialog.messages.js => DelegationStepsChooseStakePoolDialog.messages.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsChooseStakePoolDialog.js => DelegationStepsChooseStakePoolDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsChooseWalletDialog.js => DelegationStepsChooseWalletDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsConfirmationDialog.messages.js => DelegationStepsConfirmationDialog.messages.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsConfirmationDialog.js => DelegationStepsConfirmationDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsIntroDialog.js => DelegationStepsIntroDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsNotAvailableDialog.js => DelegationStepsNotAvailableDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsSuccessDialog.js => DelegationStepsSuccessDialog.ts} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{OversaturationText.js => OversaturationText.ts} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochs.js => StakingEpochs.ts} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsCurrentEpochData.js => StakingEpochsCurrentEpochData.ts} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsDataTable.js => StakingEpochsDataTable.ts} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsNoData.js => StakingEpochsNoData.ts} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsPreviousEpochData.js => StakingEpochsPreviousEpochData.ts} (100%) rename source/renderer/app/components/staking/epochs/{helpers.js => helpers.ts} (100%) rename source/renderer/app/components/staking/info/{StakingInfo.js => StakingInfo.ts} (100%) rename source/renderer/app/components/staking/info/{StakingInfoCountdown.js => StakingInfoCountdown.ts} (100%) rename source/renderer/app/components/staking/layouts/{StakingWithNavigation.js => StakingWithNavigation.ts} (100%) rename source/renderer/app/components/staking/legacy/{BlockGenerationInfo.js => BlockGenerationInfo.ts} (100%) rename source/renderer/app/components/staking/legacy/{Staking.js => Staking.ts} (100%) rename source/renderer/app/components/staking/legacy/{StakingChart.js => StakingChart.ts} (100%) rename source/renderer/app/components/staking/legacy/{StakingChartTooltip.js => StakingChartTooltip.ts} (100%) rename source/renderer/app/components/staking/legacy/{StakingChartTooltipItem.js => StakingChartTooltipItem.ts} (100%) rename source/renderer/app/components/staking/legacy/{StakingSwitch.js => StakingSwitch.ts} (100%) rename source/renderer/app/components/staking/legacy/{StakingSystemState.js => StakingSystemState.ts} (100%) rename source/renderer/app/components/staking/legacy/{StakingSystemStateElement.js => StakingSystemStateElement.ts} (100%) rename source/renderer/app/components/staking/navigation/{StakingNavigation.js => StakingNavigation.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{LoadingOverlay.js => LoadingOverlay.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{NoWalletsDialog.js => NoWalletsDialog.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{RedemptionUnavailableDialog.js => RedemptionUnavailableDialog.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step1ConfigurationDialog.js => Step1ConfigurationDialog.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step2ConfirmationDialog.js => Step2ConfirmationDialog.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step3FailureDialog.js => Step3FailureDialog.ts} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step3SuccessDialog.js => Step3SuccessDialog.ts} (100%) rename source/renderer/app/components/staking/rewards/{RewardAmount.js => RewardAmount.ts} (100%) rename source/renderer/app/components/staking/rewards/{StakingRewards.js => StakingRewards.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePools.js => StakePools.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsList.js => StakePoolsList.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsRanking.js => StakePoolsRanking.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsRankingLoader.js => StakePoolsRankingLoader.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsSearch.js => StakePoolsSearch.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsTable.js => StakePoolsTable.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsTableBody.js => StakePoolsTableBody.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsTableHeader.js => StakePoolsTableHeader.ts} (100%) rename source/renderer/app/components/staking/stake-pools/{helpers.js => helpers.ts} (100%) rename source/renderer/app/components/staking/widgets/{PoolPopOver.js => PoolPopOver.ts} (100%) rename source/renderer/app/components/staking/widgets/{ThumbPool.js => ThumbPool.ts} (100%) rename source/renderer/app/components/staking/widgets/{ThumbPoolContent.js => ThumbPoolContent.ts} (100%) rename source/renderer/app/components/staking/widgets/{ThumbSelectedPool.js => ThumbSelectedPool.ts} (100%) rename source/renderer/app/components/staking/widgets/{TooltipPool.js => TooltipPool.ts} (100%) rename source/renderer/app/components/static/{About.js => About.ts} (100%) rename source/renderer/app/components/status/{DaedalusDiagnostics.js => DaedalusDiagnostics.ts} (100%) rename source/renderer/app/components/voting/{VotingFooterLinks.js => VotingFooterLinks.ts} (100%) rename source/renderer/app/components/voting/{VotingNoWallets.js => VotingNoWallets.ts} (100%) rename source/renderer/app/components/voting/{VotingRegistrationDialogWizard.js => VotingRegistrationDialogWizard.ts} (100%) rename source/renderer/app/components/voting/{VotingUnavailable.js => VotingUnavailable.ts} (100%) rename source/renderer/app/components/voting/voting-info/{AppStore.messages.js => AppStore.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{AppStore.js => AppStore.ts} (100%) rename source/renderer/app/components/voting/voting-info/{Headline.messages.js => Headline.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{Headline.js => Headline.ts} (100%) rename source/renderer/app/components/voting/voting-info/{RegisterToVote.messages.js => RegisterToVote.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{RegisterToVote.js => RegisterToVote.ts} (100%) rename source/renderer/app/components/voting/voting-info/{ResultsPhase.messages.js => ResultsPhase.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{ResultsPhase.js => ResultsPhase.ts} (100%) rename source/renderer/app/components/voting/voting-info/{SnapshotPhase.messages.js => SnapshotPhase.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{SnapshotPhase.js => SnapshotPhase.ts} (100%) rename source/renderer/app/components/voting/voting-info/{TallyingPhase.messages.js => TallyingPhase.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{TallyingPhase.js => TallyingPhase.ts} (100%) rename source/renderer/app/components/voting/voting-info/{VotingInfo.messages.js => VotingInfo.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{VotingInfo.js => VotingInfo.ts} (100%) rename source/renderer/app/components/voting/voting-info/{VotingPhase.messages.js => VotingPhase.messages.ts} (100%) rename source/renderer/app/components/voting/voting-info/{VotingPhase.js => VotingPhase.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsChooseWallet.js => VotingRegistrationStepsChooseWallet.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsConfirm.js => VotingRegistrationStepsConfirm.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsEnterPinCode.js => VotingRegistrationStepsEnterPinCode.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsQrCode.js => VotingRegistrationStepsQrCode.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsRegister.js => VotingRegistrationStepsRegister.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/{ConfirmationDialog.js => ConfirmationDialog.ts} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/{VotingRegistrationDialog.js => VotingRegistrationDialog.ts} (100%) rename source/renderer/app/components/wallet/{WalletAdd.js => WalletAdd.ts} (100%) rename source/renderer/app/components/wallet/{WalletBackupDialog.js => WalletBackupDialog.ts} (100%) rename source/renderer/app/components/wallet/{WalletConnectDialog.js => WalletConnectDialog.ts} (100%) rename source/renderer/app/components/wallet/{WalletCreateDialog.js => WalletCreateDialog.ts} (100%) rename source/renderer/app/components/wallet/{WalletRestoreDialog.js => WalletRestoreDialog.ts} (100%) rename source/renderer/app/components/wallet/{WalletSendForm.spec.js => WalletSendForm.spec.ts} (100%) rename source/renderer/app/components/wallet/{WalletSendForm.js => WalletSendForm.ts} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletBackupPrivacyWarningDialog.js => WalletBackupPrivacyWarningDialog.ts} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryInstructions.js => WalletRecoveryInstructions.ts} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryPhraseDisplayDialog.js => WalletRecoveryPhraseDisplayDialog.ts} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryPhraseEntryDialog.js => WalletRecoveryPhraseEntryDialog.ts} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryPhraseMnemonic.js => WalletRecoveryPhraseMnemonic.ts} (100%) rename source/renderer/app/components/wallet/file-import/{WalletFileImportDialog.js => WalletFileImportDialog.ts} (100%) rename source/renderer/app/components/wallet/layouts/{WalletWithNavigation.js => WalletWithNavigation.ts} (100%) rename source/renderer/app/components/wallet/navigation/{WalletNavigation.js => WalletNavigation.ts} (100%) rename source/renderer/app/components/wallet/not-responding/{NotResponding.js => NotResponding.ts} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{CompletionDialog.js => CompletionDialog.ts} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{ConfirmationDialog.js => ConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{InstructionsDialog.js => InstructionsDialog.ts} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{PrintDialog.js => PrintDialog.ts} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{SecuringPasswordDialog.js => SecuringPasswordDialog.ts} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{VerificationDialog.js => VerificationDialog.ts} (100%) rename source/renderer/app/components/wallet/receive/{AddressActions.js => AddressActions.ts} (100%) rename source/renderer/app/components/wallet/receive/{AddressRandom.js => AddressRandom.ts} (100%) rename source/renderer/app/components/wallet/receive/{AddressSequential.js => AddressSequential.ts} (100%) rename source/renderer/app/components/wallet/receive/{VirtualAddressesList.js => VirtualAddressesList.ts} (100%) rename source/renderer/app/components/wallet/receive/{WalletReceiveDialog.js => WalletReceiveDialog.ts} (100%) rename source/renderer/app/components/wallet/receive/{WalletReceiveRandom.js => WalletReceiveRandom.ts} (100%) rename source/renderer/app/components/wallet/receive/{WalletReceiveSequential.js => WalletReceiveSequential.ts} (100%) rename source/renderer/app/components/wallet/send-form/{AssetInput.js => AssetInput.ts} (100%) rename source/renderer/app/components/wallet/send-form/{WalletSendAssetsConfirmationDialog.messages.js => WalletSendAssetsConfirmationDialog.messages.ts} (100%) rename source/renderer/app/components/wallet/send-form/{WalletSendAssetsConfirmationDialog.js => WalletSendAssetsConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/send-form/{WalletSendConfirmationDialog.messages.js => WalletSendConfirmationDialog.messages.ts} (100%) rename source/renderer/app/components/wallet/send-form/{WalletSendConfirmationDialog.js => WalletSendConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/send-form/{messages.js => messages.ts} (100%) rename source/renderer/app/components/wallet/settings/{ChangeSpendingPasswordDialog.js => ChangeSpendingPasswordDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{DelegateWalletButton.js => DelegateWalletButton.ts} (100%) rename source/renderer/app/components/wallet/settings/{DeleteWallet.js => DeleteWallet.ts} (100%) rename source/renderer/app/components/wallet/settings/{DeleteWalletConfirmation.js => DeleteWalletConfirmation.ts} (100%) rename source/renderer/app/components/wallet/settings/{ExportWalletToFileDialog.js => ExportWalletToFileDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyBox.js => ICOPublicKeyBox.ts} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyDialog.js => ICOPublicKeyDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyQRCodeDialog.messages.js => ICOPublicKeyQRCodeDialog.messages.ts} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyQRCodeDialog.js => ICOPublicKeyQRCodeDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{PublicKeyField.js => PublicKeyField.ts} (100%) rename source/renderer/app/components/wallet/settings/{PublicKeyFieldSkin.js => PublicKeyFieldSkin.ts} (100%) rename source/renderer/app/components/wallet/settings/{SetWalletPassword.js => SetWalletPassword.ts} (100%) rename source/renderer/app/components/wallet/settings/{UndelegateWalletButton.js => UndelegateWalletButton.ts} (100%) rename source/renderer/app/components/wallet/settings/{UndelegateWalletConfirmationDialog.js => UndelegateWalletConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{UndelegateWalletSuccessDialog.js => UndelegateWalletSuccessDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{UnpairWallet.js => UnpairWallet.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletPublicKeyBox.js => WalletPublicKeyBox.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletPublicKeyDialog.js => WalletPublicKeyDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletPublicKeyQRCodeDialog.js => WalletPublicKeyQRCodeDialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep1Dialog.js => WalletRecoveryPhraseStep1Dialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep2Dialog.js => WalletRecoveryPhraseStep2Dialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep3Dialog.js => WalletRecoveryPhraseStep3Dialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep4Dialog.js => WalletRecoveryPhraseStep4Dialog.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseVerificationWidget.js => WalletRecoveryPhraseVerificationWidget.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletSettings.js => WalletSettings.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletSettingsRemoveButton.js => WalletSettingsRemoveButton.ts} (100%) rename source/renderer/app/components/wallet/settings/{WalletSettingsRemoveConfirmationDialog.js => WalletSettingsRemoveConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/skins/{AmountInputSkin.js => AmountInputSkin.ts} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummary.js => WalletSummary.ts} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummaryAsset.js => WalletSummaryAsset.ts} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummaryCurrency.js => WalletSummaryCurrency.ts} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummaryHeader.js => WalletSummaryHeader.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-no-tokens/{WalletNoTokens.js => WalletNoTokens.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPicker.messages.js => WalletTokenPicker.messages.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPicker.stories.js => WalletTokenPicker.stories.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPicker.js => WalletTokenPicker.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPickerCheckbox.js => WalletTokenPickerCheckbox.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{const.js => const.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{helpers.js => helpers.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{hooks.spec.js => hooks.spec.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{hooks.js => hooks.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{types.js => types.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletToken.messages.js => WalletToken.messages.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletToken.js => WalletToken.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletTokenFooter.js => WalletTokenFooter.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletTokenHeader.js => WalletTokenHeader.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{helpers.js => helpers.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens-list/{WalletTokensList.messages.js => WalletTokensList.messages.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens-list/{WalletTokensList.js => WalletTokensList.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens-search/{WalletTokensSearch.js => WalletTokensSearch.ts} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens/{WalletTokens.js => WalletTokens.ts} (100%) rename source/renderer/app/components/wallet/transactions/{CancelTransactionButton.js => CancelTransactionButton.ts} (100%) rename source/renderer/app/components/wallet/transactions/{CancelTransactionConfirmationDialog.js => CancelTransactionConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/transactions/{FilterButton.js => FilterButton.ts} (100%) rename source/renderer/app/components/wallet/transactions/{FilterDialog.js => FilterDialog.ts} (100%) rename source/renderer/app/components/wallet/transactions/{FilterResultInfo.js => FilterResultInfo.ts} (100%) rename source/renderer/app/components/wallet/transactions/{Transaction.js => Transaction.ts} (100%) rename source/renderer/app/components/wallet/transactions/{TransactionTypeIcon.js => TransactionTypeIcon.ts} (100%) rename source/renderer/app/components/wallet/transactions/{WalletNoTransactions.js => WalletNoTransactions.ts} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactions.js => WalletTransactions.ts} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactionsHeader.js => WalletTransactionsHeader.ts} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactionsList.js => WalletTransactionsList.ts} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactionsSearch.js => WalletTransactionsSearch.ts} (100%) rename source/renderer/app/components/wallet/transactions/metadata/{MetadataValueView.js => MetadataValueView.ts} (100%) rename source/renderer/app/components/wallet/transactions/metadata/{TransactionMetadataView.js => TransactionMetadataView.ts} (100%) rename source/renderer/app/components/wallet/transactions/render-strategies/{SimpleTransactionList.js => SimpleTransactionList.ts} (100%) rename source/renderer/app/components/wallet/transactions/render-strategies/{VirtualTransactionList.js => VirtualTransactionList.ts} (100%) rename source/renderer/app/components/wallet/transactions/{types.js => types.ts} (100%) rename source/renderer/app/components/wallet/transfer-funds/{TransferFundsStep1Dialog.js => TransferFundsStep1Dialog.ts} (100%) rename source/renderer/app/components/wallet/transfer-funds/{TransferFundsStep2Dialog.js => TransferFundsStep2Dialog.ts} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxo.js => WalletUtxo.ts} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoCursor.js => WalletUtxoCursor.ts} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoDescription.js => WalletUtxoDescription.ts} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoTick.js => WalletUtxoTick.ts} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoTooltip.js => WalletUtxoTooltip.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{ConfigDialog.js => ConfigDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{HashDialog.js => HashDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{InstructionsDialog.js => InstructionsDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{MnemonicsDialog.js => MnemonicsDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{TemplateDialog.js => TemplateDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{ValidateDialog.js => ValidateDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{WalletCreateDialog.js => WalletCreateDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-create/{WalletCreateSteps.js => WalletCreateSteps.ts} (100%) rename source/renderer/app/components/wallet/wallet-import/{WalletImportFileDialog.js => WalletImportFileDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-import/{WalletSelectImportDialog.js => WalletSelectImportDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/{ConfigurationDialog.js => ConfigurationDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/{MnemonicsDialog.js => MnemonicsDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/{SuccessDialog.js => SuccessDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/{WalletTypeDialog.js => WalletTypeDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/widgets/{ConfirmationDialog.js => ConfirmationDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/widgets/{WalletRestoreDialog.js => WalletRestoreDialog.ts} (100%) rename source/renderer/app/components/wallet/wallet-restore/widgets/{WalletRestoreSteps.js => WalletRestoreSteps.ts} (100%) rename source/renderer/app/components/widgets/{BackToTopButton.js => BackToTopButton.ts} (100%) rename source/renderer/app/components/widgets/{BigButtonForDialogs.js => BigButtonForDialogs.ts} (100%) rename source/renderer/app/components/widgets/{BorderedBox.js => BorderedBox.ts} (100%) rename source/renderer/app/components/widgets/{ButtonLink.js => ButtonLink.ts} (100%) rename source/renderer/app/components/widgets/{CountdownWidget.js => CountdownWidget.ts} (100%) rename source/renderer/app/components/widgets/{Dialog.js => Dialog.ts} (100%) rename source/renderer/app/components/widgets/{DialogBackButton.js => DialogBackButton.ts} (100%) rename source/renderer/app/components/widgets/{DialogCloseButton.js => DialogCloseButton.ts} (100%) rename source/renderer/app/components/widgets/{ExternalLinkButton.js => ExternalLinkButton.ts} (100%) rename source/renderer/app/components/widgets/{FormattedHTMLMessageWithLink.js => FormattedHTMLMessageWithLink.ts} (100%) rename source/renderer/app/components/widgets/{FullyDecentralizedEffect.js => FullyDecentralizedEffect.ts} (100%) rename source/renderer/app/components/widgets/{LoadingSpinner.js => LoadingSpinner.ts} (100%) rename source/renderer/app/components/widgets/{NewsFeedIcon.js => NewsFeedIcon.ts} (100%) rename source/renderer/app/components/widgets/{NodeSyncStatusIcon.js => NodeSyncStatusIcon.ts} (100%) rename source/renderer/app/components/widgets/{ProgressBar.js => ProgressBar.ts} (100%) rename source/renderer/app/components/widgets/{ProgressBarLarge.js => ProgressBarLarge.ts} (100%) rename source/renderer/app/components/widgets/{RadioSet.js => RadioSet.ts} (100%) rename source/renderer/app/components/widgets/{Slider.js => Slider.ts} (100%) rename source/renderer/app/components/widgets/{TadaButton.js => TadaButton.ts} (100%) rename source/renderer/app/components/widgets/{WalletTestEnvironmentLabel.js => WalletTestEnvironmentLabel.ts} (100%) rename source/renderer/app/components/widgets/{WholeSelectionText.js => WholeSelectionText.ts} (100%) rename source/renderer/app/components/widgets/forms/{AssetsDropdown.js => AssetsDropdown.ts} (100%) rename source/renderer/app/components/widgets/forms/{FileUploadWidget.js => FileUploadWidget.ts} (100%) rename source/renderer/app/components/widgets/forms/{FormFieldSkinTooltip.js => FormFieldSkinTooltip.ts} (100%) rename source/renderer/app/components/widgets/forms/{ImageUploadWidget.js => ImageUploadWidget.ts} (100%) rename source/renderer/app/components/widgets/forms/{InlineEditingDropdown.js => InlineEditingDropdown.ts} (100%) rename source/renderer/app/components/widgets/forms/{InlineEditingInput.js => InlineEditingInput.ts} (100%) rename source/renderer/app/components/widgets/forms/{InlineEditingSmallInput.js => InlineEditingSmallInput.ts} (100%) rename source/renderer/app/components/widgets/forms/{ItemDropdownOption.js => ItemDropdownOption.ts} (100%) rename source/renderer/app/components/widgets/forms/{ItemsDropdown.js => ItemsDropdown.ts} (100%) rename source/renderer/app/components/widgets/forms/{MnemonicInputWidget.js => MnemonicInputWidget.ts} (100%) rename source/renderer/app/components/widgets/forms/{NormalSwitch.js => NormalSwitch.ts} (100%) rename source/renderer/app/components/widgets/forms/{PasswordInput.js => PasswordInput.ts} (100%) rename source/renderer/app/components/widgets/forms/{PinCode.js => PinCode.ts} (100%) rename source/renderer/app/components/widgets/forms/{ProfileSettingsForm.js => ProfileSettingsForm.ts} (100%) rename source/renderer/app/components/widgets/forms/{ReadOnlyInput.js => ReadOnlyInput.ts} (100%) rename source/renderer/app/components/widgets/forms/{TinyButton.js => TinyButton.ts} (100%) rename source/renderer/app/components/widgets/forms/{TinyCheckbox.js => TinyCheckbox.ts} (100%) rename source/renderer/app/components/widgets/forms/{TinyDatePicker.js => TinyDatePicker.ts} (100%) rename source/renderer/app/components/widgets/forms/{TinyInput.js => TinyInput.ts} (100%) rename source/renderer/app/components/widgets/forms/{TinySelect.js => TinySelect.ts} (100%) rename source/renderer/app/components/widgets/forms/{TinySwitch.js => TinySwitch.ts} (100%) rename source/renderer/app/components/widgets/forms/{WalletsDropdown.js => WalletsDropdown.ts} (100%) rename source/renderer/app/components/widgets/forms/{WalletsDropdownLabel.js => WalletsDropdownLabel.ts} (100%) rename source/renderer/app/components/widgets/notification-dot/{NotificationDot.js => NotificationDot.ts} (100%) rename source/renderer/app/components/widgets/splash/{Splash.js => Splash.ts} (100%) rename source/renderer/app/config/{assetsConfig.js => assetsConfig.ts} (100%) rename source/renderer/app/config/{cryptoConfig.js => cryptoConfig.ts} (100%) rename source/renderer/app/config/{currencyConfig.coinapi.js => currencyConfig.coinapi.ts} (100%) rename source/renderer/app/config/{currencyConfig.coingecko.js => currencyConfig.coingecko.ts} (100%) rename source/renderer/app/config/{currencyConfig.nomics.js => currencyConfig.nomics.ts} (100%) rename source/renderer/app/config/{currencyConfig.js => currencyConfig.ts} (100%) rename source/renderer/app/config/{generateStakePoolFakeData.js => generateStakePoolFakeData.ts} (100%) rename source/renderer/app/config/{hardwareWalletsConfig.js => hardwareWalletsConfig.ts} (100%) rename source/renderer/app/config/{numbersConfig.js => numbersConfig.ts} (100%) rename source/renderer/app/config/{profileConfig.js => profileConfig.ts} (100%) rename source/renderer/app/config/{sidebarConfig.js => sidebarConfig.ts} (100%) rename source/renderer/app/config/{stakingConfig.js => stakingConfig.ts} (100%) rename source/renderer/app/config/{stakingStakePools.dummy.js => stakingStakePools.dummy.ts} (100%) rename source/renderer/app/config/{timingConfig.js => timingConfig.ts} (100%) rename source/renderer/app/config/{topBarConfig.js => topBarConfig.ts} (100%) rename source/renderer/app/config/{txnsConfig.js => txnsConfig.ts} (100%) rename source/renderer/app/config/{urlsConfig.js => urlsConfig.ts} (100%) rename source/renderer/app/config/{utxoConfig.js => utxoConfig.ts} (100%) rename source/renderer/app/config/{votingConfig.js => votingConfig.ts} (100%) rename source/renderer/app/config/{walletNavigationConfig.js => walletNavigationConfig.ts} (100%) rename source/renderer/app/config/{walletRecoveryPhraseVerificationConfig.js => walletRecoveryPhraseVerificationConfig.ts} (100%) rename source/renderer/app/config/{walletRestoreConfig.js => walletRestoreConfig.ts} (100%) rename source/renderer/app/config/{walletsConfig.js => walletsConfig.ts} (100%) rename source/renderer/app/containers/{MainLayout.js => MainLayout.ts} (100%) rename source/renderer/app/containers/{Root.js => Root.ts} (100%) rename source/renderer/app/containers/{TopBarContainer.js => TopBarContainer.ts} (100%) rename source/renderer/app/containers/appUpdate/{AppUpdateContainer.js => AppUpdateContainer.ts} (100%) rename source/renderer/app/containers/assets/{AssetSettingsDialogContainer.js => AssetSettingsDialogContainer.ts} (100%) rename source/renderer/app/containers/loading/{LoadingPage.js => LoadingPage.ts} (100%) rename source/renderer/app/containers/loading/{NoDiskSpaceErrorPage.js => NoDiskSpaceErrorPage.ts} (100%) rename source/renderer/app/containers/loading/{SyncingConnectingPage.js => SyncingConnectingPage.ts} (100%) rename source/renderer/app/containers/loading/{SystemTimeErrorPage.js => SystemTimeErrorPage.ts} (100%) rename source/renderer/app/containers/news/{NewsFeedContainer.js => NewsFeedContainer.ts} (100%) rename source/renderer/app/containers/news/{NewsOverlayContainer.js => NewsOverlayContainer.ts} (100%) rename source/renderer/app/containers/notifications/{NotificationsContainer.js => NotificationsContainer.ts} (100%) rename source/renderer/app/containers/profile/{DataLayerMigrationPage.js => DataLayerMigrationPage.ts} (100%) rename source/renderer/app/containers/profile/{InitialSettingsPage.js => InitialSettingsPage.ts} (100%) rename source/renderer/app/containers/profile/{TermsOfUsePage.js => TermsOfUsePage.ts} (100%) rename source/renderer/app/containers/settings/{Settings.js => Settings.ts} (100%) rename source/renderer/app/containers/settings/categories/{DisplaySettingsPage.js => DisplaySettingsPage.ts} (100%) rename source/renderer/app/containers/settings/categories/{GeneralSettingsPage.js => GeneralSettingsPage.ts} (100%) rename source/renderer/app/containers/settings/categories/{SecuritySettingsPage.js => SecuritySettingsPage.ts} (100%) rename source/renderer/app/containers/settings/categories/{StakePoolsSettingsPage.js => StakePoolsSettingsPage.ts} (100%) rename source/renderer/app/containers/settings/categories/{SupportSettingsPage.js => SupportSettingsPage.ts} (100%) rename source/renderer/app/containers/settings/categories/{TermsOfUseSettingsPage.js => TermsOfUseSettingsPage.ts} (100%) rename source/renderer/app/containers/settings/categories/{WalletsSettingsPage.js => WalletsSettingsPage.ts} (100%) rename source/renderer/app/containers/splash/{SplashNetworkPage.js => SplashNetworkPage.ts} (100%) rename source/renderer/app/containers/staking/{DelegationCenterPage.js => DelegationCenterPage.ts} (100%) rename source/renderer/app/containers/staking/{RedeemItnRewardsContainer.js => RedeemItnRewardsContainer.ts} (100%) rename source/renderer/app/containers/staking/{StakePoolsListPage.js => StakePoolsListPage.ts} (100%) rename source/renderer/app/containers/staking/{Staking.js => Staking.ts} (100%) rename source/renderer/app/containers/staking/{StakingCountdownPage.js => StakingCountdownPage.ts} (100%) rename source/renderer/app/containers/staking/{StakingEpochsPage.js => StakingEpochsPage.ts} (100%) rename source/renderer/app/containers/staking/{StakingInfoPage.js => StakingInfoPage.ts} (100%) rename source/renderer/app/containers/staking/{StakingRewardsPage.js => StakingRewardsPage.ts} (100%) rename source/renderer/app/containers/staking/dialogs/{DelegationSetupWizardDialogContainer.js => DelegationSetupWizardDialogContainer.ts} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{NoWalletsContainer.js => NoWalletsContainer.ts} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{RedemptionUnavailableContainer.js => RedemptionUnavailableContainer.ts} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{Step1ConfigurationContainer.js => Step1ConfigurationContainer.ts} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{Step2ConfirmationContainer.js => Step2ConfirmationContainer.ts} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{Step3ResultContainer.js => Step3ResultContainer.ts} (100%) rename source/renderer/app/containers/static/{AboutDialog.js => AboutDialog.ts} (100%) rename source/renderer/app/containers/status/{DaedalusDiagnosticsDialog.js => DaedalusDiagnosticsDialog.ts} (100%) rename source/renderer/app/containers/voting/{VotingRegistrationPage.js => VotingRegistrationPage.ts} (100%) rename source/renderer/app/containers/voting/dialogs/{VotingRegistrationDialogContainer.js => VotingRegistrationDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/{PaperWalletCreateCertificatePage.js => PaperWalletCreateCertificatePage.ts} (100%) rename source/renderer/app/containers/wallet/{TransferFundsPage.js => TransferFundsPage.ts} (100%) rename source/renderer/app/containers/wallet/{Wallet.js => Wallet.ts} (100%) rename source/renderer/app/containers/wallet/{WalletAddPage.js => WalletAddPage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletReceivePage.js => WalletReceivePage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletSendPage.js => WalletSendPage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletSettingsPage.js => WalletSettingsPage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletSummaryPage.js => WalletSummaryPage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletTokensPage.js => WalletTokensPage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletTransactionsPage.js => WalletTransactionsPage.ts} (100%) rename source/renderer/app/containers/wallet/{WalletUtxoPage.js => WalletUtxoPage.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletBackupDialogContainer.js => WalletBackupDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletConnectDialogContainer.js => WalletConnectDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletCreateDialogContainer.js => WalletCreateDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletCreateDialogContainerOld.js => WalletCreateDialogContainerOld.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletImportDialogContainer.js => WalletImportDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletRestoreDialogContainer.js => WalletRestoreDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletRestoreDialogContainerOld.js => WalletRestoreDialogContainerOld.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletSendConfirmationDialogContainer.js => WalletSendConfirmationDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{CompletionDialogContainer.js => CompletionDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{InstructionsDialogContainer.js => InstructionsDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{PrintDialogContainer.js => PrintDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{SecuringPasswordDialogContainer.js => SecuringPasswordDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{VerificationDialogContainer.js => VerificationDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{ChangeSpendingPasswordDialogContainer.js => ChangeSpendingPasswordDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{DeleteWalletDialogContainer.js => DeleteWalletDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{ExportWalletToFileDialogContainer.js => ExportWalletToFileDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{PublicKeyDialogContainer.js => PublicKeyDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{PublicKeyQRCodeDialogContainer.js => PublicKeyQRCodeDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{UndelegateWalletDialogContainer.js => UndelegateWalletDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{UnpairWalletDialogContainer.js => UnpairWalletDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{WalletRecoveryPhraseContainer.js => WalletRecoveryPhraseContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/transfer-funds/{TransferFundsStep1Container.js => TransferFundsStep1Container.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/transfer-funds/{TransferFundsStep2Container.js => TransferFundsStep2Container.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{ConfigDialogContainer.js => ConfigDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{HashDialogContainer.js => HashDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{InstructionsDialogContainer.js => InstructionsDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{MnemonicsDialogContainer.js => MnemonicsDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{TemplateDialogContainer.js => TemplateDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{ValidateDialogContainer.js => ValidateDialogContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-import/{WalletFileImportStepContainer.js => WalletFileImportStepContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-import/{WalletSelectImportStepContainer.js => WalletSelectImportStepContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepConfigurationContainer.js => StepConfigurationContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepMnemonicsContainer.js => StepMnemonicsContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepSuccessContainer.js => StepSuccessContainer.ts} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepWalletTypeContainer.js => StepWalletTypeContainer.ts} (100%) rename source/renderer/app/domains/{ApiError.js => ApiError.ts} (100%) rename source/renderer/app/domains/{Asset.js => Asset.ts} (100%) rename source/renderer/app/domains/{News.js => News.ts} (100%) rename source/renderer/app/domains/{Profile.js => Profile.ts} (100%) rename source/renderer/app/domains/{StakePool.js => StakePool.ts} (100%) rename source/renderer/app/domains/{User.js => User.ts} (100%) rename source/renderer/app/domains/{Wallet.js => Wallet.ts} (100%) rename source/renderer/app/domains/{WalletAddress.js => WalletAddress.ts} (100%) rename source/renderer/app/domains/{WalletTransaction.js => WalletTransaction.ts} (100%) rename source/renderer/app/features/discreet-mode/__mocks__/{react-svg-inline.js => react-svg-inline.ts} (100%) rename source/renderer/app/features/discreet-mode/api/{index.js => index.ts} (100%) rename source/renderer/app/features/discreet-mode/{config.js => config.ts} (100%) rename source/renderer/app/features/discreet-mode/{context.js => context.ts} (100%) rename source/renderer/app/features/discreet-mode/{feature.js => feature.ts} (100%) rename source/renderer/app/features/discreet-mode/{index.js => index.ts} (100%) rename source/renderer/app/features/discreet-mode/{integration-tests.spec.js => integration-tests.spec.ts} (100%) rename source/renderer/app/features/discreet-mode/replacers/{defaultReplacer.spec.js => defaultReplacer.spec.ts} (100%) rename source/renderer/app/features/discreet-mode/replacers/{defaultReplacer.js => defaultReplacer.ts} (100%) rename source/renderer/app/features/discreet-mode/replacers/{discreetWalletAmount.spec.js => discreetWalletAmount.spec.ts} (100%) rename source/renderer/app/features/discreet-mode/replacers/{discreetWalletAmount.js => discreetWalletAmount.ts} (100%) rename source/renderer/app/features/discreet-mode/replacers/{discreetWalletTokenAmount.js => discreetWalletTokenAmount.ts} (100%) rename source/renderer/app/features/discreet-mode/{types.js => types.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetModeFeatureInject.js => DiscreetModeFeatureInject.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetTokenWalletAmount.js => DiscreetTokenWalletAmount.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetValue.story.js => DiscreetValue.story.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetValue.js => DiscreetValue.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetWalletAmount.js => DiscreetWalletAmount.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/{DiscreetToggleTopBar.messages.js => DiscreetToggleTopBar.messages.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/{DiscreetToggleTopBar.js => DiscreetToggleTopBar.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle/{DiscreetModeToggle.story.js => DiscreetModeToggle.story.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle/{DiscreetModeToggle.js => DiscreetModeToggle.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{index.js => index.ts} (100%) rename source/renderer/app/features/discreet-mode/ui/{withDiscreetMode.js => withDiscreetMode.ts} (100%) rename source/renderer/app/features/{index.js => index.ts} (100%) rename source/renderer/app/features/local-storage/{context.js => context.ts} (100%) rename source/renderer/app/features/local-storage/{index.js => index.ts} (100%) rename source/renderer/app/features/local-storage/{types.js => types.ts} (100%) rename source/renderer/app/features/local-storage/ui/{BrowserLocalStorageBridge.js => BrowserLocalStorageBridge.ts} (100%) rename source/renderer/app/features/local-storage/ui/{index.js => index.ts} (100%) rename source/renderer/app/i18n/{LocalizableError.js => LocalizableError.ts} (100%) rename source/renderer/app/i18n/{errors.js => errors.ts} (100%) rename source/renderer/app/i18n/{global-messages.js => global-messages.ts} (100%) rename source/renderer/app/i18n/{translations.js => translations.ts} (100%) rename source/renderer/app/i18n/{types.js => types.ts} (100%) rename source/renderer/app/{index.js => index.ts} (100%) rename source/renderer/app/ipc/{bugReportRequestChannel.js => bugReportRequestChannel.ts} (100%) rename source/renderer/app/ipc/{cardano.ipc.js => cardano.ipc.ts} (100%) rename source/renderer/app/ipc/{control-ui-parts.js => control-ui-parts.ts} (100%) rename source/renderer/app/ipc/{downloadManagerChannel.js => downloadManagerChannel.ts} (100%) rename source/renderer/app/ipc/{electronStoreConversation.js => electronStoreConversation.ts} (100%) rename source/renderer/app/ipc/{enableApplicationMenuNavigationChannel.js => enableApplicationMenuNavigationChannel.ts} (100%) rename source/renderer/app/ipc/{generateAddressPDFChannel.js => generateAddressPDFChannel.ts} (100%) rename source/renderer/app/ipc/{generateCsvChannel.js => generateCsvChannel.ts} (100%) rename source/renderer/app/ipc/{generateFileMetaChannel.js => generateFileMetaChannel.ts} (100%) rename source/renderer/app/ipc/{generatePaperWalletChannel.js => generatePaperWalletChannel.ts} (100%) rename source/renderer/app/ipc/{generateVotingPDFChannel.js => generateVotingPDFChannel.ts} (100%) rename source/renderer/app/ipc/{generateWalletMigrationReportChannel.js => generateWalletMigrationReportChannel.ts} (100%) rename source/renderer/app/ipc/{get-gpu-status.ipc.js => get-gpu-status.ipc.ts} (100%) rename source/renderer/app/ipc/{getBlockReplayChannel.js => getBlockReplayChannel.ts} (100%) rename source/renderer/app/ipc/{getDesktopDirectoryPathChannel.js => getDesktopDirectoryPathChannel.ts} (100%) rename source/renderer/app/ipc/{getDiskSpaceChannel.js => getDiskSpaceChannel.ts} (100%) rename source/renderer/app/ipc/{getHardwareWalletChannel.js => getHardwareWalletChannel.ts} (100%) rename source/renderer/app/ipc/{getRecoveryWalletIdChannel.js => getRecoveryWalletIdChannel.ts} (100%) rename source/renderer/app/ipc/{getStateDirectoryPathChannel.js => getStateDirectoryPathChannel.ts} (100%) rename source/renderer/app/ipc/{getSystemLocaleChannel.js => getSystemLocaleChannel.ts} (100%) rename source/renderer/app/ipc/{introspect-address.js => introspect-address.ts} (100%) rename source/renderer/app/ipc/lib/{RendererIpcChannel.js => RendererIpcChannel.ts} (100%) rename source/renderer/app/ipc/lib/{RendererIpcConversation.js => RendererIpcConversation.ts} (100%) rename source/renderer/app/ipc/{loadAsset.js => loadAsset.ts} (100%) rename source/renderer/app/ipc/{logs.ipc.js => logs.ipc.ts} (100%) rename source/renderer/app/ipc/{manageAppUpdateChannel.js => manageAppUpdateChannel.ts} (100%) rename source/renderer/app/ipc/{open-external-url.js => open-external-url.ts} (100%) rename source/renderer/app/ipc/{open-local-directory.js => open-local-directory.ts} (100%) rename source/renderer/app/ipc/{rebuild-application-menu.js => rebuild-application-menu.ts} (100%) rename source/renderer/app/ipc/{saveQRCodeImageChannel.js => saveQRCodeImageChannel.ts} (100%) rename source/renderer/app/ipc/{setStateSnapshotLogChannel.js => setStateSnapshotLogChannel.ts} (100%) rename source/renderer/app/ipc/{show-file-dialog-channels.js => show-file-dialog-channels.ts} (100%) rename source/renderer/app/{routes-config.js => routes-config.ts} (100%) rename source/renderer/app/stores/{AddressesStore.js => AddressesStore.ts} (100%) rename source/renderer/app/stores/{AppStore.js => AppStore.ts} (100%) rename source/renderer/app/stores/{AppUpdateStore.js => AppUpdateStore.ts} (100%) rename source/renderer/app/stores/{AssetsStore.js => AssetsStore.ts} (100%) rename source/renderer/app/stores/{CurrencyStore.js => CurrencyStore.ts} (100%) rename source/renderer/app/stores/{HardwareWalletsStore.js => HardwareWalletsStore.ts} (100%) rename source/renderer/app/stores/{NetworkStatusStore.js => NetworkStatusStore.ts} (100%) rename source/renderer/app/stores/{NewsFeedStore.js => NewsFeedStore.ts} (100%) rename source/renderer/app/stores/{ProfileStore.js => ProfileStore.ts} (100%) rename source/renderer/app/stores/{SidebarStore.spec.js => SidebarStore.spec.ts} (100%) rename source/renderer/app/stores/{SidebarStore.js => SidebarStore.ts} (100%) rename source/renderer/app/stores/{StakingStore.js => StakingStore.ts} (100%) rename source/renderer/app/stores/{TransactionsStore.js => TransactionsStore.ts} (100%) rename source/renderer/app/stores/{UiDialogsStore.js => UiDialogsStore.ts} (100%) rename source/renderer/app/stores/{UiNotificationsStore.js => UiNotificationsStore.ts} (100%) rename source/renderer/app/stores/{VotingStore.spec.js => VotingStore.spec.ts} (100%) rename source/renderer/app/stores/{VotingStore.js => VotingStore.ts} (100%) rename source/renderer/app/stores/{WalletBackupStore.js => WalletBackupStore.ts} (100%) rename source/renderer/app/stores/{WalletMigrationStore.js => WalletMigrationStore.ts} (100%) rename source/renderer/app/stores/{WalletSettingsStore.js => WalletSettingsStore.ts} (100%) rename source/renderer/app/stores/{WalletsLocalStore.js => WalletsLocalStore.ts} (100%) rename source/renderer/app/stores/{WalletsStore.js => WalletsStore.ts} (100%) rename source/renderer/app/stores/{WindowStore.js => WindowStore.ts} (100%) rename source/renderer/app/stores/{index.js => index.ts} (100%) rename source/renderer/app/stores/lib/{CachedRequest.js => CachedRequest.ts} (100%) rename source/renderer/app/stores/lib/{LocalizedCachedRequest.js => LocalizedCachedRequest.ts} (100%) rename source/renderer/app/stores/lib/{LocalizedRequest.js => LocalizedRequest.ts} (100%) rename source/renderer/app/stores/lib/{Reaction.js => Reaction.ts} (100%) rename source/renderer/app/stores/lib/{Request.js => Request.ts} (100%) rename source/renderer/app/stores/lib/{Store.js => Store.ts} (100%) rename source/renderer/app/themes/{daedalus.js => daedalus.ts} (100%) rename source/renderer/app/themes/daedalus/{cardano.js => cardano.ts} (100%) rename source/renderer/app/themes/daedalus/{dark-blue.js => dark-blue.ts} (100%) rename source/renderer/app/themes/daedalus/{dark-cardano.js => dark-cardano.ts} (100%) rename source/renderer/app/themes/daedalus/{flight-candidate.js => flight-candidate.ts} (100%) rename source/renderer/app/themes/daedalus/{incentivized-testnet.js => incentivized-testnet.ts} (100%) rename source/renderer/app/themes/daedalus/{index.js => index.ts} (100%) rename source/renderer/app/themes/daedalus/{light-blue.js => light-blue.ts} (100%) rename source/renderer/app/themes/daedalus/{shelley-testnet.js => shelley-testnet.ts} (100%) rename source/renderer/app/themes/daedalus/{white.js => white.ts} (100%) rename source/renderer/app/themes/daedalus/{yellow.js => yellow.ts} (100%) rename source/renderer/app/themes/{index.js => index.ts} (100%) rename source/renderer/app/themes/overrides/{index.js => index.ts} (100%) rename source/renderer/app/themes/scripts/{check.js => check.ts} (100%) rename source/renderer/app/themes/scripts/{update.js => update.ts} (100%) rename source/renderer/app/themes/{types.js => types.ts} (100%) rename source/renderer/app/themes/utils/{checkCreateTheme.js => checkCreateTheme.ts} (100%) rename source/renderer/app/themes/utils/{constants.js => constants.ts} (100%) rename source/renderer/app/themes/utils/{copyTheme.js => copyTheme.ts} (100%) rename source/renderer/app/themes/utils/{createShades.js => createShades.ts} (100%) rename source/renderer/app/themes/utils/{createTheme.js => createTheme.ts} (100%) rename source/renderer/app/themes/utils/{findUpdates.js => findUpdates.ts} (100%) rename source/renderer/app/themes/utils/{updateThemes.js => updateThemes.ts} (100%) rename source/renderer/app/themes/utils/{updateThemesCLI.js => updateThemesCLI.ts} (100%) rename source/renderer/app/themes/utils/{writeThemeUpdate.js => writeThemeUpdate.ts} (100%) rename source/renderer/app/types/{LogTypes.js => LogTypes.ts} (100%) rename source/renderer/app/types/{TransactionMetadata.js => TransactionMetadata.ts} (100%) rename source/renderer/app/types/{applicationDialogTypes.js => applicationDialogTypes.ts} (100%) rename source/renderer/app/types/{coreSystemInfoTypes.js => coreSystemInfoTypes.ts} (100%) rename source/renderer/app/types/{currencyTypes.js => currencyTypes.ts} (100%) rename source/renderer/app/types/{gpuStatus.js => gpuStatus.ts} (100%) rename source/renderer/app/types/{i18nTypes.js => i18nTypes.ts} (100%) rename source/renderer/app/types/{injectedPropsType.js => injectedPropsType.ts} (100%) rename source/renderer/app/types/{networkTypes.js => networkTypes.ts} (100%) rename source/renderer/app/types/{notificationTypes.js => notificationTypes.ts} (100%) rename source/renderer/app/types/{sidebarTypes.js => sidebarTypes.ts} (100%) rename source/renderer/app/types/{stakingTypes.js => stakingTypes.ts} (100%) rename source/renderer/app/types/{systemInfoTypes.js => systemInfoTypes.ts} (100%) rename source/renderer/app/types/{walletBackupTypes.js => walletBackupTypes.ts} (100%) rename source/renderer/app/types/{walletExportTypes.js => walletExportTypes.ts} (100%) rename source/renderer/app/types/{walletRecoveryPhraseVerificationTypes.js => walletRecoveryPhraseVerificationTypes.ts} (100%) rename source/renderer/app/types/{walletRestoreTypes.js => walletRestoreTypes.ts} (100%) rename source/renderer/app/utils/{ReactToolboxMobxForm.js => ReactToolboxMobxForm.ts} (100%) rename source/renderer/app/utils/{addressPDFGenerator.js => addressPDFGenerator.ts} (100%) rename source/renderer/app/utils/{assets.js => assets.ts} (100%) rename source/renderer/app/utils/{asyncForEach.js => asyncForEach.ts} (100%) rename source/renderer/app/utils/{colors.js => colors.ts} (100%) rename source/renderer/app/utils/{crypto.js => crypto.ts} (100%) rename source/renderer/app/utils/{csvGenerator.js => csvGenerator.ts} (100%) rename source/renderer/app/utils/{domManipulation.js => domManipulation.ts} (100%) rename source/renderer/app/utils/{fileMetaGenerator.js => fileMetaGenerator.ts} (100%) rename source/renderer/app/utils/{form.js => form.ts} (100%) rename source/renderer/app/utils/{formatCpuInfo.spec.js => formatCpuInfo.spec.ts} (100%) rename source/renderer/app/utils/{formatCpuInfo.js => formatCpuInfo.ts} (100%) rename source/renderer/app/utils/{formatters.js => formatters.ts} (100%) rename source/renderer/app/utils/{hardwareWalletUtils.js => hardwareWalletUtils.ts} (100%) rename source/renderer/app/utils/{humanizeDurationByLocale.js => humanizeDurationByLocale.ts} (100%) rename source/renderer/app/utils/{i18nContext.js => i18nContext.ts} (100%) rename source/renderer/app/utils/{index.js => index.ts} (100%) rename source/renderer/app/utils/{logging.js => logging.ts} (100%) rename source/renderer/app/utils/mobx-features/{feature.js => feature.ts} (100%) rename source/renderer/app/utils/mobx-features/{hooks.js => hooks.ts} (100%) rename source/renderer/app/utils/mobx-features/{reaction.js => reaction.ts} (100%) rename source/renderer/app/utils/{network.js => network.ts} (100%) rename source/renderer/app/utils/{numbers.js => numbers.ts} (100%) rename source/renderer/app/utils/{paperWalletPdfGenerator.js => paperWalletPdfGenerator.ts} (100%) rename source/renderer/app/utils/{routing.js => routing.ts} (100%) rename source/renderer/app/utils/{serialize.js => serialize.ts} (100%) rename source/renderer/app/utils/{shelleyLedger.js => shelleyLedger.ts} (100%) rename source/renderer/app/utils/{shelleyTrezor.js => shelleyTrezor.ts} (100%) rename source/renderer/app/utils/{sortComparators.js => sortComparators.ts} (100%) rename source/renderer/app/utils/{staking.js => staking.ts} (100%) rename source/renderer/app/utils/{storesUtils.js => storesUtils.ts} (100%) rename source/renderer/app/utils/{strings.js => strings.ts} (100%) rename source/renderer/app/utils/{transaction.js => transaction.ts} (100%) rename source/renderer/app/utils/{transactionsCsvGenerator.js => transactionsCsvGenerator.ts} (100%) rename source/renderer/app/utils/{utxoUtils.js => utxoUtils.ts} (100%) rename source/renderer/app/utils/{validations.js => validations.ts} (100%) rename source/renderer/app/utils/{votingPDFGenerator.js => votingPDFGenerator.ts} (100%) rename source/renderer/app/utils/{waitFor.js => waitFor.ts} (100%) rename source/renderer/app/utils/{waitForExist.js => waitForExist.ts} (100%) rename source/renderer/app/utils/{walletRecoveryPhraseVerificationUtils.js => walletRecoveryPhraseVerificationUtils.ts} (100%) rename source/renderer/app/utils/{walletSorting.spec.js => walletSorting.spec.ts} (100%) rename source/renderer/app/utils/{walletSorting.js => walletSorting.ts} (100%) rename source/renderer/app/utils/{walletUtils.js => walletUtils.ts} (100%) rename source/renderer/app/utils/{walletsForStakePoolsRanking.js => walletsForStakePoolsRanking.ts} (100%) rename source/renderer/{index.js => index.ts} (100%) rename storybook/{addons.js => addons.ts} (100%) rename storybook/addons/DaedalusMenu/{DaedalusMenu.js => DaedalusMenu.ts} (100%) rename storybook/addons/DaedalusMenu/{DaedalusMenuStyles.js => DaedalusMenuStyles.ts} (100%) rename storybook/addons/DaedalusMenu/{index.js => index.ts} (100%) rename storybook/addons/DaedalusMenu/{register.js => register.ts} (100%) rename storybook/{config.js => config.ts} (100%) rename storybook/stories/_support/{DiscreetModeNotificationKnob.js => DiscreetModeNotificationKnob.ts} (100%) rename storybook/stories/_support/{DiscreetModeToggleKnob.js => DiscreetModeToggleKnob.ts} (100%) rename storybook/stories/_support/{StoryDecorator.js => StoryDecorator.ts} (100%) rename storybook/stories/_support/{StoryLayout.js => StoryLayout.ts} (100%) rename storybook/stories/_support/{StoryProvider.js => StoryProvider.ts} (100%) rename storybook/stories/_support/{StoryWrapper.js => StoryWrapper.ts} (100%) rename storybook/stories/_support/{config.js => config.ts} (100%) rename storybook/stories/_support/{environment.js => environment.ts} (100%) rename storybook/stories/_support/{profileSettings.js => profileSettings.ts} (100%) rename storybook/stories/_support/{utils.js => utils.ts} (100%) rename storybook/stories/assets/{Asset.stories.js => Asset.stories.ts} (100%) rename storybook/stories/assets/{AssetSettingsDialog.stories.js => AssetSettingsDialog.stories.ts} (100%) rename storybook/stories/common/{ItemsDropdown.stories.js => ItemsDropdown.stories.ts} (100%) rename storybook/stories/common/{Widgets.stories.js => Widgets.stories.ts} (100%) rename storybook/stories/dapps/{TransactionRequest.stories.js => TransactionRequest.stories.ts} (100%) rename storybook/stories/{index.js => index.ts} (100%) rename storybook/stories/navigation/{Sidebar.stories.js => Sidebar.stories.ts} (100%) rename storybook/stories/navigation/{SidebarCategory.stories.js => SidebarCategory.stories.ts} (100%) rename storybook/stories/navigation/{SidebarWalletsMenu.stories.js => SidebarWalletsMenu.stories.ts} (100%) rename storybook/stories/news/{AlertsOverlay.stories.js => AlertsOverlay.stories.ts} (100%) rename storybook/stories/news/{AppUpdateOverlay.stories.js => AppUpdateOverlay.stories.ts} (100%) rename storybook/stories/news/{IncidentOverlay.stories.js => IncidentOverlay.stories.ts} (100%) rename storybook/stories/news/{NewsFeed.stories.js => NewsFeed.stories.ts} (100%) rename storybook/stories/news/_utils/{fakeDataNewsFeed.js => fakeDataNewsFeed.ts} (100%) rename storybook/stories/news/_utils/{fakeDataUpdate.js => fakeDataUpdate.ts} (100%) rename storybook/stories/nodes/_utils/{props.js => props.ts} (100%) rename storybook/stories/nodes/about/{About.stories.js => About.stories.ts} (100%) rename storybook/stories/nodes/environment/{TopBarEnvironment.stories.js => TopBarEnvironment.stories.ts} (100%) rename storybook/stories/nodes/errors/{Errors.stories.js => Errors.stories.ts} (100%) rename storybook/stories/nodes/errors/{NoDiskSpaceError.stories.js => NoDiskSpaceError.stories.ts} (100%) rename storybook/stories/nodes/errors/{SystemTimeError.stories.js => SystemTimeError.stories.ts} (100%) rename storybook/stories/nodes/{index.js => index.ts} (100%) rename storybook/stories/nodes/splash/{Splash.stories.js => Splash.stories.ts} (100%) rename storybook/stories/nodes/status/{Diagnostics.stories.js => Diagnostics.stories.ts} (100%) rename storybook/stories/nodes/status/{Status.stories.js => Status.stories.ts} (100%) rename storybook/stories/nodes/syncing/{Syncing.stories.js => Syncing.stories.ts} (100%) rename storybook/stories/nodes/syncing/{SyncingConnecting.stories.js => SyncingConnecting.stories.ts} (100%) rename storybook/stories/nodes/updates/{DataLayerMigration.stories.js => DataLayerMigration.stories.ts} (100%) rename storybook/stories/nodes/updates/{Updates.stories.js => Updates.stories.ts} (100%) rename storybook/stories/notifications/{Notifications.stories.js => Notifications.stories.ts} (100%) rename storybook/stories/settings/general/{General.stories.js => General.stories.ts} (100%) rename storybook/stories/settings/{index.js => index.ts} (100%) rename storybook/stories/settings/language/{Language.stories.js => Language.stories.ts} (100%) rename storybook/stories/settings/utils/{SettingsWrapper.js => SettingsWrapper.ts} (100%) rename storybook/stories/staking/{CountdownParty.stories.js => CountdownParty.stories.ts} (100%) rename storybook/stories/staking/{DelegationCenter.stories.js => DelegationCenter.stories.ts} (100%) rename storybook/stories/staking/{DelegationSteps.stories.js => DelegationSteps.stories.ts} (100%) rename storybook/stories/staking/{Epochs.stories.js => Epochs.stories.ts} (100%) rename storybook/stories/staking/{Legacy.stories.js => Legacy.stories.ts} (100%) rename storybook/stories/staking/{RedeemItnWallets.stories.js => RedeemItnWallets.stories.ts} (100%) rename storybook/stories/staking/{Rewards.stories.js => Rewards.stories.ts} (100%) rename storybook/stories/staking/{StakePools.stories.js => StakePools.stories.ts} (100%) rename storybook/stories/staking/{StakePoolsTable.stories.js => StakePoolsTable.stories.ts} (100%) rename storybook/stories/staking/{Staking.stories.js => Staking.stories.ts} (100%) rename storybook/stories/staking/{StakingWrapper.js => StakingWrapper.ts} (100%) rename storybook/stories/staking/{Undelegate.stories.js => Undelegate.stories.ts} (100%) rename storybook/stories/voting/{Voting.stories.js => Voting.stories.ts} (100%) rename storybook/stories/wallets/_utils/{CreateWalletScreens.js => CreateWalletScreens.ts} (100%) rename storybook/stories/wallets/_utils/{HardwareWalletWithNavigationLayout.js => HardwareWalletWithNavigationLayout.ts} (100%) rename storybook/stories/wallets/_utils/{HardwareWalletsWrapper.js => HardwareWalletsWrapper.ts} (100%) rename storybook/stories/wallets/_utils/{WalletWithNavigationLayout.js => WalletWithNavigationLayout.ts} (100%) rename storybook/stories/wallets/_utils/{WalletsTransactionsWrapper.js => WalletsTransactionsWrapper.ts} (100%) rename storybook/stories/wallets/_utils/{WalletsWrapper.js => WalletsWrapper.ts} (100%) rename storybook/stories/wallets/_utils/{defaultWalletProps.js => defaultWalletProps.ts} (100%) rename storybook/stories/wallets/addWallet/{Add.stories.js => Add.stories.ts} (100%) rename storybook/stories/wallets/addWallet/{AddWallet.stories.js => AddWallet.stories.ts} (100%) rename storybook/stories/wallets/addWallet/{Create.stories.js => Create.stories.ts} (100%) rename storybook/stories/wallets/addWallet/{Import.stories.js => Import.stories.ts} (100%) rename storybook/stories/wallets/addWallet/{Restore.stories.js => Restore.stories.ts} (100%) rename storybook/stories/wallets/addWallet/{RestoreOld.stories.js => RestoreOld.stories.ts} (100%) rename storybook/stories/wallets/export/{WalletExportToFile.stories.js => WalletExportToFile.stories.ts} (100%) rename storybook/stories/wallets/hardwareWallets/{HardwareWallets.stories.js => HardwareWallets.stories.ts} (100%) rename storybook/stories/wallets/import/{WalletImportFile.stories.js => WalletImportFile.stories.ts} (100%) rename storybook/stories/wallets/{index.js => index.ts} (100%) rename storybook/stories/wallets/legacyWallets/{LegacyNotification.stories.js => LegacyNotification.stories.ts} (100%) rename storybook/stories/wallets/legacyWallets/{TransferFunds.stories.js => TransferFunds.stories.ts} (100%) rename storybook/stories/wallets/paperWallets/{PaperWallets.stories.js => PaperWallets.stories.ts} (100%) rename storybook/stories/wallets/receive/{WalletReceive.stories.js => WalletReceive.stories.ts} (100%) rename storybook/stories/wallets/send/{WalletSend.stories.js => WalletSend.stories.ts} (100%) rename storybook/stories/wallets/setPassword/{SetWalletPassword.stories.js => SetWalletPassword.stories.ts} (100%) rename storybook/stories/wallets/settings/{PublicKeyQRCode.stories.js => PublicKeyQRCode.stories.ts} (100%) rename storybook/stories/wallets/settings/{WalletDelete.stories.js => WalletDelete.stories.ts} (100%) rename storybook/stories/wallets/settings/{WalletPublicKey.stories.js => WalletPublicKey.stories.ts} (100%) rename storybook/stories/wallets/settings/{WalletRecoveryPhraseVerification.stories.js => WalletRecoveryPhraseVerification.stories.ts} (100%) rename storybook/stories/wallets/settings/{WalletSettings.stories.js => WalletSettings.stories.ts} (100%) rename storybook/stories/wallets/settings/{WalletSettingsScreen.stories.js => WalletSettingsScreen.stories.ts} (100%) rename storybook/stories/wallets/settings/{WalletUnpair.stories.js => WalletUnpair.stories.ts} (100%) rename storybook/stories/wallets/summary/{WalletSummary.stories.js => WalletSummary.stories.ts} (100%) rename storybook/stories/wallets/tokens/{WalletTokens.stories.js => WalletTokens.stories.ts} (100%) rename storybook/stories/wallets/tokens/{WalletTokensList.stories.js => WalletTokensList.stories.ts} (100%) rename storybook/stories/wallets/transactions/{Transaction.stories.js => Transaction.stories.ts} (100%) rename storybook/stories/wallets/transactions/{TransactionMetadata.stories.js => TransactionMetadata.stories.ts} (100%) rename storybook/stories/wallets/transactions/{TransactionsList.stories.js => TransactionsList.stories.ts} (100%) rename storybook/stories/wallets/transactions/{Utxo.stories.js => Utxo.stories.ts} (100%) rename tests/_utils/{TestDecorator.js => TestDecorator.ts} (100%) rename tests/addresses/e2e/steps/{addresses.js => addresses.ts} (100%) rename tests/app/e2e/steps/{about-dialog.js => about-dialog.ts} (100%) rename tests/app/e2e/steps/{app-version-difference.js => app-version-difference.ts} (100%) rename tests/app/e2e/steps/{cardano-node.js => cardano-node.ts} (100%) rename tests/app/e2e/steps/{daedalus-process.js => daedalus-process.ts} (100%) rename tests/app/e2e/steps/{data-layer-migration.js => data-layer-migration.ts} (100%) rename tests/app/e2e/steps/{helpers.js => helpers.ts} (100%) rename tests/app/e2e/steps/{inject-fault.js => inject-fault.ts} (100%) rename tests/app/e2e/steps/{local-time-difference.js => local-time-difference.ts} (100%) rename tests/app/e2e/steps/{no-disk-space.js => no-disk-space.ts} (100%) rename tests/app/e2e/steps/{node-restart.js => node-restart.ts} (100%) rename tests/app/e2e/steps/{trouble-connecting-notification.js => trouble-connecting-notification.ts} (100%) rename tests/app/e2e/steps/{trouble-syncing-notification.js => trouble-syncing-notification.ts} (100%) rename tests/assets/unit/{assets.spec.js => assets.spec.ts} (100%) rename tests/common/e2e/steps/{config.js => config.ts} (100%) rename tests/common/e2e/steps/{helpers.js => helpers.ts} (100%) rename tests/common/unit/{networks.spec.js => networks.spec.ts} (100%) rename tests/common/unit/steps/{mnemonics-form-validation.steps.js => mnemonics-form-validation.steps.ts} (100%) rename tests/delegation/e2e/steps/{delegation-pending.js => delegation-pending.ts} (100%) rename tests/delegation/e2e/steps/{delegation.js => delegation.ts} (100%) rename tests/delegation/e2e/steps/{helpers.js => helpers.ts} (100%) rename tests/delegation/e2e/steps/{rewards.js => rewards.ts} (100%) rename tests/delegation/e2e/steps/{stake-pools.js => stake-pools.ts} (100%) rename tests/navigation/e2e/steps/{general-settings.js => general-settings.ts} (100%) rename tests/navigation/e2e/steps/{helpers.js => helpers.ts} (100%) rename tests/navigation/e2e/steps/{sidebar.js => sidebar.ts} (100%) rename tests/news/e2e/steps/{newsfeed-steps.js => newsfeed-steps.ts} (100%) rename tests/paper-wallets/e2e/steps/{paper-wallets-certificate.js => paper-wallets-certificate.ts} (100%) rename tests/{reporter.js => reporter.ts} (100%) rename tests/settings/e2e/steps/{basic-setup.js => basic-setup.ts} (100%) rename tests/settings/e2e/steps/{custom-formats.js => custom-formats.ts} (100%) rename tests/settings/e2e/steps/{general-settings.js => general-settings.ts} (100%) rename tests/settings/e2e/steps/{helpers.js => helpers.ts} (100%) rename tests/settings/e2e/steps/{select-language.js => select-language.ts} (100%) rename tests/settings/e2e/steps/{settings.js => settings.ts} (100%) rename tests/settings/e2e/steps/{terms-of-use.js => terms-of-use.ts} (100%) rename tests/settings/unit/steps/{file-names.js => file-names.ts} (100%) rename tests/{setup-common.js => setup-common.ts} (100%) rename tests/{setup-e2e.js => setup-e2e.ts} (100%) rename tests/transactions/e2e/steps/{transactions.js => transactions.ts} (100%) rename tests/transactions/e2e/steps/{utxos.js => utxos.ts} (100%) rename tests/transactions/unit/steps/{helpers.js => helpers.ts} (100%) rename tests/transactions/unit/steps/{utxos-chart.js => utxos-chart.ts} (100%) rename tests/{types.js => types.ts} (100%) rename tests/wallets/e2e/steps/{balance-wallets-notification.js => balance-wallets-notification.ts} (100%) rename tests/wallets/e2e/steps/{create-wallet.js => create-wallet.ts} (100%) rename tests/wallets/e2e/steps/{delete-wallet.js => delete-wallet.ts} (100%) rename tests/wallets/e2e/steps/{helpers.js => helpers.ts} (100%) rename tests/wallets/e2e/steps/{import-and-migrate-wallets.js => import-and-migrate-wallets.ts} (100%) rename tests/wallets/e2e/steps/{recovery-phrase-verification-steps.js => recovery-phrase-verification-steps.ts} (100%) rename tests/wallets/e2e/steps/{restore-wallet.js => restore-wallet.ts} (100%) rename tests/wallets/e2e/steps/{transfer-funds-wizard.js => transfer-funds-wizard.ts} (100%) rename tests/wallets/e2e/steps/{wallet-not-responding.js => wallet-not-responding.ts} (100%) rename tests/wallets/e2e/steps/{wallets-limit.js => wallets-limit.ts} (100%) rename tests/wallets/e2e/steps/{wallets-ordering.js => wallets-ordering.ts} (100%) rename tests/wallets/e2e/steps/{wallets.js => wallets.ts} (100%) rename tests/wallets/unit/steps/{mnemonics.js => mnemonics.ts} (100%) rename tests/wallets/unit/steps/{spending-password.js => spending-password.ts} (100%) rename tests/wallets/unit/{wallet-utils.spec.js => wallet-utils.spec.ts} (100%) rename translations/{translation-runner.js => translation-runner.ts} (100%) rename utils/api-importer/{byron-wallet-importer.js => byron-wallet-importer.ts} (100%) rename utils/api-importer/{itn-byron-wallet-importer.js => itn-byron-wallet-importer.ts} (100%) rename utils/api-importer/{itn-shelley-wallet-importer.js => itn-shelley-wallet-importer.ts} (100%) rename utils/api-importer/{mary-wallet-importer.js => mary-wallet-importer.ts} (100%) rename utils/api-importer/{mnemonics.js => mnemonics.ts} (100%) rename utils/api-importer/{shelley-wallet-importer.js => shelley-wallet-importer.ts} (100%) rename utils/api-importer/{yoroi-wallet-importer.js => yoroi-wallet-importer.ts} (100%) rename utils/create-news-verification-hashes/{index.js => index.ts} (100%) rename utils/lockfile-checker/{index.js => index.ts} (100%) diff --git a/source/common/config/appUpdateConfig.js b/source/common/config/appUpdateConfig.ts similarity index 100% rename from source/common/config/appUpdateConfig.js rename to source/common/config/appUpdateConfig.ts diff --git a/source/common/config/crypto/decrypt.js b/source/common/config/crypto/decrypt.ts similarity index 100% rename from source/common/config/crypto/decrypt.js rename to source/common/config/crypto/decrypt.ts diff --git a/source/common/config/crypto/valid-words.en.js b/source/common/config/crypto/valid-words.en.ts similarity index 100% rename from source/common/config/crypto/valid-words.en.js rename to source/common/config/crypto/valid-words.en.ts diff --git a/source/common/config/downloadManagerConfig.js b/source/common/config/downloadManagerConfig.ts similarity index 100% rename from source/common/config/downloadManagerConfig.js rename to source/common/config/downloadManagerConfig.ts diff --git a/source/common/config/electron-store.config.js b/source/common/config/electron-store.config.ts similarity index 100% rename from source/common/config/electron-store.config.js rename to source/common/config/electron-store.config.ts diff --git a/source/common/ipc/api.js b/source/common/ipc/api.ts similarity index 100% rename from source/common/ipc/api.js rename to source/common/ipc/api.ts diff --git a/source/common/ipc/constants.js b/source/common/ipc/constants.ts similarity index 100% rename from source/common/ipc/constants.js rename to source/common/ipc/constants.ts diff --git a/source/common/ipc/lib/IpcChannel.js b/source/common/ipc/lib/IpcChannel.ts similarity index 100% rename from source/common/ipc/lib/IpcChannel.js rename to source/common/ipc/lib/IpcChannel.ts diff --git a/source/common/ipc/lib/IpcConversation.js b/source/common/ipc/lib/IpcConversation.ts similarity index 100% rename from source/common/ipc/lib/IpcConversation.js rename to source/common/ipc/lib/IpcConversation.ts diff --git a/source/common/types/address-introspection.types.js b/source/common/types/address-introspection.types.ts similarity index 100% rename from source/common/types/address-introspection.types.js rename to source/common/types/address-introspection.types.ts diff --git a/source/common/types/address-pdf-request.types.js b/source/common/types/address-pdf-request.types.ts similarity index 100% rename from source/common/types/address-pdf-request.types.js rename to source/common/types/address-pdf-request.types.ts diff --git a/source/common/types/app-update.types.js b/source/common/types/app-update.types.ts similarity index 100% rename from source/common/types/app-update.types.js rename to source/common/types/app-update.types.ts diff --git a/source/common/types/bug-report-request.types.js b/source/common/types/bug-report-request.types.ts similarity index 100% rename from source/common/types/bug-report-request.types.js rename to source/common/types/bug-report-request.types.ts diff --git a/source/common/types/cardano-node.types.js b/source/common/types/cardano-node.types.ts similarity index 100% rename from source/common/types/cardano-node.types.js rename to source/common/types/cardano-node.types.ts diff --git a/source/common/types/csv-request.types.js b/source/common/types/csv-request.types.ts similarity index 100% rename from source/common/types/csv-request.types.js rename to source/common/types/csv-request.types.ts diff --git a/source/common/types/downloadManager.types.js b/source/common/types/downloadManager.types.ts similarity index 100% rename from source/common/types/downloadManager.types.js rename to source/common/types/downloadManager.types.ts diff --git a/source/common/types/electron-store.types.js b/source/common/types/electron-store.types.ts similarity index 100% rename from source/common/types/electron-store.types.js rename to source/common/types/electron-store.types.ts diff --git a/source/common/types/environment.types.js b/source/common/types/environment.types.ts similarity index 100% rename from source/common/types/environment.types.js rename to source/common/types/environment.types.ts diff --git a/source/common/types/file-dialog.types.js b/source/common/types/file-dialog.types.ts similarity index 100% rename from source/common/types/file-dialog.types.js rename to source/common/types/file-dialog.types.ts diff --git a/source/common/types/file-meta-request.types.js b/source/common/types/file-meta-request.types.ts similarity index 100% rename from source/common/types/file-meta-request.types.js rename to source/common/types/file-meta-request.types.ts diff --git a/source/common/types/hardware-wallets.types.js b/source/common/types/hardware-wallets.types.ts similarity index 100% rename from source/common/types/hardware-wallets.types.js rename to source/common/types/hardware-wallets.types.ts diff --git a/source/common/types/locales.types.js b/source/common/types/locales.types.ts similarity index 100% rename from source/common/types/locales.types.js rename to source/common/types/locales.types.ts diff --git a/source/common/types/logging.types.js b/source/common/types/logging.types.ts similarity index 100% rename from source/common/types/logging.types.js rename to source/common/types/logging.types.ts diff --git a/source/common/types/no-disk-space.types.js b/source/common/types/no-disk-space.types.ts similarity index 100% rename from source/common/types/no-disk-space.types.js rename to source/common/types/no-disk-space.types.ts diff --git a/source/common/types/number.types.js b/source/common/types/number.types.ts similarity index 100% rename from source/common/types/number.types.js rename to source/common/types/number.types.ts diff --git a/source/common/types/paper-wallet-request.types.js b/source/common/types/paper-wallet-request.types.ts similarity index 100% rename from source/common/types/paper-wallet-request.types.js rename to source/common/types/paper-wallet-request.types.ts diff --git a/source/common/types/save-qrCode.types.js b/source/common/types/save-qrCode.types.ts similarity index 100% rename from source/common/types/save-qrCode.types.js rename to source/common/types/save-qrCode.types.ts diff --git a/source/common/types/stateDirectoryPath.types.js b/source/common/types/stateDirectoryPath.types.ts similarity index 100% rename from source/common/types/stateDirectoryPath.types.js rename to source/common/types/stateDirectoryPath.types.ts diff --git a/source/common/types/support-requests.types.js b/source/common/types/support-requests.types.ts similarity index 100% rename from source/common/types/support-requests.types.js rename to source/common/types/support-requests.types.ts diff --git a/source/common/types/voting-pdf-request.types.js b/source/common/types/voting-pdf-request.types.ts similarity index 100% rename from source/common/types/voting-pdf-request.types.js rename to source/common/types/voting-pdf-request.types.ts diff --git a/source/common/utils/environmentCheckers.js b/source/common/utils/environmentCheckers.ts similarity index 100% rename from source/common/utils/environmentCheckers.js rename to source/common/utils/environmentCheckers.ts diff --git a/source/common/utils/files.js b/source/common/utils/files.ts similarity index 100% rename from source/common/utils/files.js rename to source/common/utils/files.ts diff --git a/source/common/utils/helper.js b/source/common/utils/helper.ts similarity index 100% rename from source/common/utils/helper.js rename to source/common/utils/helper.ts diff --git a/source/common/utils/logging.js b/source/common/utils/logging.ts similarity index 100% rename from source/common/utils/logging.js rename to source/common/utils/logging.ts diff --git a/source/common/utils/reporting.js b/source/common/utils/reporting.ts similarity index 100% rename from source/common/utils/reporting.js rename to source/common/utils/reporting.ts diff --git a/source/main/cardano/CardanoNode.js b/source/main/cardano/CardanoNode.ts similarity index 100% rename from source/main/cardano/CardanoNode.js rename to source/main/cardano/CardanoNode.ts diff --git a/source/main/cardano/CardanoSelfnodeLauncher.js b/source/main/cardano/CardanoSelfnodeLauncher.ts similarity index 100% rename from source/main/cardano/CardanoSelfnodeLauncher.js rename to source/main/cardano/CardanoSelfnodeLauncher.ts diff --git a/source/main/cardano/CardanoWalletLauncher.js b/source/main/cardano/CardanoWalletLauncher.ts similarity index 100% rename from source/main/cardano/CardanoWalletLauncher.js rename to source/main/cardano/CardanoWalletLauncher.ts diff --git a/source/main/cardano/config.js b/source/main/cardano/config.ts similarity index 100% rename from source/main/cardano/config.js rename to source/main/cardano/config.ts diff --git a/source/main/cardano/setup.js b/source/main/cardano/setup.ts similarity index 100% rename from source/main/cardano/setup.js rename to source/main/cardano/setup.ts diff --git a/source/main/cardano/utils.js b/source/main/cardano/utils.ts similarity index 100% rename from source/main/cardano/utils.js rename to source/main/cardano/utils.ts diff --git a/source/main/config.js b/source/main/config.ts similarity index 100% rename from source/main/config.js rename to source/main/config.ts diff --git a/source/main/environment.js b/source/main/environment.ts similarity index 100% rename from source/main/environment.js rename to source/main/environment.ts diff --git a/source/main/index.js b/source/main/index.ts similarity index 100% rename from source/main/index.js rename to source/main/index.ts diff --git a/source/main/ipc/bugReportRequestChannel.js b/source/main/ipc/bugReportRequestChannel.ts similarity index 100% rename from source/main/ipc/bugReportRequestChannel.js rename to source/main/ipc/bugReportRequestChannel.ts diff --git a/source/main/ipc/cardano.ipc.js b/source/main/ipc/cardano.ipc.ts similarity index 100% rename from source/main/ipc/cardano.ipc.js rename to source/main/ipc/cardano.ipc.ts diff --git a/source/main/ipc/compress-logs.js b/source/main/ipc/compress-logs.ts similarity index 100% rename from source/main/ipc/compress-logs.js rename to source/main/ipc/compress-logs.ts diff --git a/source/main/ipc/control-ui-parts.js b/source/main/ipc/control-ui-parts.ts similarity index 100% rename from source/main/ipc/control-ui-parts.js rename to source/main/ipc/control-ui-parts.ts diff --git a/source/main/ipc/download-logs.js b/source/main/ipc/download-logs.ts similarity index 100% rename from source/main/ipc/download-logs.js rename to source/main/ipc/download-logs.ts diff --git a/source/main/ipc/downloadManagerChannel.js b/source/main/ipc/downloadManagerChannel.ts similarity index 100% rename from source/main/ipc/downloadManagerChannel.js rename to source/main/ipc/downloadManagerChannel.ts diff --git a/source/main/ipc/electronStoreConversation.js b/source/main/ipc/electronStoreConversation.ts similarity index 100% rename from source/main/ipc/electronStoreConversation.js rename to source/main/ipc/electronStoreConversation.ts diff --git a/source/main/ipc/enableApplicationMenuNavigationChannel.js b/source/main/ipc/enableApplicationMenuNavigationChannel.ts similarity index 100% rename from source/main/ipc/enableApplicationMenuNavigationChannel.js rename to source/main/ipc/enableApplicationMenuNavigationChannel.ts diff --git a/source/main/ipc/generateAddressPDFChannel.js b/source/main/ipc/generateAddressPDFChannel.ts similarity index 100% rename from source/main/ipc/generateAddressPDFChannel.js rename to source/main/ipc/generateAddressPDFChannel.ts diff --git a/source/main/ipc/generateCsvChannel.js b/source/main/ipc/generateCsvChannel.ts similarity index 100% rename from source/main/ipc/generateCsvChannel.js rename to source/main/ipc/generateCsvChannel.ts diff --git a/source/main/ipc/generateFileMetaChannel.js b/source/main/ipc/generateFileMetaChannel.ts similarity index 100% rename from source/main/ipc/generateFileMetaChannel.js rename to source/main/ipc/generateFileMetaChannel.ts diff --git a/source/main/ipc/generatePaperWalletChannel.js b/source/main/ipc/generatePaperWalletChannel.ts similarity index 100% rename from source/main/ipc/generatePaperWalletChannel.js rename to source/main/ipc/generatePaperWalletChannel.ts diff --git a/source/main/ipc/generateVotingPDFChannel.js b/source/main/ipc/generateVotingPDFChannel.ts similarity index 100% rename from source/main/ipc/generateVotingPDFChannel.js rename to source/main/ipc/generateVotingPDFChannel.ts diff --git a/source/main/ipc/generateWalletMigrationReportChannel.js b/source/main/ipc/generateWalletMigrationReportChannel.ts similarity index 100% rename from source/main/ipc/generateWalletMigrationReportChannel.js rename to source/main/ipc/generateWalletMigrationReportChannel.ts diff --git a/source/main/ipc/get-block-replay-progress.js b/source/main/ipc/get-block-replay-progress.ts similarity index 100% rename from source/main/ipc/get-block-replay-progress.js rename to source/main/ipc/get-block-replay-progress.ts diff --git a/source/main/ipc/get-disk-space-status.js b/source/main/ipc/get-disk-space-status.ts similarity index 100% rename from source/main/ipc/get-disk-space-status.js rename to source/main/ipc/get-disk-space-status.ts diff --git a/source/main/ipc/get-gpu-status.js b/source/main/ipc/get-gpu-status.ts similarity index 100% rename from source/main/ipc/get-gpu-status.js rename to source/main/ipc/get-gpu-status.ts diff --git a/source/main/ipc/get-logs.js b/source/main/ipc/get-logs.ts similarity index 100% rename from source/main/ipc/get-logs.js rename to source/main/ipc/get-logs.ts diff --git a/source/main/ipc/getDesktopDirectoryPathChannel.js b/source/main/ipc/getDesktopDirectoryPathChannel.ts similarity index 100% rename from source/main/ipc/getDesktopDirectoryPathChannel.js rename to source/main/ipc/getDesktopDirectoryPathChannel.ts diff --git a/source/main/ipc/getHardwareWalletChannel.js b/source/main/ipc/getHardwareWalletChannel.ts similarity index 100% rename from source/main/ipc/getHardwareWalletChannel.js rename to source/main/ipc/getHardwareWalletChannel.ts diff --git a/source/main/ipc/getRecoveryWalletIdChannel.js b/source/main/ipc/getRecoveryWalletIdChannel.ts similarity index 100% rename from source/main/ipc/getRecoveryWalletIdChannel.js rename to source/main/ipc/getRecoveryWalletIdChannel.ts diff --git a/source/main/ipc/getStateDirectoryPathChannel.js b/source/main/ipc/getStateDirectoryPathChannel.ts similarity index 100% rename from source/main/ipc/getStateDirectoryPathChannel.js rename to source/main/ipc/getStateDirectoryPathChannel.ts diff --git a/source/main/ipc/getSystemLocaleChannel.js b/source/main/ipc/getSystemLocaleChannel.ts similarity index 100% rename from source/main/ipc/getSystemLocaleChannel.js rename to source/main/ipc/getSystemLocaleChannel.ts diff --git a/source/main/ipc/index.js b/source/main/ipc/index.ts similarity index 100% rename from source/main/ipc/index.js rename to source/main/ipc/index.ts diff --git a/source/main/ipc/introspect-address.js b/source/main/ipc/introspect-address.ts similarity index 100% rename from source/main/ipc/introspect-address.js rename to source/main/ipc/introspect-address.ts diff --git a/source/main/ipc/lib/MainIpcChannel.js b/source/main/ipc/lib/MainIpcChannel.ts similarity index 100% rename from source/main/ipc/lib/MainIpcChannel.js rename to source/main/ipc/lib/MainIpcChannel.ts diff --git a/source/main/ipc/lib/MainIpcConversation.js b/source/main/ipc/lib/MainIpcConversation.ts similarity index 100% rename from source/main/ipc/lib/MainIpcConversation.js rename to source/main/ipc/lib/MainIpcConversation.ts diff --git a/source/main/ipc/load-asset.js b/source/main/ipc/load-asset.ts similarity index 100% rename from source/main/ipc/load-asset.js rename to source/main/ipc/load-asset.ts diff --git a/source/main/ipc/manageAppUpdateChannel.js b/source/main/ipc/manageAppUpdateChannel.ts similarity index 100% rename from source/main/ipc/manageAppUpdateChannel.js rename to source/main/ipc/manageAppUpdateChannel.ts diff --git a/source/main/ipc/open-external-url.js b/source/main/ipc/open-external-url.ts similarity index 100% rename from source/main/ipc/open-external-url.js rename to source/main/ipc/open-external-url.ts diff --git a/source/main/ipc/open-local-directory.js b/source/main/ipc/open-local-directory.ts similarity index 100% rename from source/main/ipc/open-local-directory.js rename to source/main/ipc/open-local-directory.ts diff --git a/source/main/ipc/rebuild-application-menu.js b/source/main/ipc/rebuild-application-menu.ts similarity index 100% rename from source/main/ipc/rebuild-application-menu.js rename to source/main/ipc/rebuild-application-menu.ts diff --git a/source/main/ipc/resize-window.js b/source/main/ipc/resize-window.ts similarity index 100% rename from source/main/ipc/resize-window.js rename to source/main/ipc/resize-window.ts diff --git a/source/main/ipc/saveQRCodeImageChannel.js b/source/main/ipc/saveQRCodeImageChannel.ts similarity index 100% rename from source/main/ipc/saveQRCodeImageChannel.js rename to source/main/ipc/saveQRCodeImageChannel.ts diff --git a/source/main/ipc/set-log-state-snapshot.js b/source/main/ipc/set-log-state-snapshot.ts similarity index 100% rename from source/main/ipc/set-log-state-snapshot.js rename to source/main/ipc/set-log-state-snapshot.ts diff --git a/source/main/ipc/show-file-dialog-channels.js b/source/main/ipc/show-file-dialog-channels.ts similarity index 100% rename from source/main/ipc/show-file-dialog-channels.js rename to source/main/ipc/show-file-dialog-channels.ts diff --git a/source/main/menus/MenuActions.types.js b/source/main/menus/MenuActions.types.ts similarity index 100% rename from source/main/menus/MenuActions.types.js rename to source/main/menus/MenuActions.types.ts diff --git a/source/main/menus/osx.js b/source/main/menus/osx.ts similarity index 100% rename from source/main/menus/osx.js rename to source/main/menus/osx.ts diff --git a/source/main/menus/win-linux.js b/source/main/menus/win-linux.ts similarity index 100% rename from source/main/menus/win-linux.js rename to source/main/menus/win-linux.ts diff --git a/source/main/preload.js b/source/main/preload.ts similarity index 100% rename from source/main/preload.js rename to source/main/preload.ts diff --git a/source/main/utils/buildAppMenus.js b/source/main/utils/buildAppMenus.ts similarity index 100% rename from source/main/utils/buildAppMenus.js rename to source/main/utils/buildAppMenus.ts diff --git a/source/main/utils/config.js b/source/main/utils/config.ts similarity index 100% rename from source/main/utils/config.js rename to source/main/utils/config.ts diff --git a/source/main/utils/detectSystemLocale.js b/source/main/utils/detectSystemLocale.ts similarity index 100% rename from source/main/utils/detectSystemLocale.js rename to source/main/utils/detectSystemLocale.ts diff --git a/source/main/utils/downloadManager.js b/source/main/utils/downloadManager.ts similarity index 100% rename from source/main/utils/downloadManager.js rename to source/main/utils/downloadManager.ts diff --git a/source/main/utils/ensureDirectoryExists.js b/source/main/utils/ensureDirectoryExists.ts similarity index 100% rename from source/main/utils/ensureDirectoryExists.js rename to source/main/utils/ensureDirectoryExists.ts diff --git a/source/main/utils/getContentMinimumSize.js b/source/main/utils/getContentMinimumSize.ts similarity index 100% rename from source/main/utils/getContentMinimumSize.js rename to source/main/utils/getContentMinimumSize.ts diff --git a/source/main/utils/getLocale.js b/source/main/utils/getLocale.ts similarity index 100% rename from source/main/utils/getLocale.js rename to source/main/utils/getLocale.ts diff --git a/source/main/utils/getTranslation.js b/source/main/utils/getTranslation.ts similarity index 100% rename from source/main/utils/getTranslation.js rename to source/main/utils/getTranslation.ts diff --git a/source/main/utils/handleCheckBlockReplayProgress.js b/source/main/utils/handleCheckBlockReplayProgress.ts similarity index 100% rename from source/main/utils/handleCheckBlockReplayProgress.js rename to source/main/utils/handleCheckBlockReplayProgress.ts diff --git a/source/main/utils/handleDiskSpace.js b/source/main/utils/handleDiskSpace.ts similarity index 100% rename from source/main/utils/handleDiskSpace.js rename to source/main/utils/handleDiskSpace.ts diff --git a/source/main/utils/installChromeExtensions.js b/source/main/utils/installChromeExtensions.ts similarity index 100% rename from source/main/utils/installChromeExtensions.js rename to source/main/utils/installChromeExtensions.ts diff --git a/source/main/utils/logUsedVersion.js b/source/main/utils/logUsedVersion.ts similarity index 100% rename from source/main/utils/logUsedVersion.js rename to source/main/utils/logUsedVersion.ts diff --git a/source/main/utils/logging.js b/source/main/utils/logging.ts similarity index 100% rename from source/main/utils/logging.js rename to source/main/utils/logging.ts diff --git a/source/main/utils/mainErrorHandler.js b/source/main/utils/mainErrorHandler.ts similarity index 100% rename from source/main/utils/mainErrorHandler.js rename to source/main/utils/mainErrorHandler.ts diff --git a/source/main/utils/mainLocalStorage.js b/source/main/utils/mainLocalStorage.ts similarity index 100% rename from source/main/utils/mainLocalStorage.js rename to source/main/utils/mainLocalStorage.ts diff --git a/source/main/utils/pdf.js b/source/main/utils/pdf.ts similarity index 100% rename from source/main/utils/pdf.js rename to source/main/utils/pdf.ts diff --git a/source/main/utils/processes.js b/source/main/utils/processes.ts similarity index 100% rename from source/main/utils/processes.js rename to source/main/utils/processes.ts diff --git a/source/main/utils/rendererErrorHandler.js b/source/main/utils/rendererErrorHandler.ts similarity index 100% rename from source/main/utils/rendererErrorHandler.js rename to source/main/utils/rendererErrorHandler.ts diff --git a/source/main/utils/restoreKeystore.js b/source/main/utils/restoreKeystore.ts similarity index 100% rename from source/main/utils/restoreKeystore.js rename to source/main/utils/restoreKeystore.ts diff --git a/source/main/utils/rtsFlags.js b/source/main/utils/rtsFlags.ts similarity index 100% rename from source/main/utils/rtsFlags.js rename to source/main/utils/rtsFlags.ts diff --git a/source/main/utils/safeExitWithCode.js b/source/main/utils/safeExitWithCode.ts similarity index 100% rename from source/main/utils/safeExitWithCode.js rename to source/main/utils/safeExitWithCode.ts diff --git a/source/main/utils/setupLogging.js b/source/main/utils/setupLogging.ts similarity index 100% rename from source/main/utils/setupLogging.js rename to source/main/utils/setupLogging.ts diff --git a/source/main/windows/main.js b/source/main/windows/main.ts similarity index 100% rename from source/main/windows/main.js rename to source/main/windows/main.ts diff --git a/source/main/windows/windowBounds.js b/source/main/windows/windowBounds.ts similarity index 100% rename from source/main/windows/windowBounds.js rename to source/main/windows/windowBounds.ts diff --git a/source/renderer/app/App.js b/source/renderer/app/App.ts similarity index 100% rename from source/renderer/app/App.js rename to source/renderer/app/App.ts diff --git a/source/renderer/app/Routes.js b/source/renderer/app/Routes.ts similarity index 100% rename from source/renderer/app/Routes.js rename to source/renderer/app/Routes.ts diff --git a/source/renderer/app/ThemeManager.js b/source/renderer/app/ThemeManager.ts similarity index 100% rename from source/renderer/app/ThemeManager.js rename to source/renderer/app/ThemeManager.ts diff --git a/source/renderer/app/WindowSizeManager.js b/source/renderer/app/WindowSizeManager.ts similarity index 100% rename from source/renderer/app/WindowSizeManager.js rename to source/renderer/app/WindowSizeManager.ts diff --git a/source/renderer/app/actions/addresses-actions.js b/source/renderer/app/actions/addresses-actions.ts similarity index 100% rename from source/renderer/app/actions/addresses-actions.js rename to source/renderer/app/actions/addresses-actions.ts diff --git a/source/renderer/app/actions/app-actions.js b/source/renderer/app/actions/app-actions.ts similarity index 100% rename from source/renderer/app/actions/app-actions.js rename to source/renderer/app/actions/app-actions.ts diff --git a/source/renderer/app/actions/app-update-actions.js b/source/renderer/app/actions/app-update-actions.ts similarity index 100% rename from source/renderer/app/actions/app-update-actions.js rename to source/renderer/app/actions/app-update-actions.ts diff --git a/source/renderer/app/actions/assets-actions.js b/source/renderer/app/actions/assets-actions.ts similarity index 100% rename from source/renderer/app/actions/assets-actions.js rename to source/renderer/app/actions/assets-actions.ts diff --git a/source/renderer/app/actions/currency-actions.js b/source/renderer/app/actions/currency-actions.ts similarity index 100% rename from source/renderer/app/actions/currency-actions.js rename to source/renderer/app/actions/currency-actions.ts diff --git a/source/renderer/app/actions/dialogs-actions.js b/source/renderer/app/actions/dialogs-actions.ts similarity index 100% rename from source/renderer/app/actions/dialogs-actions.js rename to source/renderer/app/actions/dialogs-actions.ts diff --git a/source/renderer/app/actions/hardware-wallets-actions.js b/source/renderer/app/actions/hardware-wallets-actions.ts similarity index 100% rename from source/renderer/app/actions/hardware-wallets-actions.js rename to source/renderer/app/actions/hardware-wallets-actions.ts diff --git a/source/renderer/app/actions/index.js b/source/renderer/app/actions/index.ts similarity index 100% rename from source/renderer/app/actions/index.js rename to source/renderer/app/actions/index.ts diff --git a/source/renderer/app/actions/lib/Action.js b/source/renderer/app/actions/lib/Action.ts similarity index 100% rename from source/renderer/app/actions/lib/Action.js rename to source/renderer/app/actions/lib/Action.ts diff --git a/source/renderer/app/actions/network-status-actions.js b/source/renderer/app/actions/network-status-actions.ts similarity index 100% rename from source/renderer/app/actions/network-status-actions.js rename to source/renderer/app/actions/network-status-actions.ts diff --git a/source/renderer/app/actions/notifications-actions.js b/source/renderer/app/actions/notifications-actions.ts similarity index 100% rename from source/renderer/app/actions/notifications-actions.js rename to source/renderer/app/actions/notifications-actions.ts diff --git a/source/renderer/app/actions/profile-actions.js b/source/renderer/app/actions/profile-actions.ts similarity index 100% rename from source/renderer/app/actions/profile-actions.js rename to source/renderer/app/actions/profile-actions.ts diff --git a/source/renderer/app/actions/router-actions.js b/source/renderer/app/actions/router-actions.ts similarity index 100% rename from source/renderer/app/actions/router-actions.js rename to source/renderer/app/actions/router-actions.ts diff --git a/source/renderer/app/actions/sidebar-actions.js b/source/renderer/app/actions/sidebar-actions.ts similarity index 100% rename from source/renderer/app/actions/sidebar-actions.js rename to source/renderer/app/actions/sidebar-actions.ts diff --git a/source/renderer/app/actions/staking-actions.js b/source/renderer/app/actions/staking-actions.ts similarity index 100% rename from source/renderer/app/actions/staking-actions.js rename to source/renderer/app/actions/staking-actions.ts diff --git a/source/renderer/app/actions/transactions-actions.js b/source/renderer/app/actions/transactions-actions.ts similarity index 100% rename from source/renderer/app/actions/transactions-actions.js rename to source/renderer/app/actions/transactions-actions.ts diff --git a/source/renderer/app/actions/voting-actions.js b/source/renderer/app/actions/voting-actions.ts similarity index 100% rename from source/renderer/app/actions/voting-actions.js rename to source/renderer/app/actions/voting-actions.ts diff --git a/source/renderer/app/actions/wallet-backup-actions.js b/source/renderer/app/actions/wallet-backup-actions.ts similarity index 100% rename from source/renderer/app/actions/wallet-backup-actions.js rename to source/renderer/app/actions/wallet-backup-actions.ts diff --git a/source/renderer/app/actions/wallet-migration-actions.js b/source/renderer/app/actions/wallet-migration-actions.ts similarity index 100% rename from source/renderer/app/actions/wallet-migration-actions.js rename to source/renderer/app/actions/wallet-migration-actions.ts diff --git a/source/renderer/app/actions/wallet-settings-actions.js b/source/renderer/app/actions/wallet-settings-actions.ts similarity index 100% rename from source/renderer/app/actions/wallet-settings-actions.js rename to source/renderer/app/actions/wallet-settings-actions.ts diff --git a/source/renderer/app/actions/wallets-actions.js b/source/renderer/app/actions/wallets-actions.ts similarity index 100% rename from source/renderer/app/actions/wallets-actions.js rename to source/renderer/app/actions/wallets-actions.ts diff --git a/source/renderer/app/actions/wallets-local-actions.js b/source/renderer/app/actions/wallets-local-actions.ts similarity index 100% rename from source/renderer/app/actions/wallets-local-actions.js rename to source/renderer/app/actions/wallets-local-actions.ts diff --git a/source/renderer/app/actions/window-actions.js b/source/renderer/app/actions/window-actions.ts similarity index 100% rename from source/renderer/app/actions/window-actions.js rename to source/renderer/app/actions/window-actions.ts diff --git a/source/renderer/app/api/addresses/requests/constructAddress.js b/source/renderer/app/api/addresses/requests/constructAddress.ts similarity index 100% rename from source/renderer/app/api/addresses/requests/constructAddress.js rename to source/renderer/app/api/addresses/requests/constructAddress.ts diff --git a/source/renderer/app/api/addresses/requests/createByronWalletAddress.js b/source/renderer/app/api/addresses/requests/createByronWalletAddress.ts similarity index 100% rename from source/renderer/app/api/addresses/requests/createByronWalletAddress.js rename to source/renderer/app/api/addresses/requests/createByronWalletAddress.ts diff --git a/source/renderer/app/api/addresses/requests/getAddress.js b/source/renderer/app/api/addresses/requests/getAddress.ts similarity index 100% rename from source/renderer/app/api/addresses/requests/getAddress.js rename to source/renderer/app/api/addresses/requests/getAddress.ts diff --git a/source/renderer/app/api/addresses/requests/getAddresses.js b/source/renderer/app/api/addresses/requests/getAddresses.ts similarity index 100% rename from source/renderer/app/api/addresses/requests/getAddresses.js rename to source/renderer/app/api/addresses/requests/getAddresses.ts diff --git a/source/renderer/app/api/addresses/requests/getByronWalletAddresses.js b/source/renderer/app/api/addresses/requests/getByronWalletAddresses.ts similarity index 100% rename from source/renderer/app/api/addresses/requests/getByronWalletAddresses.js rename to source/renderer/app/api/addresses/requests/getByronWalletAddresses.ts diff --git a/source/renderer/app/api/addresses/requests/inspectAddress.js b/source/renderer/app/api/addresses/requests/inspectAddress.ts similarity index 100% rename from source/renderer/app/api/addresses/requests/inspectAddress.js rename to source/renderer/app/api/addresses/requests/inspectAddress.ts diff --git a/source/renderer/app/api/addresses/types.js b/source/renderer/app/api/addresses/types.ts similarity index 100% rename from source/renderer/app/api/addresses/types.js rename to source/renderer/app/api/addresses/types.ts diff --git a/source/renderer/app/api/api.js b/source/renderer/app/api/api.ts similarity index 100% rename from source/renderer/app/api/api.js rename to source/renderer/app/api/api.ts diff --git a/source/renderer/app/api/assets/requests/getAssets.js b/source/renderer/app/api/assets/requests/getAssets.ts similarity index 100% rename from source/renderer/app/api/assets/requests/getAssets.js rename to source/renderer/app/api/assets/requests/getAssets.ts diff --git a/source/renderer/app/api/assets/requests/getUnknownAsset.js b/source/renderer/app/api/assets/requests/getUnknownAsset.ts similarity index 100% rename from source/renderer/app/api/assets/requests/getUnknownAsset.js rename to source/renderer/app/api/assets/requests/getUnknownAsset.ts diff --git a/source/renderer/app/api/assets/types.js b/source/renderer/app/api/assets/types.ts similarity index 100% rename from source/renderer/app/api/assets/types.js rename to source/renderer/app/api/assets/types.ts diff --git a/source/renderer/app/api/common/errors.js b/source/renderer/app/api/common/errors.ts similarity index 100% rename from source/renderer/app/api/common/errors.js rename to source/renderer/app/api/common/errors.ts diff --git a/source/renderer/app/api/common/types.js b/source/renderer/app/api/common/types.ts similarity index 100% rename from source/renderer/app/api/common/types.js rename to source/renderer/app/api/common/types.ts diff --git a/source/renderer/app/api/errors.js b/source/renderer/app/api/errors.ts similarity index 100% rename from source/renderer/app/api/errors.js rename to source/renderer/app/api/errors.ts diff --git a/source/renderer/app/api/index.js b/source/renderer/app/api/index.ts similarity index 100% rename from source/renderer/app/api/index.js rename to source/renderer/app/api/index.ts diff --git a/source/renderer/app/api/network/requests/getNetworkClock.js b/source/renderer/app/api/network/requests/getNetworkClock.ts similarity index 100% rename from source/renderer/app/api/network/requests/getNetworkClock.js rename to source/renderer/app/api/network/requests/getNetworkClock.ts diff --git a/source/renderer/app/api/network/requests/getNetworkInfo.js b/source/renderer/app/api/network/requests/getNetworkInfo.ts similarity index 100% rename from source/renderer/app/api/network/requests/getNetworkInfo.js rename to source/renderer/app/api/network/requests/getNetworkInfo.ts diff --git a/source/renderer/app/api/network/requests/getNetworkParameters.js b/source/renderer/app/api/network/requests/getNetworkParameters.ts similarity index 100% rename from source/renderer/app/api/network/requests/getNetworkParameters.js rename to source/renderer/app/api/network/requests/getNetworkParameters.ts diff --git a/source/renderer/app/api/network/types.js b/source/renderer/app/api/network/types.ts similarity index 100% rename from source/renderer/app/api/network/types.js rename to source/renderer/app/api/network/types.ts diff --git a/source/renderer/app/api/news/requests/getNews.js b/source/renderer/app/api/news/requests/getNews.ts similarity index 100% rename from source/renderer/app/api/news/requests/getNews.js rename to source/renderer/app/api/news/requests/getNews.ts diff --git a/source/renderer/app/api/news/requests/getNewsHash.js b/source/renderer/app/api/news/requests/getNewsHash.ts similarity index 100% rename from source/renderer/app/api/news/requests/getNewsHash.js rename to source/renderer/app/api/news/requests/getNewsHash.ts diff --git a/source/renderer/app/api/news/types.js b/source/renderer/app/api/news/types.ts similarity index 100% rename from source/renderer/app/api/news/types.js rename to source/renderer/app/api/news/types.ts diff --git a/source/renderer/app/api/nodes/errors.js b/source/renderer/app/api/nodes/errors.ts similarity index 100% rename from source/renderer/app/api/nodes/errors.js rename to source/renderer/app/api/nodes/errors.ts diff --git a/source/renderer/app/api/staking/requests/checkSmashServerHealth.js b/source/renderer/app/api/staking/requests/checkSmashServerHealth.ts similarity index 100% rename from source/renderer/app/api/staking/requests/checkSmashServerHealth.js rename to source/renderer/app/api/staking/requests/checkSmashServerHealth.ts diff --git a/source/renderer/app/api/staking/requests/getDelegationFee.js b/source/renderer/app/api/staking/requests/getDelegationFee.ts similarity index 100% rename from source/renderer/app/api/staking/requests/getDelegationFee.js rename to source/renderer/app/api/staking/requests/getDelegationFee.ts diff --git a/source/renderer/app/api/staking/requests/getSmashSettings.js b/source/renderer/app/api/staking/requests/getSmashSettings.ts similarity index 100% rename from source/renderer/app/api/staking/requests/getSmashSettings.js rename to source/renderer/app/api/staking/requests/getSmashSettings.ts diff --git a/source/renderer/app/api/staking/requests/getStakePools.js b/source/renderer/app/api/staking/requests/getStakePools.ts similarity index 100% rename from source/renderer/app/api/staking/requests/getStakePools.js rename to source/renderer/app/api/staking/requests/getStakePools.ts diff --git a/source/renderer/app/api/staking/requests/joinStakePool.js b/source/renderer/app/api/staking/requests/joinStakePool.ts similarity index 100% rename from source/renderer/app/api/staking/requests/joinStakePool.js rename to source/renderer/app/api/staking/requests/joinStakePool.ts diff --git a/source/renderer/app/api/staking/requests/quitStakePool.js b/source/renderer/app/api/staking/requests/quitStakePool.ts similarity index 100% rename from source/renderer/app/api/staking/requests/quitStakePool.js rename to source/renderer/app/api/staking/requests/quitStakePool.ts diff --git a/source/renderer/app/api/staking/requests/updateSmashSettings.js b/source/renderer/app/api/staking/requests/updateSmashSettings.ts similarity index 100% rename from source/renderer/app/api/staking/requests/updateSmashSettings.js rename to source/renderer/app/api/staking/requests/updateSmashSettings.ts diff --git a/source/renderer/app/api/staking/types.js b/source/renderer/app/api/staking/types.ts similarity index 100% rename from source/renderer/app/api/staking/types.js rename to source/renderer/app/api/staking/types.ts diff --git a/source/renderer/app/api/transactions/requests/createByronWalletTransaction.js b/source/renderer/app/api/transactions/requests/createByronWalletTransaction.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/createByronWalletTransaction.js rename to source/renderer/app/api/transactions/requests/createByronWalletTransaction.ts diff --git a/source/renderer/app/api/transactions/requests/createExternalTransaction.js b/source/renderer/app/api/transactions/requests/createExternalTransaction.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/createExternalTransaction.js rename to source/renderer/app/api/transactions/requests/createExternalTransaction.ts diff --git a/source/renderer/app/api/transactions/requests/createTransaction.js b/source/renderer/app/api/transactions/requests/createTransaction.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/createTransaction.js rename to source/renderer/app/api/transactions/requests/createTransaction.ts diff --git a/source/renderer/app/api/transactions/requests/deleteLegacyTransaction.js b/source/renderer/app/api/transactions/requests/deleteLegacyTransaction.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/deleteLegacyTransaction.js rename to source/renderer/app/api/transactions/requests/deleteLegacyTransaction.ts diff --git a/source/renderer/app/api/transactions/requests/deleteTransaction.js b/source/renderer/app/api/transactions/requests/deleteTransaction.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/deleteTransaction.js rename to source/renderer/app/api/transactions/requests/deleteTransaction.ts diff --git a/source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.js b/source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.js rename to source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.ts diff --git a/source/renderer/app/api/transactions/requests/getICOPublicKey.js b/source/renderer/app/api/transactions/requests/getICOPublicKey.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getICOPublicKey.js rename to source/renderer/app/api/transactions/requests/getICOPublicKey.ts diff --git a/source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.js b/source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.js rename to source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.ts diff --git a/source/renderer/app/api/transactions/requests/getPublicKey.js b/source/renderer/app/api/transactions/requests/getPublicKey.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getPublicKey.js rename to source/renderer/app/api/transactions/requests/getPublicKey.ts diff --git a/source/renderer/app/api/transactions/requests/getTransaction.js b/source/renderer/app/api/transactions/requests/getTransaction.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getTransaction.js rename to source/renderer/app/api/transactions/requests/getTransaction.ts diff --git a/source/renderer/app/api/transactions/requests/getTransactionFee.js b/source/renderer/app/api/transactions/requests/getTransactionFee.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getTransactionFee.js rename to source/renderer/app/api/transactions/requests/getTransactionFee.ts diff --git a/source/renderer/app/api/transactions/requests/getTransactionHistory.js b/source/renderer/app/api/transactions/requests/getTransactionHistory.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getTransactionHistory.js rename to source/renderer/app/api/transactions/requests/getTransactionHistory.ts diff --git a/source/renderer/app/api/transactions/requests/getWithdrawalHistory.js b/source/renderer/app/api/transactions/requests/getWithdrawalHistory.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/getWithdrawalHistory.js rename to source/renderer/app/api/transactions/requests/getWithdrawalHistory.ts diff --git a/source/renderer/app/api/transactions/requests/selectCoins.js b/source/renderer/app/api/transactions/requests/selectCoins.ts similarity index 100% rename from source/renderer/app/api/transactions/requests/selectCoins.js rename to source/renderer/app/api/transactions/requests/selectCoins.ts diff --git a/source/renderer/app/api/transactions/types.js b/source/renderer/app/api/transactions/types.ts similarity index 100% rename from source/renderer/app/api/transactions/types.js rename to source/renderer/app/api/transactions/types.ts diff --git a/source/renderer/app/api/utils/apiHelpers.js b/source/renderer/app/api/utils/apiHelpers.ts similarity index 100% rename from source/renderer/app/api/utils/apiHelpers.js rename to source/renderer/app/api/utils/apiHelpers.ts diff --git a/source/renderer/app/api/utils/externalRequest.js b/source/renderer/app/api/utils/externalRequest.ts similarity index 100% rename from source/renderer/app/api/utils/externalRequest.js rename to source/renderer/app/api/utils/externalRequest.ts diff --git a/source/renderer/app/api/utils/hashing.js b/source/renderer/app/api/utils/hashing.ts similarity index 100% rename from source/renderer/app/api/utils/hashing.js rename to source/renderer/app/api/utils/hashing.ts diff --git a/source/renderer/app/api/utils/index.js b/source/renderer/app/api/utils/index.ts similarity index 100% rename from source/renderer/app/api/utils/index.js rename to source/renderer/app/api/utils/index.ts diff --git a/source/renderer/app/api/utils/localStorage.js b/source/renderer/app/api/utils/localStorage.ts similarity index 100% rename from source/renderer/app/api/utils/localStorage.js rename to source/renderer/app/api/utils/localStorage.ts diff --git a/source/renderer/app/api/utils/mnemonics.js b/source/renderer/app/api/utils/mnemonics.ts similarity index 100% rename from source/renderer/app/api/utils/mnemonics.js rename to source/renderer/app/api/utils/mnemonics.ts diff --git a/source/renderer/app/api/utils/patchAdaApi.js b/source/renderer/app/api/utils/patchAdaApi.ts similarity index 100% rename from source/renderer/app/api/utils/patchAdaApi.js rename to source/renderer/app/api/utils/patchAdaApi.ts diff --git a/source/renderer/app/api/utils/request.js b/source/renderer/app/api/utils/request.ts similarity index 100% rename from source/renderer/app/api/utils/request.js rename to source/renderer/app/api/utils/request.ts diff --git a/source/renderer/app/api/utils/requestV0.js b/source/renderer/app/api/utils/requestV0.ts similarity index 100% rename from source/renderer/app/api/utils/requestV0.js rename to source/renderer/app/api/utils/requestV0.ts diff --git a/source/renderer/app/api/voting/requests/createWalletSignature.js b/source/renderer/app/api/voting/requests/createWalletSignature.ts similarity index 100% rename from source/renderer/app/api/voting/requests/createWalletSignature.js rename to source/renderer/app/api/voting/requests/createWalletSignature.ts diff --git a/source/renderer/app/api/voting/types.js b/source/renderer/app/api/voting/types.ts similarity index 100% rename from source/renderer/app/api/voting/types.js rename to source/renderer/app/api/voting/types.ts diff --git a/source/renderer/app/api/wallets/requests/createHardwareWallet.js b/source/renderer/app/api/wallets/requests/createHardwareWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/createHardwareWallet.js rename to source/renderer/app/api/wallets/requests/createHardwareWallet.ts diff --git a/source/renderer/app/api/wallets/requests/createWallet.js b/source/renderer/app/api/wallets/requests/createWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/createWallet.js rename to source/renderer/app/api/wallets/requests/createWallet.ts diff --git a/source/renderer/app/api/wallets/requests/deleteLegacyWallet.js b/source/renderer/app/api/wallets/requests/deleteLegacyWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/deleteLegacyWallet.js rename to source/renderer/app/api/wallets/requests/deleteLegacyWallet.ts diff --git a/source/renderer/app/api/wallets/requests/deleteWallet.js b/source/renderer/app/api/wallets/requests/deleteWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/deleteWallet.js rename to source/renderer/app/api/wallets/requests/deleteWallet.ts diff --git a/source/renderer/app/api/wallets/requests/exportWalletAsJSON.js b/source/renderer/app/api/wallets/requests/exportWalletAsJSON.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/exportWalletAsJSON.js rename to source/renderer/app/api/wallets/requests/exportWalletAsJSON.ts diff --git a/source/renderer/app/api/wallets/requests/getAccountPublicKey.js b/source/renderer/app/api/wallets/requests/getAccountPublicKey.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getAccountPublicKey.js rename to source/renderer/app/api/wallets/requests/getAccountPublicKey.ts diff --git a/source/renderer/app/api/wallets/requests/getByronWalletUtxos.js b/source/renderer/app/api/wallets/requests/getByronWalletUtxos.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getByronWalletUtxos.js rename to source/renderer/app/api/wallets/requests/getByronWalletUtxos.ts diff --git a/source/renderer/app/api/wallets/requests/getCurrencyList.js b/source/renderer/app/api/wallets/requests/getCurrencyList.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getCurrencyList.js rename to source/renderer/app/api/wallets/requests/getCurrencyList.ts diff --git a/source/renderer/app/api/wallets/requests/getCurrencyRate.js b/source/renderer/app/api/wallets/requests/getCurrencyRate.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getCurrencyRate.js rename to source/renderer/app/api/wallets/requests/getCurrencyRate.ts diff --git a/source/renderer/app/api/wallets/requests/getLegacyWallet.js b/source/renderer/app/api/wallets/requests/getLegacyWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getLegacyWallet.js rename to source/renderer/app/api/wallets/requests/getLegacyWallet.ts diff --git a/source/renderer/app/api/wallets/requests/getLegacyWallets.js b/source/renderer/app/api/wallets/requests/getLegacyWallets.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getLegacyWallets.js rename to source/renderer/app/api/wallets/requests/getLegacyWallets.ts diff --git a/source/renderer/app/api/wallets/requests/getWallet.js b/source/renderer/app/api/wallets/requests/getWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getWallet.js rename to source/renderer/app/api/wallets/requests/getWallet.ts diff --git a/source/renderer/app/api/wallets/requests/getWalletPublicKey.js b/source/renderer/app/api/wallets/requests/getWalletPublicKey.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getWalletPublicKey.js rename to source/renderer/app/api/wallets/requests/getWalletPublicKey.ts diff --git a/source/renderer/app/api/wallets/requests/getWalletUtxos.js b/source/renderer/app/api/wallets/requests/getWalletUtxos.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getWalletUtxos.js rename to source/renderer/app/api/wallets/requests/getWalletUtxos.ts diff --git a/source/renderer/app/api/wallets/requests/getWallets.js b/source/renderer/app/api/wallets/requests/getWallets.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/getWallets.js rename to source/renderer/app/api/wallets/requests/getWallets.ts diff --git a/source/renderer/app/api/wallets/requests/importWalletAsJSON.js b/source/renderer/app/api/wallets/requests/importWalletAsJSON.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/importWalletAsJSON.js rename to source/renderer/app/api/wallets/requests/importWalletAsJSON.ts diff --git a/source/renderer/app/api/wallets/requests/importWalletAsKey.js b/source/renderer/app/api/wallets/requests/importWalletAsKey.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/importWalletAsKey.js rename to source/renderer/app/api/wallets/requests/importWalletAsKey.ts diff --git a/source/renderer/app/api/wallets/requests/restoreByronWallet.js b/source/renderer/app/api/wallets/requests/restoreByronWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/restoreByronWallet.js rename to source/renderer/app/api/wallets/requests/restoreByronWallet.ts diff --git a/source/renderer/app/api/wallets/requests/restoreExportedByronWallet.js b/source/renderer/app/api/wallets/requests/restoreExportedByronWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/restoreExportedByronWallet.js rename to source/renderer/app/api/wallets/requests/restoreExportedByronWallet.ts diff --git a/source/renderer/app/api/wallets/requests/restoreLegacyWallet.js b/source/renderer/app/api/wallets/requests/restoreLegacyWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/restoreLegacyWallet.js rename to source/renderer/app/api/wallets/requests/restoreLegacyWallet.ts diff --git a/source/renderer/app/api/wallets/requests/restoreWallet.js b/source/renderer/app/api/wallets/requests/restoreWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/restoreWallet.js rename to source/renderer/app/api/wallets/requests/restoreWallet.ts diff --git a/source/renderer/app/api/wallets/requests/transferFunds.js b/source/renderer/app/api/wallets/requests/transferFunds.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/transferFunds.js rename to source/renderer/app/api/wallets/requests/transferFunds.ts diff --git a/source/renderer/app/api/wallets/requests/transferFundsCalculateFee.js b/source/renderer/app/api/wallets/requests/transferFundsCalculateFee.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/transferFundsCalculateFee.js rename to source/renderer/app/api/wallets/requests/transferFundsCalculateFee.ts diff --git a/source/renderer/app/api/wallets/requests/updateByronSpendingPassword.js b/source/renderer/app/api/wallets/requests/updateByronSpendingPassword.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/updateByronSpendingPassword.js rename to source/renderer/app/api/wallets/requests/updateByronSpendingPassword.ts diff --git a/source/renderer/app/api/wallets/requests/updateByronWallet.js b/source/renderer/app/api/wallets/requests/updateByronWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/updateByronWallet.js rename to source/renderer/app/api/wallets/requests/updateByronWallet.ts diff --git a/source/renderer/app/api/wallets/requests/updateSpendingPassword.js b/source/renderer/app/api/wallets/requests/updateSpendingPassword.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/updateSpendingPassword.js rename to source/renderer/app/api/wallets/requests/updateSpendingPassword.ts diff --git a/source/renderer/app/api/wallets/requests/updateWallet.js b/source/renderer/app/api/wallets/requests/updateWallet.ts similarity index 100% rename from source/renderer/app/api/wallets/requests/updateWallet.js rename to source/renderer/app/api/wallets/requests/updateWallet.ts diff --git a/source/renderer/app/api/wallets/types.js b/source/renderer/app/api/wallets/types.ts similarity index 100% rename from source/renderer/app/api/wallets/types.js rename to source/renderer/app/api/wallets/types.ts diff --git a/source/renderer/app/components/appUpdate/AppUpdateOverlay.js b/source/renderer/app/components/appUpdate/AppUpdateOverlay.ts similarity index 100% rename from source/renderer/app/components/appUpdate/AppUpdateOverlay.js rename to source/renderer/app/components/appUpdate/AppUpdateOverlay.ts diff --git a/source/renderer/app/components/assets/Asset.js b/source/renderer/app/components/assets/Asset.ts similarity index 100% rename from source/renderer/app/components/assets/Asset.js rename to source/renderer/app/components/assets/Asset.ts diff --git a/source/renderer/app/components/assets/AssetAmount.js b/source/renderer/app/components/assets/AssetAmount.ts similarity index 100% rename from source/renderer/app/components/assets/AssetAmount.js rename to source/renderer/app/components/assets/AssetAmount.ts diff --git a/source/renderer/app/components/assets/AssetContent.js b/source/renderer/app/components/assets/AssetContent.ts similarity index 100% rename from source/renderer/app/components/assets/AssetContent.js rename to source/renderer/app/components/assets/AssetContent.ts diff --git a/source/renderer/app/components/assets/AssetSettingsDialog.js b/source/renderer/app/components/assets/AssetSettingsDialog.ts similarity index 100% rename from source/renderer/app/components/assets/AssetSettingsDialog.js rename to source/renderer/app/components/assets/AssetSettingsDialog.ts diff --git a/source/renderer/app/components/assets/AssetTransactionConfirmation.js b/source/renderer/app/components/assets/AssetTransactionConfirmation.ts similarity index 100% rename from source/renderer/app/components/assets/AssetTransactionConfirmation.js rename to source/renderer/app/components/assets/AssetTransactionConfirmation.ts diff --git a/source/renderer/app/components/assets/AssetsTransactionConfirmation.js b/source/renderer/app/components/assets/AssetsTransactionConfirmation.ts similarity index 100% rename from source/renderer/app/components/assets/AssetsTransactionConfirmation.js rename to source/renderer/app/components/assets/AssetsTransactionConfirmation.ts diff --git a/source/renderer/app/components/dapp/DappTransactionRequest.js b/source/renderer/app/components/dapp/DappTransactionRequest.ts similarity index 100% rename from source/renderer/app/components/dapp/DappTransactionRequest.js rename to source/renderer/app/components/dapp/DappTransactionRequest.ts diff --git a/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.js b/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.ts similarity index 100% rename from source/renderer/app/components/hardware-wallet/HardwareWalletStatus.js rename to source/renderer/app/components/hardware-wallet/HardwareWalletStatus.ts diff --git a/source/renderer/app/components/layout/CenteredLayout.js b/source/renderer/app/components/layout/CenteredLayout.ts similarity index 100% rename from source/renderer/app/components/layout/CenteredLayout.js rename to source/renderer/app/components/layout/CenteredLayout.ts diff --git a/source/renderer/app/components/layout/SidebarLayout.js b/source/renderer/app/components/layout/SidebarLayout.ts similarity index 100% rename from source/renderer/app/components/layout/SidebarLayout.js rename to source/renderer/app/components/layout/SidebarLayout.ts diff --git a/source/renderer/app/components/layout/TopBar.js b/source/renderer/app/components/layout/TopBar.ts similarity index 100% rename from source/renderer/app/components/layout/TopBar.js rename to source/renderer/app/components/layout/TopBar.ts diff --git a/source/renderer/app/components/layout/TopBarLayout.js b/source/renderer/app/components/layout/TopBarLayout.ts similarity index 100% rename from source/renderer/app/components/layout/TopBarLayout.js rename to source/renderer/app/components/layout/TopBarLayout.ts diff --git a/source/renderer/app/components/layout/VerticalFlexContainer.js b/source/renderer/app/components/layout/VerticalFlexContainer.ts similarity index 100% rename from source/renderer/app/components/layout/VerticalFlexContainer.js rename to source/renderer/app/components/layout/VerticalFlexContainer.ts diff --git a/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.js b/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.ts similarity index 100% rename from source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.js rename to source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.ts diff --git a/source/renderer/app/components/loading/syncing-connecting/LogosDisplay.js b/source/renderer/app/components/loading/syncing-connecting/LogosDisplay.ts similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/LogosDisplay.js rename to source/renderer/app/components/loading/syncing-connecting/LogosDisplay.ts diff --git a/source/renderer/app/components/loading/syncing-connecting/ReportIssue.js b/source/renderer/app/components/loading/syncing-connecting/ReportIssue.ts similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/ReportIssue.js rename to source/renderer/app/components/loading/syncing-connecting/ReportIssue.ts diff --git a/source/renderer/app/components/loading/syncing-connecting/StatusIcons.js b/source/renderer/app/components/loading/syncing-connecting/StatusIcons.ts similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/StatusIcons.js rename to source/renderer/app/components/loading/syncing-connecting/StatusIcons.ts diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.js b/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.ts similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.js rename to source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.ts diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.js b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.ts similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.js rename to source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.ts diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.ts similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.js rename to source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.ts diff --git a/source/renderer/app/components/loading/system-time-error/SystemTimeError.js b/source/renderer/app/components/loading/system-time-error/SystemTimeError.ts similarity index 100% rename from source/renderer/app/components/loading/system-time-error/SystemTimeError.js rename to source/renderer/app/components/loading/system-time-error/SystemTimeError.ts diff --git a/source/renderer/app/components/navigation/NavButton.js b/source/renderer/app/components/navigation/NavButton.ts similarity index 100% rename from source/renderer/app/components/navigation/NavButton.js rename to source/renderer/app/components/navigation/NavButton.ts diff --git a/source/renderer/app/components/navigation/NavDropdown.js b/source/renderer/app/components/navigation/NavDropdown.ts similarity index 100% rename from source/renderer/app/components/navigation/NavDropdown.js rename to source/renderer/app/components/navigation/NavDropdown.ts diff --git a/source/renderer/app/components/navigation/Navigation.js b/source/renderer/app/components/navigation/Navigation.ts similarity index 100% rename from source/renderer/app/components/navigation/Navigation.js rename to source/renderer/app/components/navigation/Navigation.ts diff --git a/source/renderer/app/components/news/AlertsOverlay.js b/source/renderer/app/components/news/AlertsOverlay.ts similarity index 100% rename from source/renderer/app/components/news/AlertsOverlay.js rename to source/renderer/app/components/news/AlertsOverlay.ts diff --git a/source/renderer/app/components/news/IncidentOverlay.js b/source/renderer/app/components/news/IncidentOverlay.ts similarity index 100% rename from source/renderer/app/components/news/IncidentOverlay.js rename to source/renderer/app/components/news/IncidentOverlay.ts diff --git a/source/renderer/app/components/news/NewsFeed.js b/source/renderer/app/components/news/NewsFeed.ts similarity index 100% rename from source/renderer/app/components/news/NewsFeed.js rename to source/renderer/app/components/news/NewsFeed.ts diff --git a/source/renderer/app/components/news/NewsItem.js b/source/renderer/app/components/news/NewsItem.ts similarity index 100% rename from source/renderer/app/components/news/NewsItem.js rename to source/renderer/app/components/news/NewsItem.ts diff --git a/source/renderer/app/components/news/UpdateItem.js b/source/renderer/app/components/news/UpdateItem.ts similarity index 100% rename from source/renderer/app/components/news/UpdateItem.js rename to source/renderer/app/components/news/UpdateItem.ts diff --git a/source/renderer/app/components/notifications/InlineNotification.js b/source/renderer/app/components/notifications/InlineNotification.ts similarity index 100% rename from source/renderer/app/components/notifications/InlineNotification.js rename to source/renderer/app/components/notifications/InlineNotification.ts diff --git a/source/renderer/app/components/notifications/LegacyBadge.js b/source/renderer/app/components/notifications/LegacyBadge.ts similarity index 100% rename from source/renderer/app/components/notifications/LegacyBadge.js rename to source/renderer/app/components/notifications/LegacyBadge.ts diff --git a/source/renderer/app/components/notifications/LegacyNotification.js b/source/renderer/app/components/notifications/LegacyNotification.ts similarity index 100% rename from source/renderer/app/components/notifications/LegacyNotification.js rename to source/renderer/app/components/notifications/LegacyNotification.ts diff --git a/source/renderer/app/components/notifications/Notification.js b/source/renderer/app/components/notifications/Notification.ts similarity index 100% rename from source/renderer/app/components/notifications/Notification.js rename to source/renderer/app/components/notifications/Notification.ts diff --git a/source/renderer/app/components/notifications/NotificationActions.js b/source/renderer/app/components/notifications/NotificationActions.ts similarity index 100% rename from source/renderer/app/components/notifications/NotificationActions.js rename to source/renderer/app/components/notifications/NotificationActions.ts diff --git a/source/renderer/app/components/notifications/RestoreNotification.js b/source/renderer/app/components/notifications/RestoreNotification.ts similarity index 100% rename from source/renderer/app/components/notifications/RestoreNotification.js rename to source/renderer/app/components/notifications/RestoreNotification.ts diff --git a/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.js b/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.ts similarity index 100% rename from source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.js rename to source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.ts diff --git a/source/renderer/app/components/profile/initial-settings/InitialSettings.js b/source/renderer/app/components/profile/initial-settings/InitialSettings.ts similarity index 100% rename from source/renderer/app/components/profile/initial-settings/InitialSettings.js rename to source/renderer/app/components/profile/initial-settings/InitialSettings.ts diff --git a/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.js b/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.ts similarity index 100% rename from source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.js rename to source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.ts diff --git a/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.js b/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.ts similarity index 100% rename from source/renderer/app/components/profile/terms-of-use/TermsOfUseText.js rename to source/renderer/app/components/profile/terms-of-use/TermsOfUseText.ts diff --git a/source/renderer/app/components/settings/SettingsLayout.js b/source/renderer/app/components/settings/SettingsLayout.ts similarity index 100% rename from source/renderer/app/components/settings/SettingsLayout.js rename to source/renderer/app/components/settings/SettingsLayout.ts diff --git a/source/renderer/app/components/settings/categories/DisplaySettings.js b/source/renderer/app/components/settings/categories/DisplaySettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/DisplaySettings.js rename to source/renderer/app/components/settings/categories/DisplaySettings.ts diff --git a/source/renderer/app/components/settings/categories/GeneralSettings.js b/source/renderer/app/components/settings/categories/GeneralSettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/GeneralSettings.js rename to source/renderer/app/components/settings/categories/GeneralSettings.ts diff --git a/source/renderer/app/components/settings/categories/SecuritySettings.messages.js b/source/renderer/app/components/settings/categories/SecuritySettings.messages.ts similarity index 100% rename from source/renderer/app/components/settings/categories/SecuritySettings.messages.js rename to source/renderer/app/components/settings/categories/SecuritySettings.messages.ts diff --git a/source/renderer/app/components/settings/categories/SecuritySettings.js b/source/renderer/app/components/settings/categories/SecuritySettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/SecuritySettings.js rename to source/renderer/app/components/settings/categories/SecuritySettings.ts diff --git a/source/renderer/app/components/settings/categories/StakePoolsSettings.js b/source/renderer/app/components/settings/categories/StakePoolsSettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/StakePoolsSettings.js rename to source/renderer/app/components/settings/categories/StakePoolsSettings.ts diff --git a/source/renderer/app/components/settings/categories/SupportSettings.js b/source/renderer/app/components/settings/categories/SupportSettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/SupportSettings.js rename to source/renderer/app/components/settings/categories/SupportSettings.ts diff --git a/source/renderer/app/components/settings/categories/TermsOfUseSettings.js b/source/renderer/app/components/settings/categories/TermsOfUseSettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/TermsOfUseSettings.js rename to source/renderer/app/components/settings/categories/TermsOfUseSettings.ts diff --git a/source/renderer/app/components/settings/categories/WalletsSettings.js b/source/renderer/app/components/settings/categories/WalletsSettings.ts similarity index 100% rename from source/renderer/app/components/settings/categories/WalletsSettings.js rename to source/renderer/app/components/settings/categories/WalletsSettings.ts diff --git a/source/renderer/app/components/settings/menu/SecurityMenuItem.js b/source/renderer/app/components/settings/menu/SecurityMenuItem.ts similarity index 100% rename from source/renderer/app/components/settings/menu/SecurityMenuItem.js rename to source/renderer/app/components/settings/menu/SecurityMenuItem.ts diff --git a/source/renderer/app/components/settings/menu/SettingsMenu.messages.js b/source/renderer/app/components/settings/menu/SettingsMenu.messages.ts similarity index 100% rename from source/renderer/app/components/settings/menu/SettingsMenu.messages.js rename to source/renderer/app/components/settings/menu/SettingsMenu.messages.ts diff --git a/source/renderer/app/components/settings/menu/SettingsMenu.js b/source/renderer/app/components/settings/menu/SettingsMenu.ts similarity index 100% rename from source/renderer/app/components/settings/menu/SettingsMenu.js rename to source/renderer/app/components/settings/menu/SettingsMenu.ts diff --git a/source/renderer/app/components/settings/menu/SettingsMenuItem.js b/source/renderer/app/components/settings/menu/SettingsMenuItem.ts similarity index 100% rename from source/renderer/app/components/settings/menu/SettingsMenuItem.js rename to source/renderer/app/components/settings/menu/SettingsMenuItem.ts diff --git a/source/renderer/app/components/settings/menu/hooks.js b/source/renderer/app/components/settings/menu/hooks.ts similarity index 100% rename from source/renderer/app/components/settings/menu/hooks.js rename to source/renderer/app/components/settings/menu/hooks.ts diff --git a/source/renderer/app/components/sidebar/Sidebar.js b/source/renderer/app/components/sidebar/Sidebar.ts similarity index 100% rename from source/renderer/app/components/sidebar/Sidebar.js rename to source/renderer/app/components/sidebar/Sidebar.ts diff --git a/source/renderer/app/components/sidebar/SidebarCategory.js b/source/renderer/app/components/sidebar/SidebarCategory.ts similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategory.js rename to source/renderer/app/components/sidebar/SidebarCategory.ts diff --git a/source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.js b/source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.ts similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.js rename to source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.ts diff --git a/source/renderer/app/components/sidebar/SidebarCategoryWrapper.messages.js b/source/renderer/app/components/sidebar/SidebarCategoryWrapper.messages.ts similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategoryWrapper.messages.js rename to source/renderer/app/components/sidebar/SidebarCategoryWrapper.messages.ts diff --git a/source/renderer/app/components/sidebar/SidebarCategoryWrapper.js b/source/renderer/app/components/sidebar/SidebarCategoryWrapper.ts similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategoryWrapper.js rename to source/renderer/app/components/sidebar/SidebarCategoryWrapper.ts diff --git a/source/renderer/app/components/sidebar/SidebarMenu.js b/source/renderer/app/components/sidebar/SidebarMenu.ts similarity index 100% rename from source/renderer/app/components/sidebar/SidebarMenu.js rename to source/renderer/app/components/sidebar/SidebarMenu.ts diff --git a/source/renderer/app/components/sidebar/helpers.js b/source/renderer/app/components/sidebar/helpers.ts similarity index 100% rename from source/renderer/app/components/sidebar/helpers.js rename to source/renderer/app/components/sidebar/helpers.ts diff --git a/source/renderer/app/components/sidebar/types.js b/source/renderer/app/components/sidebar/types.ts similarity index 100% rename from source/renderer/app/components/sidebar/types.js rename to source/renderer/app/components/sidebar/types.ts diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.js b/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.ts similarity index 100% rename from source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.js rename to source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.ts diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.js b/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.ts similarity index 100% rename from source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.js rename to source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.ts diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js b/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.ts similarity index 100% rename from source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.js rename to source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.ts diff --git a/source/renderer/app/components/sidebar/wallets/WalletSearch.js b/source/renderer/app/components/sidebar/wallets/WalletSearch.ts similarity index 100% rename from source/renderer/app/components/sidebar/wallets/WalletSearch.js rename to source/renderer/app/components/sidebar/wallets/WalletSearch.ts diff --git a/source/renderer/app/components/sidebar/wallets/WalletSortButton.js b/source/renderer/app/components/sidebar/wallets/WalletSortButton.ts similarity index 100% rename from source/renderer/app/components/sidebar/wallets/WalletSortButton.js rename to source/renderer/app/components/sidebar/wallets/WalletSortButton.ts diff --git a/source/renderer/app/components/splash/SplashNetworkFlight.js b/source/renderer/app/components/splash/SplashNetworkFlight.ts similarity index 100% rename from source/renderer/app/components/splash/SplashNetworkFlight.js rename to source/renderer/app/components/splash/SplashNetworkFlight.ts diff --git a/source/renderer/app/components/staking/StakingUnavailable.js b/source/renderer/app/components/staking/StakingUnavailable.ts similarity index 100% rename from source/renderer/app/components/staking/StakingUnavailable.js rename to source/renderer/app/components/staking/StakingUnavailable.ts diff --git a/source/renderer/app/components/staking/countdown/StakingCountdown.js b/source/renderer/app/components/staking/countdown/StakingCountdown.ts similarity index 100% rename from source/renderer/app/components/staking/countdown/StakingCountdown.js rename to source/renderer/app/components/staking/countdown/StakingCountdown.ts diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenter.js b/source/renderer/app/components/staking/delegation-center/DelegationCenter.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenter.js rename to source/renderer/app/components/staking/delegation-center/DelegationCenter.ts diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.js b/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenterBody.js rename to source/renderer/app/components/staking/delegation-center/DelegationCenterBody.ts diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.js b/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.js rename to source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.ts diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.js b/source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.js rename to source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.ts diff --git a/source/renderer/app/components/staking/delegation-center/DonutRing.js b/source/renderer/app/components/staking/delegation-center/DonutRing.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DonutRing.js rename to source/renderer/app/components/staking/delegation-center/DonutRing.ts diff --git a/source/renderer/app/components/staking/delegation-center/DropdownMenu.js b/source/renderer/app/components/staking/delegation-center/DropdownMenu.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DropdownMenu.js rename to source/renderer/app/components/staking/delegation-center/DropdownMenu.ts diff --git a/source/renderer/app/components/staking/delegation-center/WalletColumn.js b/source/renderer/app/components/staking/delegation-center/WalletColumn.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/WalletColumn.js rename to source/renderer/app/components/staking/delegation-center/WalletColumn.ts diff --git a/source/renderer/app/components/staking/delegation-center/WalletRow.js b/source/renderer/app/components/staking/delegation-center/WalletRow.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/WalletRow.js rename to source/renderer/app/components/staking/delegation-center/WalletRow.ts diff --git a/source/renderer/app/components/staking/delegation-center/helpers.js b/source/renderer/app/components/staking/delegation-center/helpers.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/helpers.js rename to source/renderer/app/components/staking/delegation-center/helpers.ts diff --git a/source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.js b/source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.js rename to source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.ts diff --git a/source/renderer/app/components/staking/delegation-center/widgets/index.js b/source/renderer/app/components/staking/delegation-center/widgets/index.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-center/widgets/index.js rename to source/renderer/app/components/staking/delegation-center/widgets/index.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.messages.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.messages.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.messages.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.messages.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.messages.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.messages.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.messages.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.messages.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.js b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.js rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.ts diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.js b/source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.ts similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.js rename to source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.ts diff --git a/source/renderer/app/components/staking/epochs/StakingEpochs.js b/source/renderer/app/components/staking/epochs/StakingEpochs.ts similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochs.js rename to source/renderer/app/components/staking/epochs/StakingEpochs.ts diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.js b/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.ts similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.js rename to source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.ts diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.js b/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.ts similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsDataTable.js rename to source/renderer/app/components/staking/epochs/StakingEpochsDataTable.ts diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsNoData.js b/source/renderer/app/components/staking/epochs/StakingEpochsNoData.ts similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsNoData.js rename to source/renderer/app/components/staking/epochs/StakingEpochsNoData.ts diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.js b/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.ts similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.js rename to source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.ts diff --git a/source/renderer/app/components/staking/epochs/helpers.js b/source/renderer/app/components/staking/epochs/helpers.ts similarity index 100% rename from source/renderer/app/components/staking/epochs/helpers.js rename to source/renderer/app/components/staking/epochs/helpers.ts diff --git a/source/renderer/app/components/staking/info/StakingInfo.js b/source/renderer/app/components/staking/info/StakingInfo.ts similarity index 100% rename from source/renderer/app/components/staking/info/StakingInfo.js rename to source/renderer/app/components/staking/info/StakingInfo.ts diff --git a/source/renderer/app/components/staking/info/StakingInfoCountdown.js b/source/renderer/app/components/staking/info/StakingInfoCountdown.ts similarity index 100% rename from source/renderer/app/components/staking/info/StakingInfoCountdown.js rename to source/renderer/app/components/staking/info/StakingInfoCountdown.ts diff --git a/source/renderer/app/components/staking/layouts/StakingWithNavigation.js b/source/renderer/app/components/staking/layouts/StakingWithNavigation.ts similarity index 100% rename from source/renderer/app/components/staking/layouts/StakingWithNavigation.js rename to source/renderer/app/components/staking/layouts/StakingWithNavigation.ts diff --git a/source/renderer/app/components/staking/legacy/BlockGenerationInfo.js b/source/renderer/app/components/staking/legacy/BlockGenerationInfo.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/BlockGenerationInfo.js rename to source/renderer/app/components/staking/legacy/BlockGenerationInfo.ts diff --git a/source/renderer/app/components/staking/legacy/Staking.js b/source/renderer/app/components/staking/legacy/Staking.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/Staking.js rename to source/renderer/app/components/staking/legacy/Staking.ts diff --git a/source/renderer/app/components/staking/legacy/StakingChart.js b/source/renderer/app/components/staking/legacy/StakingChart.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingChart.js rename to source/renderer/app/components/staking/legacy/StakingChart.ts diff --git a/source/renderer/app/components/staking/legacy/StakingChartTooltip.js b/source/renderer/app/components/staking/legacy/StakingChartTooltip.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingChartTooltip.js rename to source/renderer/app/components/staking/legacy/StakingChartTooltip.ts diff --git a/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.js b/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingChartTooltipItem.js rename to source/renderer/app/components/staking/legacy/StakingChartTooltipItem.ts diff --git a/source/renderer/app/components/staking/legacy/StakingSwitch.js b/source/renderer/app/components/staking/legacy/StakingSwitch.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingSwitch.js rename to source/renderer/app/components/staking/legacy/StakingSwitch.ts diff --git a/source/renderer/app/components/staking/legacy/StakingSystemState.js b/source/renderer/app/components/staking/legacy/StakingSystemState.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingSystemState.js rename to source/renderer/app/components/staking/legacy/StakingSystemState.ts diff --git a/source/renderer/app/components/staking/legacy/StakingSystemStateElement.js b/source/renderer/app/components/staking/legacy/StakingSystemStateElement.ts similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingSystemStateElement.js rename to source/renderer/app/components/staking/legacy/StakingSystemStateElement.ts diff --git a/source/renderer/app/components/staking/navigation/StakingNavigation.js b/source/renderer/app/components/staking/navigation/StakingNavigation.ts similarity index 100% rename from source/renderer/app/components/staking/navigation/StakingNavigation.js rename to source/renderer/app/components/staking/navigation/StakingNavigation.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.js b/source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.js rename to source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.js b/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.js rename to source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.js b/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.js rename to source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.js b/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.js rename to source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.js b/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.js rename to source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.js b/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.js rename to source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.ts diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.js b/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.ts similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.js rename to source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.ts diff --git a/source/renderer/app/components/staking/rewards/RewardAmount.js b/source/renderer/app/components/staking/rewards/RewardAmount.ts similarity index 100% rename from source/renderer/app/components/staking/rewards/RewardAmount.js rename to source/renderer/app/components/staking/rewards/RewardAmount.ts diff --git a/source/renderer/app/components/staking/rewards/StakingRewards.js b/source/renderer/app/components/staking/rewards/StakingRewards.ts similarity index 100% rename from source/renderer/app/components/staking/rewards/StakingRewards.js rename to source/renderer/app/components/staking/rewards/StakingRewards.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePools.js b/source/renderer/app/components/staking/stake-pools/StakePools.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePools.js rename to source/renderer/app/components/staking/stake-pools/StakePools.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsList.js b/source/renderer/app/components/staking/stake-pools/StakePoolsList.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsList.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsList.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsRanking.js b/source/renderer/app/components/staking/stake-pools/StakePoolsRanking.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsRanking.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsRanking.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.js b/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.js b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsSearch.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsSearch.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTable.js b/source/renderer/app/components/staking/stake-pools/StakePoolsTable.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsTable.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsTable.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.js b/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.ts diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.js b/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.js rename to source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.ts diff --git a/source/renderer/app/components/staking/stake-pools/helpers.js b/source/renderer/app/components/staking/stake-pools/helpers.ts similarity index 100% rename from source/renderer/app/components/staking/stake-pools/helpers.js rename to source/renderer/app/components/staking/stake-pools/helpers.ts diff --git a/source/renderer/app/components/staking/widgets/PoolPopOver.js b/source/renderer/app/components/staking/widgets/PoolPopOver.ts similarity index 100% rename from source/renderer/app/components/staking/widgets/PoolPopOver.js rename to source/renderer/app/components/staking/widgets/PoolPopOver.ts diff --git a/source/renderer/app/components/staking/widgets/ThumbPool.js b/source/renderer/app/components/staking/widgets/ThumbPool.ts similarity index 100% rename from source/renderer/app/components/staking/widgets/ThumbPool.js rename to source/renderer/app/components/staking/widgets/ThumbPool.ts diff --git a/source/renderer/app/components/staking/widgets/ThumbPoolContent.js b/source/renderer/app/components/staking/widgets/ThumbPoolContent.ts similarity index 100% rename from source/renderer/app/components/staking/widgets/ThumbPoolContent.js rename to source/renderer/app/components/staking/widgets/ThumbPoolContent.ts diff --git a/source/renderer/app/components/staking/widgets/ThumbSelectedPool.js b/source/renderer/app/components/staking/widgets/ThumbSelectedPool.ts similarity index 100% rename from source/renderer/app/components/staking/widgets/ThumbSelectedPool.js rename to source/renderer/app/components/staking/widgets/ThumbSelectedPool.ts diff --git a/source/renderer/app/components/staking/widgets/TooltipPool.js b/source/renderer/app/components/staking/widgets/TooltipPool.ts similarity index 100% rename from source/renderer/app/components/staking/widgets/TooltipPool.js rename to source/renderer/app/components/staking/widgets/TooltipPool.ts diff --git a/source/renderer/app/components/static/About.js b/source/renderer/app/components/static/About.ts similarity index 100% rename from source/renderer/app/components/static/About.js rename to source/renderer/app/components/static/About.ts diff --git a/source/renderer/app/components/status/DaedalusDiagnostics.js b/source/renderer/app/components/status/DaedalusDiagnostics.ts similarity index 100% rename from source/renderer/app/components/status/DaedalusDiagnostics.js rename to source/renderer/app/components/status/DaedalusDiagnostics.ts diff --git a/source/renderer/app/components/voting/VotingFooterLinks.js b/source/renderer/app/components/voting/VotingFooterLinks.ts similarity index 100% rename from source/renderer/app/components/voting/VotingFooterLinks.js rename to source/renderer/app/components/voting/VotingFooterLinks.ts diff --git a/source/renderer/app/components/voting/VotingNoWallets.js b/source/renderer/app/components/voting/VotingNoWallets.ts similarity index 100% rename from source/renderer/app/components/voting/VotingNoWallets.js rename to source/renderer/app/components/voting/VotingNoWallets.ts diff --git a/source/renderer/app/components/voting/VotingRegistrationDialogWizard.js b/source/renderer/app/components/voting/VotingRegistrationDialogWizard.ts similarity index 100% rename from source/renderer/app/components/voting/VotingRegistrationDialogWizard.js rename to source/renderer/app/components/voting/VotingRegistrationDialogWizard.ts diff --git a/source/renderer/app/components/voting/VotingUnavailable.js b/source/renderer/app/components/voting/VotingUnavailable.ts similarity index 100% rename from source/renderer/app/components/voting/VotingUnavailable.js rename to source/renderer/app/components/voting/VotingUnavailable.ts diff --git a/source/renderer/app/components/voting/voting-info/AppStore.messages.js b/source/renderer/app/components/voting/voting-info/AppStore.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/AppStore.messages.js rename to source/renderer/app/components/voting/voting-info/AppStore.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/AppStore.js b/source/renderer/app/components/voting/voting-info/AppStore.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/AppStore.js rename to source/renderer/app/components/voting/voting-info/AppStore.ts diff --git a/source/renderer/app/components/voting/voting-info/Headline.messages.js b/source/renderer/app/components/voting/voting-info/Headline.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/Headline.messages.js rename to source/renderer/app/components/voting/voting-info/Headline.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/Headline.js b/source/renderer/app/components/voting/voting-info/Headline.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/Headline.js rename to source/renderer/app/components/voting/voting-info/Headline.ts diff --git a/source/renderer/app/components/voting/voting-info/RegisterToVote.messages.js b/source/renderer/app/components/voting/voting-info/RegisterToVote.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/RegisterToVote.messages.js rename to source/renderer/app/components/voting/voting-info/RegisterToVote.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/RegisterToVote.js b/source/renderer/app/components/voting/voting-info/RegisterToVote.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/RegisterToVote.js rename to source/renderer/app/components/voting/voting-info/RegisterToVote.ts diff --git a/source/renderer/app/components/voting/voting-info/ResultsPhase.messages.js b/source/renderer/app/components/voting/voting-info/ResultsPhase.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/ResultsPhase.messages.js rename to source/renderer/app/components/voting/voting-info/ResultsPhase.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/ResultsPhase.js b/source/renderer/app/components/voting/voting-info/ResultsPhase.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/ResultsPhase.js rename to source/renderer/app/components/voting/voting-info/ResultsPhase.ts diff --git a/source/renderer/app/components/voting/voting-info/SnapshotPhase.messages.js b/source/renderer/app/components/voting/voting-info/SnapshotPhase.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/SnapshotPhase.messages.js rename to source/renderer/app/components/voting/voting-info/SnapshotPhase.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/SnapshotPhase.js b/source/renderer/app/components/voting/voting-info/SnapshotPhase.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/SnapshotPhase.js rename to source/renderer/app/components/voting/voting-info/SnapshotPhase.ts diff --git a/source/renderer/app/components/voting/voting-info/TallyingPhase.messages.js b/source/renderer/app/components/voting/voting-info/TallyingPhase.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/TallyingPhase.messages.js rename to source/renderer/app/components/voting/voting-info/TallyingPhase.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/TallyingPhase.js b/source/renderer/app/components/voting/voting-info/TallyingPhase.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/TallyingPhase.js rename to source/renderer/app/components/voting/voting-info/TallyingPhase.ts diff --git a/source/renderer/app/components/voting/voting-info/VotingInfo.messages.js b/source/renderer/app/components/voting/voting-info/VotingInfo.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/VotingInfo.messages.js rename to source/renderer/app/components/voting/voting-info/VotingInfo.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/VotingInfo.js b/source/renderer/app/components/voting/voting-info/VotingInfo.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/VotingInfo.js rename to source/renderer/app/components/voting/voting-info/VotingInfo.ts diff --git a/source/renderer/app/components/voting/voting-info/VotingPhase.messages.js b/source/renderer/app/components/voting/voting-info/VotingPhase.messages.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/VotingPhase.messages.js rename to source/renderer/app/components/voting/voting-info/VotingPhase.messages.ts diff --git a/source/renderer/app/components/voting/voting-info/VotingPhase.js b/source/renderer/app/components/voting/voting-info/VotingPhase.ts similarity index 100% rename from source/renderer/app/components/voting/voting-info/VotingPhase.js rename to source/renderer/app/components/voting/voting-info/VotingPhase.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.ts diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.js b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.ts similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.js rename to source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.ts diff --git a/source/renderer/app/components/wallet/WalletAdd.js b/source/renderer/app/components/wallet/WalletAdd.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletAdd.js rename to source/renderer/app/components/wallet/WalletAdd.ts diff --git a/source/renderer/app/components/wallet/WalletBackupDialog.js b/source/renderer/app/components/wallet/WalletBackupDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletBackupDialog.js rename to source/renderer/app/components/wallet/WalletBackupDialog.ts diff --git a/source/renderer/app/components/wallet/WalletConnectDialog.js b/source/renderer/app/components/wallet/WalletConnectDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletConnectDialog.js rename to source/renderer/app/components/wallet/WalletConnectDialog.ts diff --git a/source/renderer/app/components/wallet/WalletCreateDialog.js b/source/renderer/app/components/wallet/WalletCreateDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletCreateDialog.js rename to source/renderer/app/components/wallet/WalletCreateDialog.ts diff --git a/source/renderer/app/components/wallet/WalletRestoreDialog.js b/source/renderer/app/components/wallet/WalletRestoreDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletRestoreDialog.js rename to source/renderer/app/components/wallet/WalletRestoreDialog.ts diff --git a/source/renderer/app/components/wallet/WalletSendForm.spec.js b/source/renderer/app/components/wallet/WalletSendForm.spec.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletSendForm.spec.js rename to source/renderer/app/components/wallet/WalletSendForm.spec.ts diff --git a/source/renderer/app/components/wallet/WalletSendForm.js b/source/renderer/app/components/wallet/WalletSendForm.ts similarity index 100% rename from source/renderer/app/components/wallet/WalletSendForm.js rename to source/renderer/app/components/wallet/WalletSendForm.ts diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.js b/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.js rename to source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.ts diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.js b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.ts similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.js rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.ts diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.js b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.js rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.ts diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.js b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.js rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.ts diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.js b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.ts similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.js rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.ts diff --git a/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.js b/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/file-import/WalletFileImportDialog.js rename to source/renderer/app/components/wallet/file-import/WalletFileImportDialog.ts diff --git a/source/renderer/app/components/wallet/layouts/WalletWithNavigation.js b/source/renderer/app/components/wallet/layouts/WalletWithNavigation.ts similarity index 100% rename from source/renderer/app/components/wallet/layouts/WalletWithNavigation.js rename to source/renderer/app/components/wallet/layouts/WalletWithNavigation.ts diff --git a/source/renderer/app/components/wallet/navigation/WalletNavigation.js b/source/renderer/app/components/wallet/navigation/WalletNavigation.ts similarity index 100% rename from source/renderer/app/components/wallet/navigation/WalletNavigation.js rename to source/renderer/app/components/wallet/navigation/WalletNavigation.ts diff --git a/source/renderer/app/components/wallet/not-responding/NotResponding.js b/source/renderer/app/components/wallet/not-responding/NotResponding.ts similarity index 100% rename from source/renderer/app/components/wallet/not-responding/NotResponding.js rename to source/renderer/app/components/wallet/not-responding/NotResponding.ts diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.js b/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.js rename to source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.ts diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.js b/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.js rename to source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.js b/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.js rename to source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.ts diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.js b/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.js rename to source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.ts diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.js b/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.js rename to source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.ts diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.js b/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.js rename to source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.ts diff --git a/source/renderer/app/components/wallet/receive/AddressActions.js b/source/renderer/app/components/wallet/receive/AddressActions.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/AddressActions.js rename to source/renderer/app/components/wallet/receive/AddressActions.ts diff --git a/source/renderer/app/components/wallet/receive/AddressRandom.js b/source/renderer/app/components/wallet/receive/AddressRandom.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/AddressRandom.js rename to source/renderer/app/components/wallet/receive/AddressRandom.ts diff --git a/source/renderer/app/components/wallet/receive/AddressSequential.js b/source/renderer/app/components/wallet/receive/AddressSequential.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/AddressSequential.js rename to source/renderer/app/components/wallet/receive/AddressSequential.ts diff --git a/source/renderer/app/components/wallet/receive/VirtualAddressesList.js b/source/renderer/app/components/wallet/receive/VirtualAddressesList.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/VirtualAddressesList.js rename to source/renderer/app/components/wallet/receive/VirtualAddressesList.ts diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveDialog.js b/source/renderer/app/components/wallet/receive/WalletReceiveDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/WalletReceiveDialog.js rename to source/renderer/app/components/wallet/receive/WalletReceiveDialog.ts diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveRandom.js b/source/renderer/app/components/wallet/receive/WalletReceiveRandom.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/WalletReceiveRandom.js rename to source/renderer/app/components/wallet/receive/WalletReceiveRandom.ts diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveSequential.js b/source/renderer/app/components/wallet/receive/WalletReceiveSequential.ts similarity index 100% rename from source/renderer/app/components/wallet/receive/WalletReceiveSequential.js rename to source/renderer/app/components/wallet/receive/WalletReceiveSequential.ts diff --git a/source/renderer/app/components/wallet/send-form/AssetInput.js b/source/renderer/app/components/wallet/send-form/AssetInput.ts similarity index 100% rename from source/renderer/app/components/wallet/send-form/AssetInput.js rename to source/renderer/app/components/wallet/send-form/AssetInput.ts diff --git a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.js b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.ts similarity index 100% rename from source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.js rename to source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.ts diff --git a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.js b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.js rename to source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.messages.js b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.messages.ts similarity index 100% rename from source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.messages.js rename to source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.messages.ts diff --git a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.js b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.js rename to source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/send-form/messages.js b/source/renderer/app/components/wallet/send-form/messages.ts similarity index 100% rename from source/renderer/app/components/wallet/send-form/messages.js rename to source/renderer/app/components/wallet/send-form/messages.ts diff --git a/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.js b/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.js rename to source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.ts diff --git a/source/renderer/app/components/wallet/settings/DelegateWalletButton.js b/source/renderer/app/components/wallet/settings/DelegateWalletButton.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/DelegateWalletButton.js rename to source/renderer/app/components/wallet/settings/DelegateWalletButton.ts diff --git a/source/renderer/app/components/wallet/settings/DeleteWallet.js b/source/renderer/app/components/wallet/settings/DeleteWallet.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/DeleteWallet.js rename to source/renderer/app/components/wallet/settings/DeleteWallet.ts diff --git a/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.js b/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.js rename to source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.ts diff --git a/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.js b/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.js rename to source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.ts diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.js b/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyBox.js rename to source/renderer/app/components/wallet/settings/ICOPublicKeyBox.ts diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.js b/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.js rename to source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.ts diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.js b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.js rename to source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.ts diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.js b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.js rename to source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.ts diff --git a/source/renderer/app/components/wallet/settings/PublicKeyField.js b/source/renderer/app/components/wallet/settings/PublicKeyField.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/PublicKeyField.js rename to source/renderer/app/components/wallet/settings/PublicKeyField.ts diff --git a/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.js b/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.js rename to source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.ts diff --git a/source/renderer/app/components/wallet/settings/SetWalletPassword.js b/source/renderer/app/components/wallet/settings/SetWalletPassword.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/SetWalletPassword.js rename to source/renderer/app/components/wallet/settings/SetWalletPassword.ts diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletButton.js b/source/renderer/app/components/wallet/settings/UndelegateWalletButton.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/UndelegateWalletButton.js rename to source/renderer/app/components/wallet/settings/UndelegateWalletButton.ts diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.js b/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.js rename to source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.js b/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.js rename to source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.ts diff --git a/source/renderer/app/components/wallet/settings/UnpairWallet.js b/source/renderer/app/components/wallet/settings/UnpairWallet.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/UnpairWallet.js rename to source/renderer/app/components/wallet/settings/UnpairWallet.ts diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.js b/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletPublicKeyBox.js rename to source/renderer/app/components/wallet/settings/WalletPublicKeyBox.ts diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.js b/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.js rename to source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.ts diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.js b/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.js rename to source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.ts diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.js b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.js rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.ts diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.js b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.js rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.ts diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.js b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.js rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.ts diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.js b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.js rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.ts diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.js b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.js rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.ts diff --git a/source/renderer/app/components/wallet/settings/WalletSettings.js b/source/renderer/app/components/wallet/settings/WalletSettings.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletSettings.js rename to source/renderer/app/components/wallet/settings/WalletSettings.ts diff --git a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.js b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.js rename to source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.ts diff --git a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.js b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.js rename to source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/skins/AmountInputSkin.js b/source/renderer/app/components/wallet/skins/AmountInputSkin.ts similarity index 100% rename from source/renderer/app/components/wallet/skins/AmountInputSkin.js rename to source/renderer/app/components/wallet/skins/AmountInputSkin.ts diff --git a/source/renderer/app/components/wallet/summary/WalletSummary.js b/source/renderer/app/components/wallet/summary/WalletSummary.ts similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummary.js rename to source/renderer/app/components/wallet/summary/WalletSummary.ts diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryAsset.js b/source/renderer/app/components/wallet/summary/WalletSummaryAsset.ts similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummaryAsset.js rename to source/renderer/app/components/wallet/summary/WalletSummaryAsset.ts diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.js b/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.ts similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummaryCurrency.js rename to source/renderer/app/components/wallet/summary/WalletSummaryCurrency.ts diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeader.js b/source/renderer/app/components/wallet/summary/WalletSummaryHeader.ts similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummaryHeader.js rename to source/renderer/app/components/wallet/summary/WalletSummaryHeader.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.js rename to source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.messages.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/const.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/const.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/const.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/const.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/helpers.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/helpers.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/helpers.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/helpers.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/types.js b/source/renderer/app/components/wallet/tokens/wallet-token-picker/types.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/types.js rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/types.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js b/source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.js rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.messages.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.js b/source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.js rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.js b/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.js rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.js b/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.js rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/helpers.js b/source/renderer/app/components/wallet/tokens/wallet-token/helpers.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/helpers.js rename to source/renderer/app/components/wallet/tokens/wallet-token/helpers.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js b/source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.js rename to source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.messages.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.js b/source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.js rename to source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.js rename to source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.ts diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js b/source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.ts similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.js rename to source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.ts diff --git a/source/renderer/app/components/wallet/transactions/CancelTransactionButton.js b/source/renderer/app/components/wallet/transactions/CancelTransactionButton.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/CancelTransactionButton.js rename to source/renderer/app/components/wallet/transactions/CancelTransactionButton.ts diff --git a/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js b/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js rename to source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/transactions/FilterButton.js b/source/renderer/app/components/wallet/transactions/FilterButton.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/FilterButton.js rename to source/renderer/app/components/wallet/transactions/FilterButton.ts diff --git a/source/renderer/app/components/wallet/transactions/FilterDialog.js b/source/renderer/app/components/wallet/transactions/FilterDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/FilterDialog.js rename to source/renderer/app/components/wallet/transactions/FilterDialog.ts diff --git a/source/renderer/app/components/wallet/transactions/FilterResultInfo.js b/source/renderer/app/components/wallet/transactions/FilterResultInfo.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/FilterResultInfo.js rename to source/renderer/app/components/wallet/transactions/FilterResultInfo.ts diff --git a/source/renderer/app/components/wallet/transactions/Transaction.js b/source/renderer/app/components/wallet/transactions/Transaction.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/Transaction.js rename to source/renderer/app/components/wallet/transactions/Transaction.ts diff --git a/source/renderer/app/components/wallet/transactions/TransactionTypeIcon.js b/source/renderer/app/components/wallet/transactions/TransactionTypeIcon.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/TransactionTypeIcon.js rename to source/renderer/app/components/wallet/transactions/TransactionTypeIcon.ts diff --git a/source/renderer/app/components/wallet/transactions/WalletNoTransactions.js b/source/renderer/app/components/wallet/transactions/WalletNoTransactions.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletNoTransactions.js rename to source/renderer/app/components/wallet/transactions/WalletNoTransactions.ts diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactions.js b/source/renderer/app/components/wallet/transactions/WalletTransactions.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactions.js rename to source/renderer/app/components/wallet/transactions/WalletTransactions.ts diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.js b/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.js rename to source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.ts diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsList.js b/source/renderer/app/components/wallet/transactions/WalletTransactionsList.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactionsList.js rename to source/renderer/app/components/wallet/transactions/WalletTransactionsList.ts diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.js b/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.js rename to source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.ts diff --git a/source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.js b/source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.js rename to source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.ts diff --git a/source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.js b/source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.js rename to source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.ts diff --git a/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.js b/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.js rename to source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.ts diff --git a/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.js b/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.js rename to source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.ts diff --git a/source/renderer/app/components/wallet/transactions/types.js b/source/renderer/app/components/wallet/transactions/types.ts similarity index 100% rename from source/renderer/app/components/wallet/transactions/types.js rename to source/renderer/app/components/wallet/transactions/types.ts diff --git a/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.js b/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.ts similarity index 100% rename from source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.js rename to source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.ts diff --git a/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.js b/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.ts similarity index 100% rename from source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.js rename to source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.ts diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxo.js b/source/renderer/app/components/wallet/utxo/WalletUtxo.ts similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxo.js rename to source/renderer/app/components/wallet/utxo/WalletUtxo.ts diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.js b/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.ts similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoCursor.js rename to source/renderer/app/components/wallet/utxo/WalletUtxoCursor.ts diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoDescription.js b/source/renderer/app/components/wallet/utxo/WalletUtxoDescription.ts similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoDescription.js rename to source/renderer/app/components/wallet/utxo/WalletUtxoDescription.ts diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoTick.js b/source/renderer/app/components/wallet/utxo/WalletUtxoTick.ts similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoTick.js rename to source/renderer/app/components/wallet/utxo/WalletUtxoTick.ts diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.js b/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.ts similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.js rename to source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.ts diff --git a/source/renderer/app/components/wallet/wallet-create/ConfigDialog.js b/source/renderer/app/components/wallet/wallet-create/ConfigDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/ConfigDialog.js rename to source/renderer/app/components/wallet/wallet-create/ConfigDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/HashDialog.js b/source/renderer/app/components/wallet/wallet-create/HashDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/HashDialog.js rename to source/renderer/app/components/wallet/wallet-create/HashDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/InstructionsDialog.js b/source/renderer/app/components/wallet/wallet-create/InstructionsDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/InstructionsDialog.js rename to source/renderer/app/components/wallet/wallet-create/InstructionsDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.js b/source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.js rename to source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/TemplateDialog.js b/source/renderer/app/components/wallet/wallet-create/TemplateDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/TemplateDialog.js rename to source/renderer/app/components/wallet/wallet-create/TemplateDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/ValidateDialog.js b/source/renderer/app/components/wallet/wallet-create/ValidateDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/ValidateDialog.js rename to source/renderer/app/components/wallet/wallet-create/ValidateDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.js b/source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.js rename to source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.js b/source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.js rename to source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.ts diff --git a/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.js b/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.js rename to source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.js b/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.js rename to source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.js b/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.js rename to source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.js b/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.js rename to source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.js b/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/SuccessDialog.js rename to source/renderer/app/components/wallet/wallet-restore/SuccessDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.js b/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.js rename to source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.js b/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.js rename to source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.js b/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.js rename to source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.ts diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.js b/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.ts similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.js rename to source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.ts diff --git a/source/renderer/app/components/widgets/BackToTopButton.js b/source/renderer/app/components/widgets/BackToTopButton.ts similarity index 100% rename from source/renderer/app/components/widgets/BackToTopButton.js rename to source/renderer/app/components/widgets/BackToTopButton.ts diff --git a/source/renderer/app/components/widgets/BigButtonForDialogs.js b/source/renderer/app/components/widgets/BigButtonForDialogs.ts similarity index 100% rename from source/renderer/app/components/widgets/BigButtonForDialogs.js rename to source/renderer/app/components/widgets/BigButtonForDialogs.ts diff --git a/source/renderer/app/components/widgets/BorderedBox.js b/source/renderer/app/components/widgets/BorderedBox.ts similarity index 100% rename from source/renderer/app/components/widgets/BorderedBox.js rename to source/renderer/app/components/widgets/BorderedBox.ts diff --git a/source/renderer/app/components/widgets/ButtonLink.js b/source/renderer/app/components/widgets/ButtonLink.ts similarity index 100% rename from source/renderer/app/components/widgets/ButtonLink.js rename to source/renderer/app/components/widgets/ButtonLink.ts diff --git a/source/renderer/app/components/widgets/CountdownWidget.js b/source/renderer/app/components/widgets/CountdownWidget.ts similarity index 100% rename from source/renderer/app/components/widgets/CountdownWidget.js rename to source/renderer/app/components/widgets/CountdownWidget.ts diff --git a/source/renderer/app/components/widgets/Dialog.js b/source/renderer/app/components/widgets/Dialog.ts similarity index 100% rename from source/renderer/app/components/widgets/Dialog.js rename to source/renderer/app/components/widgets/Dialog.ts diff --git a/source/renderer/app/components/widgets/DialogBackButton.js b/source/renderer/app/components/widgets/DialogBackButton.ts similarity index 100% rename from source/renderer/app/components/widgets/DialogBackButton.js rename to source/renderer/app/components/widgets/DialogBackButton.ts diff --git a/source/renderer/app/components/widgets/DialogCloseButton.js b/source/renderer/app/components/widgets/DialogCloseButton.ts similarity index 100% rename from source/renderer/app/components/widgets/DialogCloseButton.js rename to source/renderer/app/components/widgets/DialogCloseButton.ts diff --git a/source/renderer/app/components/widgets/ExternalLinkButton.js b/source/renderer/app/components/widgets/ExternalLinkButton.ts similarity index 100% rename from source/renderer/app/components/widgets/ExternalLinkButton.js rename to source/renderer/app/components/widgets/ExternalLinkButton.ts diff --git a/source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.js b/source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.ts similarity index 100% rename from source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.js rename to source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.ts diff --git a/source/renderer/app/components/widgets/FullyDecentralizedEffect.js b/source/renderer/app/components/widgets/FullyDecentralizedEffect.ts similarity index 100% rename from source/renderer/app/components/widgets/FullyDecentralizedEffect.js rename to source/renderer/app/components/widgets/FullyDecentralizedEffect.ts diff --git a/source/renderer/app/components/widgets/LoadingSpinner.js b/source/renderer/app/components/widgets/LoadingSpinner.ts similarity index 100% rename from source/renderer/app/components/widgets/LoadingSpinner.js rename to source/renderer/app/components/widgets/LoadingSpinner.ts diff --git a/source/renderer/app/components/widgets/NewsFeedIcon.js b/source/renderer/app/components/widgets/NewsFeedIcon.ts similarity index 100% rename from source/renderer/app/components/widgets/NewsFeedIcon.js rename to source/renderer/app/components/widgets/NewsFeedIcon.ts diff --git a/source/renderer/app/components/widgets/NodeSyncStatusIcon.js b/source/renderer/app/components/widgets/NodeSyncStatusIcon.ts similarity index 100% rename from source/renderer/app/components/widgets/NodeSyncStatusIcon.js rename to source/renderer/app/components/widgets/NodeSyncStatusIcon.ts diff --git a/source/renderer/app/components/widgets/ProgressBar.js b/source/renderer/app/components/widgets/ProgressBar.ts similarity index 100% rename from source/renderer/app/components/widgets/ProgressBar.js rename to source/renderer/app/components/widgets/ProgressBar.ts diff --git a/source/renderer/app/components/widgets/ProgressBarLarge.js b/source/renderer/app/components/widgets/ProgressBarLarge.ts similarity index 100% rename from source/renderer/app/components/widgets/ProgressBarLarge.js rename to source/renderer/app/components/widgets/ProgressBarLarge.ts diff --git a/source/renderer/app/components/widgets/RadioSet.js b/source/renderer/app/components/widgets/RadioSet.ts similarity index 100% rename from source/renderer/app/components/widgets/RadioSet.js rename to source/renderer/app/components/widgets/RadioSet.ts diff --git a/source/renderer/app/components/widgets/Slider.js b/source/renderer/app/components/widgets/Slider.ts similarity index 100% rename from source/renderer/app/components/widgets/Slider.js rename to source/renderer/app/components/widgets/Slider.ts diff --git a/source/renderer/app/components/widgets/TadaButton.js b/source/renderer/app/components/widgets/TadaButton.ts similarity index 100% rename from source/renderer/app/components/widgets/TadaButton.js rename to source/renderer/app/components/widgets/TadaButton.ts diff --git a/source/renderer/app/components/widgets/WalletTestEnvironmentLabel.js b/source/renderer/app/components/widgets/WalletTestEnvironmentLabel.ts similarity index 100% rename from source/renderer/app/components/widgets/WalletTestEnvironmentLabel.js rename to source/renderer/app/components/widgets/WalletTestEnvironmentLabel.ts diff --git a/source/renderer/app/components/widgets/WholeSelectionText.js b/source/renderer/app/components/widgets/WholeSelectionText.ts similarity index 100% rename from source/renderer/app/components/widgets/WholeSelectionText.js rename to source/renderer/app/components/widgets/WholeSelectionText.ts diff --git a/source/renderer/app/components/widgets/forms/AssetsDropdown.js b/source/renderer/app/components/widgets/forms/AssetsDropdown.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/AssetsDropdown.js rename to source/renderer/app/components/widgets/forms/AssetsDropdown.ts diff --git a/source/renderer/app/components/widgets/forms/FileUploadWidget.js b/source/renderer/app/components/widgets/forms/FileUploadWidget.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/FileUploadWidget.js rename to source/renderer/app/components/widgets/forms/FileUploadWidget.ts diff --git a/source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.js b/source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.js rename to source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.ts diff --git a/source/renderer/app/components/widgets/forms/ImageUploadWidget.js b/source/renderer/app/components/widgets/forms/ImageUploadWidget.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/ImageUploadWidget.js rename to source/renderer/app/components/widgets/forms/ImageUploadWidget.ts diff --git a/source/renderer/app/components/widgets/forms/InlineEditingDropdown.js b/source/renderer/app/components/widgets/forms/InlineEditingDropdown.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/InlineEditingDropdown.js rename to source/renderer/app/components/widgets/forms/InlineEditingDropdown.ts diff --git a/source/renderer/app/components/widgets/forms/InlineEditingInput.js b/source/renderer/app/components/widgets/forms/InlineEditingInput.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/InlineEditingInput.js rename to source/renderer/app/components/widgets/forms/InlineEditingInput.ts diff --git a/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.js b/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/InlineEditingSmallInput.js rename to source/renderer/app/components/widgets/forms/InlineEditingSmallInput.ts diff --git a/source/renderer/app/components/widgets/forms/ItemDropdownOption.js b/source/renderer/app/components/widgets/forms/ItemDropdownOption.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/ItemDropdownOption.js rename to source/renderer/app/components/widgets/forms/ItemDropdownOption.ts diff --git a/source/renderer/app/components/widgets/forms/ItemsDropdown.js b/source/renderer/app/components/widgets/forms/ItemsDropdown.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/ItemsDropdown.js rename to source/renderer/app/components/widgets/forms/ItemsDropdown.ts diff --git a/source/renderer/app/components/widgets/forms/MnemonicInputWidget.js b/source/renderer/app/components/widgets/forms/MnemonicInputWidget.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/MnemonicInputWidget.js rename to source/renderer/app/components/widgets/forms/MnemonicInputWidget.ts diff --git a/source/renderer/app/components/widgets/forms/NormalSwitch.js b/source/renderer/app/components/widgets/forms/NormalSwitch.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/NormalSwitch.js rename to source/renderer/app/components/widgets/forms/NormalSwitch.ts diff --git a/source/renderer/app/components/widgets/forms/PasswordInput.js b/source/renderer/app/components/widgets/forms/PasswordInput.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/PasswordInput.js rename to source/renderer/app/components/widgets/forms/PasswordInput.ts diff --git a/source/renderer/app/components/widgets/forms/PinCode.js b/source/renderer/app/components/widgets/forms/PinCode.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/PinCode.js rename to source/renderer/app/components/widgets/forms/PinCode.ts diff --git a/source/renderer/app/components/widgets/forms/ProfileSettingsForm.js b/source/renderer/app/components/widgets/forms/ProfileSettingsForm.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/ProfileSettingsForm.js rename to source/renderer/app/components/widgets/forms/ProfileSettingsForm.ts diff --git a/source/renderer/app/components/widgets/forms/ReadOnlyInput.js b/source/renderer/app/components/widgets/forms/ReadOnlyInput.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/ReadOnlyInput.js rename to source/renderer/app/components/widgets/forms/ReadOnlyInput.ts diff --git a/source/renderer/app/components/widgets/forms/TinyButton.js b/source/renderer/app/components/widgets/forms/TinyButton.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyButton.js rename to source/renderer/app/components/widgets/forms/TinyButton.ts diff --git a/source/renderer/app/components/widgets/forms/TinyCheckbox.js b/source/renderer/app/components/widgets/forms/TinyCheckbox.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyCheckbox.js rename to source/renderer/app/components/widgets/forms/TinyCheckbox.ts diff --git a/source/renderer/app/components/widgets/forms/TinyDatePicker.js b/source/renderer/app/components/widgets/forms/TinyDatePicker.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyDatePicker.js rename to source/renderer/app/components/widgets/forms/TinyDatePicker.ts diff --git a/source/renderer/app/components/widgets/forms/TinyInput.js b/source/renderer/app/components/widgets/forms/TinyInput.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyInput.js rename to source/renderer/app/components/widgets/forms/TinyInput.ts diff --git a/source/renderer/app/components/widgets/forms/TinySelect.js b/source/renderer/app/components/widgets/forms/TinySelect.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/TinySelect.js rename to source/renderer/app/components/widgets/forms/TinySelect.ts diff --git a/source/renderer/app/components/widgets/forms/TinySwitch.js b/source/renderer/app/components/widgets/forms/TinySwitch.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/TinySwitch.js rename to source/renderer/app/components/widgets/forms/TinySwitch.ts diff --git a/source/renderer/app/components/widgets/forms/WalletsDropdown.js b/source/renderer/app/components/widgets/forms/WalletsDropdown.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/WalletsDropdown.js rename to source/renderer/app/components/widgets/forms/WalletsDropdown.ts diff --git a/source/renderer/app/components/widgets/forms/WalletsDropdownLabel.js b/source/renderer/app/components/widgets/forms/WalletsDropdownLabel.ts similarity index 100% rename from source/renderer/app/components/widgets/forms/WalletsDropdownLabel.js rename to source/renderer/app/components/widgets/forms/WalletsDropdownLabel.ts diff --git a/source/renderer/app/components/widgets/notification-dot/NotificationDot.js b/source/renderer/app/components/widgets/notification-dot/NotificationDot.ts similarity index 100% rename from source/renderer/app/components/widgets/notification-dot/NotificationDot.js rename to source/renderer/app/components/widgets/notification-dot/NotificationDot.ts diff --git a/source/renderer/app/components/widgets/splash/Splash.js b/source/renderer/app/components/widgets/splash/Splash.ts similarity index 100% rename from source/renderer/app/components/widgets/splash/Splash.js rename to source/renderer/app/components/widgets/splash/Splash.ts diff --git a/source/renderer/app/config/assetsConfig.js b/source/renderer/app/config/assetsConfig.ts similarity index 100% rename from source/renderer/app/config/assetsConfig.js rename to source/renderer/app/config/assetsConfig.ts diff --git a/source/renderer/app/config/cryptoConfig.js b/source/renderer/app/config/cryptoConfig.ts similarity index 100% rename from source/renderer/app/config/cryptoConfig.js rename to source/renderer/app/config/cryptoConfig.ts diff --git a/source/renderer/app/config/currencyConfig.coinapi.js b/source/renderer/app/config/currencyConfig.coinapi.ts similarity index 100% rename from source/renderer/app/config/currencyConfig.coinapi.js rename to source/renderer/app/config/currencyConfig.coinapi.ts diff --git a/source/renderer/app/config/currencyConfig.coingecko.js b/source/renderer/app/config/currencyConfig.coingecko.ts similarity index 100% rename from source/renderer/app/config/currencyConfig.coingecko.js rename to source/renderer/app/config/currencyConfig.coingecko.ts diff --git a/source/renderer/app/config/currencyConfig.nomics.js b/source/renderer/app/config/currencyConfig.nomics.ts similarity index 100% rename from source/renderer/app/config/currencyConfig.nomics.js rename to source/renderer/app/config/currencyConfig.nomics.ts diff --git a/source/renderer/app/config/currencyConfig.js b/source/renderer/app/config/currencyConfig.ts similarity index 100% rename from source/renderer/app/config/currencyConfig.js rename to source/renderer/app/config/currencyConfig.ts diff --git a/source/renderer/app/config/generateStakePoolFakeData.js b/source/renderer/app/config/generateStakePoolFakeData.ts similarity index 100% rename from source/renderer/app/config/generateStakePoolFakeData.js rename to source/renderer/app/config/generateStakePoolFakeData.ts diff --git a/source/renderer/app/config/hardwareWalletsConfig.js b/source/renderer/app/config/hardwareWalletsConfig.ts similarity index 100% rename from source/renderer/app/config/hardwareWalletsConfig.js rename to source/renderer/app/config/hardwareWalletsConfig.ts diff --git a/source/renderer/app/config/numbersConfig.js b/source/renderer/app/config/numbersConfig.ts similarity index 100% rename from source/renderer/app/config/numbersConfig.js rename to source/renderer/app/config/numbersConfig.ts diff --git a/source/renderer/app/config/profileConfig.js b/source/renderer/app/config/profileConfig.ts similarity index 100% rename from source/renderer/app/config/profileConfig.js rename to source/renderer/app/config/profileConfig.ts diff --git a/source/renderer/app/config/sidebarConfig.js b/source/renderer/app/config/sidebarConfig.ts similarity index 100% rename from source/renderer/app/config/sidebarConfig.js rename to source/renderer/app/config/sidebarConfig.ts diff --git a/source/renderer/app/config/stakingConfig.js b/source/renderer/app/config/stakingConfig.ts similarity index 100% rename from source/renderer/app/config/stakingConfig.js rename to source/renderer/app/config/stakingConfig.ts diff --git a/source/renderer/app/config/stakingStakePools.dummy.js b/source/renderer/app/config/stakingStakePools.dummy.ts similarity index 100% rename from source/renderer/app/config/stakingStakePools.dummy.js rename to source/renderer/app/config/stakingStakePools.dummy.ts diff --git a/source/renderer/app/config/timingConfig.js b/source/renderer/app/config/timingConfig.ts similarity index 100% rename from source/renderer/app/config/timingConfig.js rename to source/renderer/app/config/timingConfig.ts diff --git a/source/renderer/app/config/topBarConfig.js b/source/renderer/app/config/topBarConfig.ts similarity index 100% rename from source/renderer/app/config/topBarConfig.js rename to source/renderer/app/config/topBarConfig.ts diff --git a/source/renderer/app/config/txnsConfig.js b/source/renderer/app/config/txnsConfig.ts similarity index 100% rename from source/renderer/app/config/txnsConfig.js rename to source/renderer/app/config/txnsConfig.ts diff --git a/source/renderer/app/config/urlsConfig.js b/source/renderer/app/config/urlsConfig.ts similarity index 100% rename from source/renderer/app/config/urlsConfig.js rename to source/renderer/app/config/urlsConfig.ts diff --git a/source/renderer/app/config/utxoConfig.js b/source/renderer/app/config/utxoConfig.ts similarity index 100% rename from source/renderer/app/config/utxoConfig.js rename to source/renderer/app/config/utxoConfig.ts diff --git a/source/renderer/app/config/votingConfig.js b/source/renderer/app/config/votingConfig.ts similarity index 100% rename from source/renderer/app/config/votingConfig.js rename to source/renderer/app/config/votingConfig.ts diff --git a/source/renderer/app/config/walletNavigationConfig.js b/source/renderer/app/config/walletNavigationConfig.ts similarity index 100% rename from source/renderer/app/config/walletNavigationConfig.js rename to source/renderer/app/config/walletNavigationConfig.ts diff --git a/source/renderer/app/config/walletRecoveryPhraseVerificationConfig.js b/source/renderer/app/config/walletRecoveryPhraseVerificationConfig.ts similarity index 100% rename from source/renderer/app/config/walletRecoveryPhraseVerificationConfig.js rename to source/renderer/app/config/walletRecoveryPhraseVerificationConfig.ts diff --git a/source/renderer/app/config/walletRestoreConfig.js b/source/renderer/app/config/walletRestoreConfig.ts similarity index 100% rename from source/renderer/app/config/walletRestoreConfig.js rename to source/renderer/app/config/walletRestoreConfig.ts diff --git a/source/renderer/app/config/walletsConfig.js b/source/renderer/app/config/walletsConfig.ts similarity index 100% rename from source/renderer/app/config/walletsConfig.js rename to source/renderer/app/config/walletsConfig.ts diff --git a/source/renderer/app/containers/MainLayout.js b/source/renderer/app/containers/MainLayout.ts similarity index 100% rename from source/renderer/app/containers/MainLayout.js rename to source/renderer/app/containers/MainLayout.ts diff --git a/source/renderer/app/containers/Root.js b/source/renderer/app/containers/Root.ts similarity index 100% rename from source/renderer/app/containers/Root.js rename to source/renderer/app/containers/Root.ts diff --git a/source/renderer/app/containers/TopBarContainer.js b/source/renderer/app/containers/TopBarContainer.ts similarity index 100% rename from source/renderer/app/containers/TopBarContainer.js rename to source/renderer/app/containers/TopBarContainer.ts diff --git a/source/renderer/app/containers/appUpdate/AppUpdateContainer.js b/source/renderer/app/containers/appUpdate/AppUpdateContainer.ts similarity index 100% rename from source/renderer/app/containers/appUpdate/AppUpdateContainer.js rename to source/renderer/app/containers/appUpdate/AppUpdateContainer.ts diff --git a/source/renderer/app/containers/assets/AssetSettingsDialogContainer.js b/source/renderer/app/containers/assets/AssetSettingsDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/assets/AssetSettingsDialogContainer.js rename to source/renderer/app/containers/assets/AssetSettingsDialogContainer.ts diff --git a/source/renderer/app/containers/loading/LoadingPage.js b/source/renderer/app/containers/loading/LoadingPage.ts similarity index 100% rename from source/renderer/app/containers/loading/LoadingPage.js rename to source/renderer/app/containers/loading/LoadingPage.ts diff --git a/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.js b/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.ts similarity index 100% rename from source/renderer/app/containers/loading/NoDiskSpaceErrorPage.js rename to source/renderer/app/containers/loading/NoDiskSpaceErrorPage.ts diff --git a/source/renderer/app/containers/loading/SyncingConnectingPage.js b/source/renderer/app/containers/loading/SyncingConnectingPage.ts similarity index 100% rename from source/renderer/app/containers/loading/SyncingConnectingPage.js rename to source/renderer/app/containers/loading/SyncingConnectingPage.ts diff --git a/source/renderer/app/containers/loading/SystemTimeErrorPage.js b/source/renderer/app/containers/loading/SystemTimeErrorPage.ts similarity index 100% rename from source/renderer/app/containers/loading/SystemTimeErrorPage.js rename to source/renderer/app/containers/loading/SystemTimeErrorPage.ts diff --git a/source/renderer/app/containers/news/NewsFeedContainer.js b/source/renderer/app/containers/news/NewsFeedContainer.ts similarity index 100% rename from source/renderer/app/containers/news/NewsFeedContainer.js rename to source/renderer/app/containers/news/NewsFeedContainer.ts diff --git a/source/renderer/app/containers/news/NewsOverlayContainer.js b/source/renderer/app/containers/news/NewsOverlayContainer.ts similarity index 100% rename from source/renderer/app/containers/news/NewsOverlayContainer.js rename to source/renderer/app/containers/news/NewsOverlayContainer.ts diff --git a/source/renderer/app/containers/notifications/NotificationsContainer.js b/source/renderer/app/containers/notifications/NotificationsContainer.ts similarity index 100% rename from source/renderer/app/containers/notifications/NotificationsContainer.js rename to source/renderer/app/containers/notifications/NotificationsContainer.ts diff --git a/source/renderer/app/containers/profile/DataLayerMigrationPage.js b/source/renderer/app/containers/profile/DataLayerMigrationPage.ts similarity index 100% rename from source/renderer/app/containers/profile/DataLayerMigrationPage.js rename to source/renderer/app/containers/profile/DataLayerMigrationPage.ts diff --git a/source/renderer/app/containers/profile/InitialSettingsPage.js b/source/renderer/app/containers/profile/InitialSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/profile/InitialSettingsPage.js rename to source/renderer/app/containers/profile/InitialSettingsPage.ts diff --git a/source/renderer/app/containers/profile/TermsOfUsePage.js b/source/renderer/app/containers/profile/TermsOfUsePage.ts similarity index 100% rename from source/renderer/app/containers/profile/TermsOfUsePage.js rename to source/renderer/app/containers/profile/TermsOfUsePage.ts diff --git a/source/renderer/app/containers/settings/Settings.js b/source/renderer/app/containers/settings/Settings.ts similarity index 100% rename from source/renderer/app/containers/settings/Settings.js rename to source/renderer/app/containers/settings/Settings.ts diff --git a/source/renderer/app/containers/settings/categories/DisplaySettingsPage.js b/source/renderer/app/containers/settings/categories/DisplaySettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/DisplaySettingsPage.js rename to source/renderer/app/containers/settings/categories/DisplaySettingsPage.ts diff --git a/source/renderer/app/containers/settings/categories/GeneralSettingsPage.js b/source/renderer/app/containers/settings/categories/GeneralSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/GeneralSettingsPage.js rename to source/renderer/app/containers/settings/categories/GeneralSettingsPage.ts diff --git a/source/renderer/app/containers/settings/categories/SecuritySettingsPage.js b/source/renderer/app/containers/settings/categories/SecuritySettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/SecuritySettingsPage.js rename to source/renderer/app/containers/settings/categories/SecuritySettingsPage.ts diff --git a/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.js b/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.js rename to source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.ts diff --git a/source/renderer/app/containers/settings/categories/SupportSettingsPage.js b/source/renderer/app/containers/settings/categories/SupportSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/SupportSettingsPage.js rename to source/renderer/app/containers/settings/categories/SupportSettingsPage.ts diff --git a/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.js b/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.js rename to source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.ts diff --git a/source/renderer/app/containers/settings/categories/WalletsSettingsPage.js b/source/renderer/app/containers/settings/categories/WalletsSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/settings/categories/WalletsSettingsPage.js rename to source/renderer/app/containers/settings/categories/WalletsSettingsPage.ts diff --git a/source/renderer/app/containers/splash/SplashNetworkPage.js b/source/renderer/app/containers/splash/SplashNetworkPage.ts similarity index 100% rename from source/renderer/app/containers/splash/SplashNetworkPage.js rename to source/renderer/app/containers/splash/SplashNetworkPage.ts diff --git a/source/renderer/app/containers/staking/DelegationCenterPage.js b/source/renderer/app/containers/staking/DelegationCenterPage.ts similarity index 100% rename from source/renderer/app/containers/staking/DelegationCenterPage.js rename to source/renderer/app/containers/staking/DelegationCenterPage.ts diff --git a/source/renderer/app/containers/staking/RedeemItnRewardsContainer.js b/source/renderer/app/containers/staking/RedeemItnRewardsContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/RedeemItnRewardsContainer.js rename to source/renderer/app/containers/staking/RedeemItnRewardsContainer.ts diff --git a/source/renderer/app/containers/staking/StakePoolsListPage.js b/source/renderer/app/containers/staking/StakePoolsListPage.ts similarity index 100% rename from source/renderer/app/containers/staking/StakePoolsListPage.js rename to source/renderer/app/containers/staking/StakePoolsListPage.ts diff --git a/source/renderer/app/containers/staking/Staking.js b/source/renderer/app/containers/staking/Staking.ts similarity index 100% rename from source/renderer/app/containers/staking/Staking.js rename to source/renderer/app/containers/staking/Staking.ts diff --git a/source/renderer/app/containers/staking/StakingCountdownPage.js b/source/renderer/app/containers/staking/StakingCountdownPage.ts similarity index 100% rename from source/renderer/app/containers/staking/StakingCountdownPage.js rename to source/renderer/app/containers/staking/StakingCountdownPage.ts diff --git a/source/renderer/app/containers/staking/StakingEpochsPage.js b/source/renderer/app/containers/staking/StakingEpochsPage.ts similarity index 100% rename from source/renderer/app/containers/staking/StakingEpochsPage.js rename to source/renderer/app/containers/staking/StakingEpochsPage.ts diff --git a/source/renderer/app/containers/staking/StakingInfoPage.js b/source/renderer/app/containers/staking/StakingInfoPage.ts similarity index 100% rename from source/renderer/app/containers/staking/StakingInfoPage.js rename to source/renderer/app/containers/staking/StakingInfoPage.ts diff --git a/source/renderer/app/containers/staking/StakingRewardsPage.js b/source/renderer/app/containers/staking/StakingRewardsPage.ts similarity index 100% rename from source/renderer/app/containers/staking/StakingRewardsPage.js rename to source/renderer/app/containers/staking/StakingRewardsPage.ts diff --git a/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.js b/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.js rename to source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.ts diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.js b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.js rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.ts diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.js b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.js rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.ts diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.js b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.js rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.ts diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.js b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.js rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.ts diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.js b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.ts similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.js rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.ts diff --git a/source/renderer/app/containers/static/AboutDialog.js b/source/renderer/app/containers/static/AboutDialog.ts similarity index 100% rename from source/renderer/app/containers/static/AboutDialog.js rename to source/renderer/app/containers/static/AboutDialog.ts diff --git a/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.js b/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.ts similarity index 100% rename from source/renderer/app/containers/status/DaedalusDiagnosticsDialog.js rename to source/renderer/app/containers/status/DaedalusDiagnosticsDialog.ts diff --git a/source/renderer/app/containers/voting/VotingRegistrationPage.js b/source/renderer/app/containers/voting/VotingRegistrationPage.ts similarity index 100% rename from source/renderer/app/containers/voting/VotingRegistrationPage.js rename to source/renderer/app/containers/voting/VotingRegistrationPage.ts diff --git a/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.js b/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.js rename to source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.js b/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.ts similarity index 100% rename from source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.js rename to source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.ts diff --git a/source/renderer/app/containers/wallet/TransferFundsPage.js b/source/renderer/app/containers/wallet/TransferFundsPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/TransferFundsPage.js rename to source/renderer/app/containers/wallet/TransferFundsPage.ts diff --git a/source/renderer/app/containers/wallet/Wallet.js b/source/renderer/app/containers/wallet/Wallet.ts similarity index 100% rename from source/renderer/app/containers/wallet/Wallet.js rename to source/renderer/app/containers/wallet/Wallet.ts diff --git a/source/renderer/app/containers/wallet/WalletAddPage.js b/source/renderer/app/containers/wallet/WalletAddPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletAddPage.js rename to source/renderer/app/containers/wallet/WalletAddPage.ts diff --git a/source/renderer/app/containers/wallet/WalletReceivePage.js b/source/renderer/app/containers/wallet/WalletReceivePage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletReceivePage.js rename to source/renderer/app/containers/wallet/WalletReceivePage.ts diff --git a/source/renderer/app/containers/wallet/WalletSendPage.js b/source/renderer/app/containers/wallet/WalletSendPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletSendPage.js rename to source/renderer/app/containers/wallet/WalletSendPage.ts diff --git a/source/renderer/app/containers/wallet/WalletSettingsPage.js b/source/renderer/app/containers/wallet/WalletSettingsPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletSettingsPage.js rename to source/renderer/app/containers/wallet/WalletSettingsPage.ts diff --git a/source/renderer/app/containers/wallet/WalletSummaryPage.js b/source/renderer/app/containers/wallet/WalletSummaryPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletSummaryPage.js rename to source/renderer/app/containers/wallet/WalletSummaryPage.ts diff --git a/source/renderer/app/containers/wallet/WalletTokensPage.js b/source/renderer/app/containers/wallet/WalletTokensPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletTokensPage.js rename to source/renderer/app/containers/wallet/WalletTokensPage.ts diff --git a/source/renderer/app/containers/wallet/WalletTransactionsPage.js b/source/renderer/app/containers/wallet/WalletTransactionsPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletTransactionsPage.js rename to source/renderer/app/containers/wallet/WalletTransactionsPage.ts diff --git a/source/renderer/app/containers/wallet/WalletUtxoPage.js b/source/renderer/app/containers/wallet/WalletUtxoPage.ts similarity index 100% rename from source/renderer/app/containers/wallet/WalletUtxoPage.js rename to source/renderer/app/containers/wallet/WalletUtxoPage.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.js b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.js rename to source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.js b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.js rename to source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.ts diff --git a/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.js b/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.js rename to source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.js b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.js rename to source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.ts diff --git a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.js b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.js rename to source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.ts diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.js b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.ts similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.js rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.ts diff --git a/source/renderer/app/domains/ApiError.js b/source/renderer/app/domains/ApiError.ts similarity index 100% rename from source/renderer/app/domains/ApiError.js rename to source/renderer/app/domains/ApiError.ts diff --git a/source/renderer/app/domains/Asset.js b/source/renderer/app/domains/Asset.ts similarity index 100% rename from source/renderer/app/domains/Asset.js rename to source/renderer/app/domains/Asset.ts diff --git a/source/renderer/app/domains/News.js b/source/renderer/app/domains/News.ts similarity index 100% rename from source/renderer/app/domains/News.js rename to source/renderer/app/domains/News.ts diff --git a/source/renderer/app/domains/Profile.js b/source/renderer/app/domains/Profile.ts similarity index 100% rename from source/renderer/app/domains/Profile.js rename to source/renderer/app/domains/Profile.ts diff --git a/source/renderer/app/domains/StakePool.js b/source/renderer/app/domains/StakePool.ts similarity index 100% rename from source/renderer/app/domains/StakePool.js rename to source/renderer/app/domains/StakePool.ts diff --git a/source/renderer/app/domains/User.js b/source/renderer/app/domains/User.ts similarity index 100% rename from source/renderer/app/domains/User.js rename to source/renderer/app/domains/User.ts diff --git a/source/renderer/app/domains/Wallet.js b/source/renderer/app/domains/Wallet.ts similarity index 100% rename from source/renderer/app/domains/Wallet.js rename to source/renderer/app/domains/Wallet.ts diff --git a/source/renderer/app/domains/WalletAddress.js b/source/renderer/app/domains/WalletAddress.ts similarity index 100% rename from source/renderer/app/domains/WalletAddress.js rename to source/renderer/app/domains/WalletAddress.ts diff --git a/source/renderer/app/domains/WalletTransaction.js b/source/renderer/app/domains/WalletTransaction.ts similarity index 100% rename from source/renderer/app/domains/WalletTransaction.js rename to source/renderer/app/domains/WalletTransaction.ts diff --git a/source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.js b/source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.js rename to source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.ts diff --git a/source/renderer/app/features/discreet-mode/api/index.js b/source/renderer/app/features/discreet-mode/api/index.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/api/index.js rename to source/renderer/app/features/discreet-mode/api/index.ts diff --git a/source/renderer/app/features/discreet-mode/config.js b/source/renderer/app/features/discreet-mode/config.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/config.js rename to source/renderer/app/features/discreet-mode/config.ts diff --git a/source/renderer/app/features/discreet-mode/context.js b/source/renderer/app/features/discreet-mode/context.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/context.js rename to source/renderer/app/features/discreet-mode/context.ts diff --git a/source/renderer/app/features/discreet-mode/feature.js b/source/renderer/app/features/discreet-mode/feature.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/feature.js rename to source/renderer/app/features/discreet-mode/feature.ts diff --git a/source/renderer/app/features/discreet-mode/index.js b/source/renderer/app/features/discreet-mode/index.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/index.js rename to source/renderer/app/features/discreet-mode/index.ts diff --git a/source/renderer/app/features/discreet-mode/integration-tests.spec.js b/source/renderer/app/features/discreet-mode/integration-tests.spec.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/integration-tests.spec.js rename to source/renderer/app/features/discreet-mode/integration-tests.spec.ts diff --git a/source/renderer/app/features/discreet-mode/replacers/defaultReplacer.spec.js b/source/renderer/app/features/discreet-mode/replacers/defaultReplacer.spec.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/replacers/defaultReplacer.spec.js rename to source/renderer/app/features/discreet-mode/replacers/defaultReplacer.spec.ts diff --git a/source/renderer/app/features/discreet-mode/replacers/defaultReplacer.js b/source/renderer/app/features/discreet-mode/replacers/defaultReplacer.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/replacers/defaultReplacer.js rename to source/renderer/app/features/discreet-mode/replacers/defaultReplacer.ts diff --git a/source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.spec.js b/source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.spec.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.spec.js rename to source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.spec.ts diff --git a/source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.js b/source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.js rename to source/renderer/app/features/discreet-mode/replacers/discreetWalletAmount.ts diff --git a/source/renderer/app/features/discreet-mode/replacers/discreetWalletTokenAmount.js b/source/renderer/app/features/discreet-mode/replacers/discreetWalletTokenAmount.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/replacers/discreetWalletTokenAmount.js rename to source/renderer/app/features/discreet-mode/replacers/discreetWalletTokenAmount.ts diff --git a/source/renderer/app/features/discreet-mode/types.js b/source/renderer/app/features/discreet-mode/types.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/types.js rename to source/renderer/app/features/discreet-mode/types.ts diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetModeFeatureInject.js b/source/renderer/app/features/discreet-mode/ui/DiscreetModeFeatureInject.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetModeFeatureInject.js rename to source/renderer/app/features/discreet-mode/ui/DiscreetModeFeatureInject.ts diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.js b/source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.js rename to source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.ts diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.js b/source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.js rename to source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.ts diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetValue.js b/source/renderer/app/features/discreet-mode/ui/DiscreetValue.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetValue.js rename to source/renderer/app/features/discreet-mode/ui/DiscreetValue.ts diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.js b/source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.js rename to source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.ts diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.messages.js b/source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.messages.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.messages.js rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.messages.ts diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.js b/source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.js rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.ts diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.js b/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.js rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.ts diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.js b/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.js rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.ts diff --git a/source/renderer/app/features/discreet-mode/ui/index.js b/source/renderer/app/features/discreet-mode/ui/index.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/index.js rename to source/renderer/app/features/discreet-mode/ui/index.ts diff --git a/source/renderer/app/features/discreet-mode/ui/withDiscreetMode.js b/source/renderer/app/features/discreet-mode/ui/withDiscreetMode.ts similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/withDiscreetMode.js rename to source/renderer/app/features/discreet-mode/ui/withDiscreetMode.ts diff --git a/source/renderer/app/features/index.js b/source/renderer/app/features/index.ts similarity index 100% rename from source/renderer/app/features/index.js rename to source/renderer/app/features/index.ts diff --git a/source/renderer/app/features/local-storage/context.js b/source/renderer/app/features/local-storage/context.ts similarity index 100% rename from source/renderer/app/features/local-storage/context.js rename to source/renderer/app/features/local-storage/context.ts diff --git a/source/renderer/app/features/local-storage/index.js b/source/renderer/app/features/local-storage/index.ts similarity index 100% rename from source/renderer/app/features/local-storage/index.js rename to source/renderer/app/features/local-storage/index.ts diff --git a/source/renderer/app/features/local-storage/types.js b/source/renderer/app/features/local-storage/types.ts similarity index 100% rename from source/renderer/app/features/local-storage/types.js rename to source/renderer/app/features/local-storage/types.ts diff --git a/source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.js b/source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.ts similarity index 100% rename from source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.js rename to source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.ts diff --git a/source/renderer/app/features/local-storage/ui/index.js b/source/renderer/app/features/local-storage/ui/index.ts similarity index 100% rename from source/renderer/app/features/local-storage/ui/index.js rename to source/renderer/app/features/local-storage/ui/index.ts diff --git a/source/renderer/app/i18n/LocalizableError.js b/source/renderer/app/i18n/LocalizableError.ts similarity index 100% rename from source/renderer/app/i18n/LocalizableError.js rename to source/renderer/app/i18n/LocalizableError.ts diff --git a/source/renderer/app/i18n/errors.js b/source/renderer/app/i18n/errors.ts similarity index 100% rename from source/renderer/app/i18n/errors.js rename to source/renderer/app/i18n/errors.ts diff --git a/source/renderer/app/i18n/global-messages.js b/source/renderer/app/i18n/global-messages.ts similarity index 100% rename from source/renderer/app/i18n/global-messages.js rename to source/renderer/app/i18n/global-messages.ts diff --git a/source/renderer/app/i18n/translations.js b/source/renderer/app/i18n/translations.ts similarity index 100% rename from source/renderer/app/i18n/translations.js rename to source/renderer/app/i18n/translations.ts diff --git a/source/renderer/app/i18n/types.js b/source/renderer/app/i18n/types.ts similarity index 100% rename from source/renderer/app/i18n/types.js rename to source/renderer/app/i18n/types.ts diff --git a/source/renderer/app/index.js b/source/renderer/app/index.ts similarity index 100% rename from source/renderer/app/index.js rename to source/renderer/app/index.ts diff --git a/source/renderer/app/ipc/bugReportRequestChannel.js b/source/renderer/app/ipc/bugReportRequestChannel.ts similarity index 100% rename from source/renderer/app/ipc/bugReportRequestChannel.js rename to source/renderer/app/ipc/bugReportRequestChannel.ts diff --git a/source/renderer/app/ipc/cardano.ipc.js b/source/renderer/app/ipc/cardano.ipc.ts similarity index 100% rename from source/renderer/app/ipc/cardano.ipc.js rename to source/renderer/app/ipc/cardano.ipc.ts diff --git a/source/renderer/app/ipc/control-ui-parts.js b/source/renderer/app/ipc/control-ui-parts.ts similarity index 100% rename from source/renderer/app/ipc/control-ui-parts.js rename to source/renderer/app/ipc/control-ui-parts.ts diff --git a/source/renderer/app/ipc/downloadManagerChannel.js b/source/renderer/app/ipc/downloadManagerChannel.ts similarity index 100% rename from source/renderer/app/ipc/downloadManagerChannel.js rename to source/renderer/app/ipc/downloadManagerChannel.ts diff --git a/source/renderer/app/ipc/electronStoreConversation.js b/source/renderer/app/ipc/electronStoreConversation.ts similarity index 100% rename from source/renderer/app/ipc/electronStoreConversation.js rename to source/renderer/app/ipc/electronStoreConversation.ts diff --git a/source/renderer/app/ipc/enableApplicationMenuNavigationChannel.js b/source/renderer/app/ipc/enableApplicationMenuNavigationChannel.ts similarity index 100% rename from source/renderer/app/ipc/enableApplicationMenuNavigationChannel.js rename to source/renderer/app/ipc/enableApplicationMenuNavigationChannel.ts diff --git a/source/renderer/app/ipc/generateAddressPDFChannel.js b/source/renderer/app/ipc/generateAddressPDFChannel.ts similarity index 100% rename from source/renderer/app/ipc/generateAddressPDFChannel.js rename to source/renderer/app/ipc/generateAddressPDFChannel.ts diff --git a/source/renderer/app/ipc/generateCsvChannel.js b/source/renderer/app/ipc/generateCsvChannel.ts similarity index 100% rename from source/renderer/app/ipc/generateCsvChannel.js rename to source/renderer/app/ipc/generateCsvChannel.ts diff --git a/source/renderer/app/ipc/generateFileMetaChannel.js b/source/renderer/app/ipc/generateFileMetaChannel.ts similarity index 100% rename from source/renderer/app/ipc/generateFileMetaChannel.js rename to source/renderer/app/ipc/generateFileMetaChannel.ts diff --git a/source/renderer/app/ipc/generatePaperWalletChannel.js b/source/renderer/app/ipc/generatePaperWalletChannel.ts similarity index 100% rename from source/renderer/app/ipc/generatePaperWalletChannel.js rename to source/renderer/app/ipc/generatePaperWalletChannel.ts diff --git a/source/renderer/app/ipc/generateVotingPDFChannel.js b/source/renderer/app/ipc/generateVotingPDFChannel.ts similarity index 100% rename from source/renderer/app/ipc/generateVotingPDFChannel.js rename to source/renderer/app/ipc/generateVotingPDFChannel.ts diff --git a/source/renderer/app/ipc/generateWalletMigrationReportChannel.js b/source/renderer/app/ipc/generateWalletMigrationReportChannel.ts similarity index 100% rename from source/renderer/app/ipc/generateWalletMigrationReportChannel.js rename to source/renderer/app/ipc/generateWalletMigrationReportChannel.ts diff --git a/source/renderer/app/ipc/get-gpu-status.ipc.js b/source/renderer/app/ipc/get-gpu-status.ipc.ts similarity index 100% rename from source/renderer/app/ipc/get-gpu-status.ipc.js rename to source/renderer/app/ipc/get-gpu-status.ipc.ts diff --git a/source/renderer/app/ipc/getBlockReplayChannel.js b/source/renderer/app/ipc/getBlockReplayChannel.ts similarity index 100% rename from source/renderer/app/ipc/getBlockReplayChannel.js rename to source/renderer/app/ipc/getBlockReplayChannel.ts diff --git a/source/renderer/app/ipc/getDesktopDirectoryPathChannel.js b/source/renderer/app/ipc/getDesktopDirectoryPathChannel.ts similarity index 100% rename from source/renderer/app/ipc/getDesktopDirectoryPathChannel.js rename to source/renderer/app/ipc/getDesktopDirectoryPathChannel.ts diff --git a/source/renderer/app/ipc/getDiskSpaceChannel.js b/source/renderer/app/ipc/getDiskSpaceChannel.ts similarity index 100% rename from source/renderer/app/ipc/getDiskSpaceChannel.js rename to source/renderer/app/ipc/getDiskSpaceChannel.ts diff --git a/source/renderer/app/ipc/getHardwareWalletChannel.js b/source/renderer/app/ipc/getHardwareWalletChannel.ts similarity index 100% rename from source/renderer/app/ipc/getHardwareWalletChannel.js rename to source/renderer/app/ipc/getHardwareWalletChannel.ts diff --git a/source/renderer/app/ipc/getRecoveryWalletIdChannel.js b/source/renderer/app/ipc/getRecoveryWalletIdChannel.ts similarity index 100% rename from source/renderer/app/ipc/getRecoveryWalletIdChannel.js rename to source/renderer/app/ipc/getRecoveryWalletIdChannel.ts diff --git a/source/renderer/app/ipc/getStateDirectoryPathChannel.js b/source/renderer/app/ipc/getStateDirectoryPathChannel.ts similarity index 100% rename from source/renderer/app/ipc/getStateDirectoryPathChannel.js rename to source/renderer/app/ipc/getStateDirectoryPathChannel.ts diff --git a/source/renderer/app/ipc/getSystemLocaleChannel.js b/source/renderer/app/ipc/getSystemLocaleChannel.ts similarity index 100% rename from source/renderer/app/ipc/getSystemLocaleChannel.js rename to source/renderer/app/ipc/getSystemLocaleChannel.ts diff --git a/source/renderer/app/ipc/introspect-address.js b/source/renderer/app/ipc/introspect-address.ts similarity index 100% rename from source/renderer/app/ipc/introspect-address.js rename to source/renderer/app/ipc/introspect-address.ts diff --git a/source/renderer/app/ipc/lib/RendererIpcChannel.js b/source/renderer/app/ipc/lib/RendererIpcChannel.ts similarity index 100% rename from source/renderer/app/ipc/lib/RendererIpcChannel.js rename to source/renderer/app/ipc/lib/RendererIpcChannel.ts diff --git a/source/renderer/app/ipc/lib/RendererIpcConversation.js b/source/renderer/app/ipc/lib/RendererIpcConversation.ts similarity index 100% rename from source/renderer/app/ipc/lib/RendererIpcConversation.js rename to source/renderer/app/ipc/lib/RendererIpcConversation.ts diff --git a/source/renderer/app/ipc/loadAsset.js b/source/renderer/app/ipc/loadAsset.ts similarity index 100% rename from source/renderer/app/ipc/loadAsset.js rename to source/renderer/app/ipc/loadAsset.ts diff --git a/source/renderer/app/ipc/logs.ipc.js b/source/renderer/app/ipc/logs.ipc.ts similarity index 100% rename from source/renderer/app/ipc/logs.ipc.js rename to source/renderer/app/ipc/logs.ipc.ts diff --git a/source/renderer/app/ipc/manageAppUpdateChannel.js b/source/renderer/app/ipc/manageAppUpdateChannel.ts similarity index 100% rename from source/renderer/app/ipc/manageAppUpdateChannel.js rename to source/renderer/app/ipc/manageAppUpdateChannel.ts diff --git a/source/renderer/app/ipc/open-external-url.js b/source/renderer/app/ipc/open-external-url.ts similarity index 100% rename from source/renderer/app/ipc/open-external-url.js rename to source/renderer/app/ipc/open-external-url.ts diff --git a/source/renderer/app/ipc/open-local-directory.js b/source/renderer/app/ipc/open-local-directory.ts similarity index 100% rename from source/renderer/app/ipc/open-local-directory.js rename to source/renderer/app/ipc/open-local-directory.ts diff --git a/source/renderer/app/ipc/rebuild-application-menu.js b/source/renderer/app/ipc/rebuild-application-menu.ts similarity index 100% rename from source/renderer/app/ipc/rebuild-application-menu.js rename to source/renderer/app/ipc/rebuild-application-menu.ts diff --git a/source/renderer/app/ipc/saveQRCodeImageChannel.js b/source/renderer/app/ipc/saveQRCodeImageChannel.ts similarity index 100% rename from source/renderer/app/ipc/saveQRCodeImageChannel.js rename to source/renderer/app/ipc/saveQRCodeImageChannel.ts diff --git a/source/renderer/app/ipc/setStateSnapshotLogChannel.js b/source/renderer/app/ipc/setStateSnapshotLogChannel.ts similarity index 100% rename from source/renderer/app/ipc/setStateSnapshotLogChannel.js rename to source/renderer/app/ipc/setStateSnapshotLogChannel.ts diff --git a/source/renderer/app/ipc/show-file-dialog-channels.js b/source/renderer/app/ipc/show-file-dialog-channels.ts similarity index 100% rename from source/renderer/app/ipc/show-file-dialog-channels.js rename to source/renderer/app/ipc/show-file-dialog-channels.ts diff --git a/source/renderer/app/routes-config.js b/source/renderer/app/routes-config.ts similarity index 100% rename from source/renderer/app/routes-config.js rename to source/renderer/app/routes-config.ts diff --git a/source/renderer/app/stores/AddressesStore.js b/source/renderer/app/stores/AddressesStore.ts similarity index 100% rename from source/renderer/app/stores/AddressesStore.js rename to source/renderer/app/stores/AddressesStore.ts diff --git a/source/renderer/app/stores/AppStore.js b/source/renderer/app/stores/AppStore.ts similarity index 100% rename from source/renderer/app/stores/AppStore.js rename to source/renderer/app/stores/AppStore.ts diff --git a/source/renderer/app/stores/AppUpdateStore.js b/source/renderer/app/stores/AppUpdateStore.ts similarity index 100% rename from source/renderer/app/stores/AppUpdateStore.js rename to source/renderer/app/stores/AppUpdateStore.ts diff --git a/source/renderer/app/stores/AssetsStore.js b/source/renderer/app/stores/AssetsStore.ts similarity index 100% rename from source/renderer/app/stores/AssetsStore.js rename to source/renderer/app/stores/AssetsStore.ts diff --git a/source/renderer/app/stores/CurrencyStore.js b/source/renderer/app/stores/CurrencyStore.ts similarity index 100% rename from source/renderer/app/stores/CurrencyStore.js rename to source/renderer/app/stores/CurrencyStore.ts diff --git a/source/renderer/app/stores/HardwareWalletsStore.js b/source/renderer/app/stores/HardwareWalletsStore.ts similarity index 100% rename from source/renderer/app/stores/HardwareWalletsStore.js rename to source/renderer/app/stores/HardwareWalletsStore.ts diff --git a/source/renderer/app/stores/NetworkStatusStore.js b/source/renderer/app/stores/NetworkStatusStore.ts similarity index 100% rename from source/renderer/app/stores/NetworkStatusStore.js rename to source/renderer/app/stores/NetworkStatusStore.ts diff --git a/source/renderer/app/stores/NewsFeedStore.js b/source/renderer/app/stores/NewsFeedStore.ts similarity index 100% rename from source/renderer/app/stores/NewsFeedStore.js rename to source/renderer/app/stores/NewsFeedStore.ts diff --git a/source/renderer/app/stores/ProfileStore.js b/source/renderer/app/stores/ProfileStore.ts similarity index 100% rename from source/renderer/app/stores/ProfileStore.js rename to source/renderer/app/stores/ProfileStore.ts diff --git a/source/renderer/app/stores/SidebarStore.spec.js b/source/renderer/app/stores/SidebarStore.spec.ts similarity index 100% rename from source/renderer/app/stores/SidebarStore.spec.js rename to source/renderer/app/stores/SidebarStore.spec.ts diff --git a/source/renderer/app/stores/SidebarStore.js b/source/renderer/app/stores/SidebarStore.ts similarity index 100% rename from source/renderer/app/stores/SidebarStore.js rename to source/renderer/app/stores/SidebarStore.ts diff --git a/source/renderer/app/stores/StakingStore.js b/source/renderer/app/stores/StakingStore.ts similarity index 100% rename from source/renderer/app/stores/StakingStore.js rename to source/renderer/app/stores/StakingStore.ts diff --git a/source/renderer/app/stores/TransactionsStore.js b/source/renderer/app/stores/TransactionsStore.ts similarity index 100% rename from source/renderer/app/stores/TransactionsStore.js rename to source/renderer/app/stores/TransactionsStore.ts diff --git a/source/renderer/app/stores/UiDialogsStore.js b/source/renderer/app/stores/UiDialogsStore.ts similarity index 100% rename from source/renderer/app/stores/UiDialogsStore.js rename to source/renderer/app/stores/UiDialogsStore.ts diff --git a/source/renderer/app/stores/UiNotificationsStore.js b/source/renderer/app/stores/UiNotificationsStore.ts similarity index 100% rename from source/renderer/app/stores/UiNotificationsStore.js rename to source/renderer/app/stores/UiNotificationsStore.ts diff --git a/source/renderer/app/stores/VotingStore.spec.js b/source/renderer/app/stores/VotingStore.spec.ts similarity index 100% rename from source/renderer/app/stores/VotingStore.spec.js rename to source/renderer/app/stores/VotingStore.spec.ts diff --git a/source/renderer/app/stores/VotingStore.js b/source/renderer/app/stores/VotingStore.ts similarity index 100% rename from source/renderer/app/stores/VotingStore.js rename to source/renderer/app/stores/VotingStore.ts diff --git a/source/renderer/app/stores/WalletBackupStore.js b/source/renderer/app/stores/WalletBackupStore.ts similarity index 100% rename from source/renderer/app/stores/WalletBackupStore.js rename to source/renderer/app/stores/WalletBackupStore.ts diff --git a/source/renderer/app/stores/WalletMigrationStore.js b/source/renderer/app/stores/WalletMigrationStore.ts similarity index 100% rename from source/renderer/app/stores/WalletMigrationStore.js rename to source/renderer/app/stores/WalletMigrationStore.ts diff --git a/source/renderer/app/stores/WalletSettingsStore.js b/source/renderer/app/stores/WalletSettingsStore.ts similarity index 100% rename from source/renderer/app/stores/WalletSettingsStore.js rename to source/renderer/app/stores/WalletSettingsStore.ts diff --git a/source/renderer/app/stores/WalletsLocalStore.js b/source/renderer/app/stores/WalletsLocalStore.ts similarity index 100% rename from source/renderer/app/stores/WalletsLocalStore.js rename to source/renderer/app/stores/WalletsLocalStore.ts diff --git a/source/renderer/app/stores/WalletsStore.js b/source/renderer/app/stores/WalletsStore.ts similarity index 100% rename from source/renderer/app/stores/WalletsStore.js rename to source/renderer/app/stores/WalletsStore.ts diff --git a/source/renderer/app/stores/WindowStore.js b/source/renderer/app/stores/WindowStore.ts similarity index 100% rename from source/renderer/app/stores/WindowStore.js rename to source/renderer/app/stores/WindowStore.ts diff --git a/source/renderer/app/stores/index.js b/source/renderer/app/stores/index.ts similarity index 100% rename from source/renderer/app/stores/index.js rename to source/renderer/app/stores/index.ts diff --git a/source/renderer/app/stores/lib/CachedRequest.js b/source/renderer/app/stores/lib/CachedRequest.ts similarity index 100% rename from source/renderer/app/stores/lib/CachedRequest.js rename to source/renderer/app/stores/lib/CachedRequest.ts diff --git a/source/renderer/app/stores/lib/LocalizedCachedRequest.js b/source/renderer/app/stores/lib/LocalizedCachedRequest.ts similarity index 100% rename from source/renderer/app/stores/lib/LocalizedCachedRequest.js rename to source/renderer/app/stores/lib/LocalizedCachedRequest.ts diff --git a/source/renderer/app/stores/lib/LocalizedRequest.js b/source/renderer/app/stores/lib/LocalizedRequest.ts similarity index 100% rename from source/renderer/app/stores/lib/LocalizedRequest.js rename to source/renderer/app/stores/lib/LocalizedRequest.ts diff --git a/source/renderer/app/stores/lib/Reaction.js b/source/renderer/app/stores/lib/Reaction.ts similarity index 100% rename from source/renderer/app/stores/lib/Reaction.js rename to source/renderer/app/stores/lib/Reaction.ts diff --git a/source/renderer/app/stores/lib/Request.js b/source/renderer/app/stores/lib/Request.ts similarity index 100% rename from source/renderer/app/stores/lib/Request.js rename to source/renderer/app/stores/lib/Request.ts diff --git a/source/renderer/app/stores/lib/Store.js b/source/renderer/app/stores/lib/Store.ts similarity index 100% rename from source/renderer/app/stores/lib/Store.js rename to source/renderer/app/stores/lib/Store.ts diff --git a/source/renderer/app/themes/daedalus.js b/source/renderer/app/themes/daedalus.ts similarity index 100% rename from source/renderer/app/themes/daedalus.js rename to source/renderer/app/themes/daedalus.ts diff --git a/source/renderer/app/themes/daedalus/cardano.js b/source/renderer/app/themes/daedalus/cardano.ts similarity index 100% rename from source/renderer/app/themes/daedalus/cardano.js rename to source/renderer/app/themes/daedalus/cardano.ts diff --git a/source/renderer/app/themes/daedalus/dark-blue.js b/source/renderer/app/themes/daedalus/dark-blue.ts similarity index 100% rename from source/renderer/app/themes/daedalus/dark-blue.js rename to source/renderer/app/themes/daedalus/dark-blue.ts diff --git a/source/renderer/app/themes/daedalus/dark-cardano.js b/source/renderer/app/themes/daedalus/dark-cardano.ts similarity index 100% rename from source/renderer/app/themes/daedalus/dark-cardano.js rename to source/renderer/app/themes/daedalus/dark-cardano.ts diff --git a/source/renderer/app/themes/daedalus/flight-candidate.js b/source/renderer/app/themes/daedalus/flight-candidate.ts similarity index 100% rename from source/renderer/app/themes/daedalus/flight-candidate.js rename to source/renderer/app/themes/daedalus/flight-candidate.ts diff --git a/source/renderer/app/themes/daedalus/incentivized-testnet.js b/source/renderer/app/themes/daedalus/incentivized-testnet.ts similarity index 100% rename from source/renderer/app/themes/daedalus/incentivized-testnet.js rename to source/renderer/app/themes/daedalus/incentivized-testnet.ts diff --git a/source/renderer/app/themes/daedalus/index.js b/source/renderer/app/themes/daedalus/index.ts similarity index 100% rename from source/renderer/app/themes/daedalus/index.js rename to source/renderer/app/themes/daedalus/index.ts diff --git a/source/renderer/app/themes/daedalus/light-blue.js b/source/renderer/app/themes/daedalus/light-blue.ts similarity index 100% rename from source/renderer/app/themes/daedalus/light-blue.js rename to source/renderer/app/themes/daedalus/light-blue.ts diff --git a/source/renderer/app/themes/daedalus/shelley-testnet.js b/source/renderer/app/themes/daedalus/shelley-testnet.ts similarity index 100% rename from source/renderer/app/themes/daedalus/shelley-testnet.js rename to source/renderer/app/themes/daedalus/shelley-testnet.ts diff --git a/source/renderer/app/themes/daedalus/white.js b/source/renderer/app/themes/daedalus/white.ts similarity index 100% rename from source/renderer/app/themes/daedalus/white.js rename to source/renderer/app/themes/daedalus/white.ts diff --git a/source/renderer/app/themes/daedalus/yellow.js b/source/renderer/app/themes/daedalus/yellow.ts similarity index 100% rename from source/renderer/app/themes/daedalus/yellow.js rename to source/renderer/app/themes/daedalus/yellow.ts diff --git a/source/renderer/app/themes/index.js b/source/renderer/app/themes/index.ts similarity index 100% rename from source/renderer/app/themes/index.js rename to source/renderer/app/themes/index.ts diff --git a/source/renderer/app/themes/overrides/index.js b/source/renderer/app/themes/overrides/index.ts similarity index 100% rename from source/renderer/app/themes/overrides/index.js rename to source/renderer/app/themes/overrides/index.ts diff --git a/source/renderer/app/themes/scripts/check.js b/source/renderer/app/themes/scripts/check.ts similarity index 100% rename from source/renderer/app/themes/scripts/check.js rename to source/renderer/app/themes/scripts/check.ts diff --git a/source/renderer/app/themes/scripts/update.js b/source/renderer/app/themes/scripts/update.ts similarity index 100% rename from source/renderer/app/themes/scripts/update.js rename to source/renderer/app/themes/scripts/update.ts diff --git a/source/renderer/app/themes/types.js b/source/renderer/app/themes/types.ts similarity index 100% rename from source/renderer/app/themes/types.js rename to source/renderer/app/themes/types.ts diff --git a/source/renderer/app/themes/utils/checkCreateTheme.js b/source/renderer/app/themes/utils/checkCreateTheme.ts similarity index 100% rename from source/renderer/app/themes/utils/checkCreateTheme.js rename to source/renderer/app/themes/utils/checkCreateTheme.ts diff --git a/source/renderer/app/themes/utils/constants.js b/source/renderer/app/themes/utils/constants.ts similarity index 100% rename from source/renderer/app/themes/utils/constants.js rename to source/renderer/app/themes/utils/constants.ts diff --git a/source/renderer/app/themes/utils/copyTheme.js b/source/renderer/app/themes/utils/copyTheme.ts similarity index 100% rename from source/renderer/app/themes/utils/copyTheme.js rename to source/renderer/app/themes/utils/copyTheme.ts diff --git a/source/renderer/app/themes/utils/createShades.js b/source/renderer/app/themes/utils/createShades.ts similarity index 100% rename from source/renderer/app/themes/utils/createShades.js rename to source/renderer/app/themes/utils/createShades.ts diff --git a/source/renderer/app/themes/utils/createTheme.js b/source/renderer/app/themes/utils/createTheme.ts similarity index 100% rename from source/renderer/app/themes/utils/createTheme.js rename to source/renderer/app/themes/utils/createTheme.ts diff --git a/source/renderer/app/themes/utils/findUpdates.js b/source/renderer/app/themes/utils/findUpdates.ts similarity index 100% rename from source/renderer/app/themes/utils/findUpdates.js rename to source/renderer/app/themes/utils/findUpdates.ts diff --git a/source/renderer/app/themes/utils/updateThemes.js b/source/renderer/app/themes/utils/updateThemes.ts similarity index 100% rename from source/renderer/app/themes/utils/updateThemes.js rename to source/renderer/app/themes/utils/updateThemes.ts diff --git a/source/renderer/app/themes/utils/updateThemesCLI.js b/source/renderer/app/themes/utils/updateThemesCLI.ts similarity index 100% rename from source/renderer/app/themes/utils/updateThemesCLI.js rename to source/renderer/app/themes/utils/updateThemesCLI.ts diff --git a/source/renderer/app/themes/utils/writeThemeUpdate.js b/source/renderer/app/themes/utils/writeThemeUpdate.ts similarity index 100% rename from source/renderer/app/themes/utils/writeThemeUpdate.js rename to source/renderer/app/themes/utils/writeThemeUpdate.ts diff --git a/source/renderer/app/types/LogTypes.js b/source/renderer/app/types/LogTypes.ts similarity index 100% rename from source/renderer/app/types/LogTypes.js rename to source/renderer/app/types/LogTypes.ts diff --git a/source/renderer/app/types/TransactionMetadata.js b/source/renderer/app/types/TransactionMetadata.ts similarity index 100% rename from source/renderer/app/types/TransactionMetadata.js rename to source/renderer/app/types/TransactionMetadata.ts diff --git a/source/renderer/app/types/applicationDialogTypes.js b/source/renderer/app/types/applicationDialogTypes.ts similarity index 100% rename from source/renderer/app/types/applicationDialogTypes.js rename to source/renderer/app/types/applicationDialogTypes.ts diff --git a/source/renderer/app/types/coreSystemInfoTypes.js b/source/renderer/app/types/coreSystemInfoTypes.ts similarity index 100% rename from source/renderer/app/types/coreSystemInfoTypes.js rename to source/renderer/app/types/coreSystemInfoTypes.ts diff --git a/source/renderer/app/types/currencyTypes.js b/source/renderer/app/types/currencyTypes.ts similarity index 100% rename from source/renderer/app/types/currencyTypes.js rename to source/renderer/app/types/currencyTypes.ts diff --git a/source/renderer/app/types/gpuStatus.js b/source/renderer/app/types/gpuStatus.ts similarity index 100% rename from source/renderer/app/types/gpuStatus.js rename to source/renderer/app/types/gpuStatus.ts diff --git a/source/renderer/app/types/i18nTypes.js b/source/renderer/app/types/i18nTypes.ts similarity index 100% rename from source/renderer/app/types/i18nTypes.js rename to source/renderer/app/types/i18nTypes.ts diff --git a/source/renderer/app/types/injectedPropsType.js b/source/renderer/app/types/injectedPropsType.ts similarity index 100% rename from source/renderer/app/types/injectedPropsType.js rename to source/renderer/app/types/injectedPropsType.ts diff --git a/source/renderer/app/types/networkTypes.js b/source/renderer/app/types/networkTypes.ts similarity index 100% rename from source/renderer/app/types/networkTypes.js rename to source/renderer/app/types/networkTypes.ts diff --git a/source/renderer/app/types/notificationTypes.js b/source/renderer/app/types/notificationTypes.ts similarity index 100% rename from source/renderer/app/types/notificationTypes.js rename to source/renderer/app/types/notificationTypes.ts diff --git a/source/renderer/app/types/sidebarTypes.js b/source/renderer/app/types/sidebarTypes.ts similarity index 100% rename from source/renderer/app/types/sidebarTypes.js rename to source/renderer/app/types/sidebarTypes.ts diff --git a/source/renderer/app/types/stakingTypes.js b/source/renderer/app/types/stakingTypes.ts similarity index 100% rename from source/renderer/app/types/stakingTypes.js rename to source/renderer/app/types/stakingTypes.ts diff --git a/source/renderer/app/types/systemInfoTypes.js b/source/renderer/app/types/systemInfoTypes.ts similarity index 100% rename from source/renderer/app/types/systemInfoTypes.js rename to source/renderer/app/types/systemInfoTypes.ts diff --git a/source/renderer/app/types/walletBackupTypes.js b/source/renderer/app/types/walletBackupTypes.ts similarity index 100% rename from source/renderer/app/types/walletBackupTypes.js rename to source/renderer/app/types/walletBackupTypes.ts diff --git a/source/renderer/app/types/walletExportTypes.js b/source/renderer/app/types/walletExportTypes.ts similarity index 100% rename from source/renderer/app/types/walletExportTypes.js rename to source/renderer/app/types/walletExportTypes.ts diff --git a/source/renderer/app/types/walletRecoveryPhraseVerificationTypes.js b/source/renderer/app/types/walletRecoveryPhraseVerificationTypes.ts similarity index 100% rename from source/renderer/app/types/walletRecoveryPhraseVerificationTypes.js rename to source/renderer/app/types/walletRecoveryPhraseVerificationTypes.ts diff --git a/source/renderer/app/types/walletRestoreTypes.js b/source/renderer/app/types/walletRestoreTypes.ts similarity index 100% rename from source/renderer/app/types/walletRestoreTypes.js rename to source/renderer/app/types/walletRestoreTypes.ts diff --git a/source/renderer/app/utils/ReactToolboxMobxForm.js b/source/renderer/app/utils/ReactToolboxMobxForm.ts similarity index 100% rename from source/renderer/app/utils/ReactToolboxMobxForm.js rename to source/renderer/app/utils/ReactToolboxMobxForm.ts diff --git a/source/renderer/app/utils/addressPDFGenerator.js b/source/renderer/app/utils/addressPDFGenerator.ts similarity index 100% rename from source/renderer/app/utils/addressPDFGenerator.js rename to source/renderer/app/utils/addressPDFGenerator.ts diff --git a/source/renderer/app/utils/assets.js b/source/renderer/app/utils/assets.ts similarity index 100% rename from source/renderer/app/utils/assets.js rename to source/renderer/app/utils/assets.ts diff --git a/source/renderer/app/utils/asyncForEach.js b/source/renderer/app/utils/asyncForEach.ts similarity index 100% rename from source/renderer/app/utils/asyncForEach.js rename to source/renderer/app/utils/asyncForEach.ts diff --git a/source/renderer/app/utils/colors.js b/source/renderer/app/utils/colors.ts similarity index 100% rename from source/renderer/app/utils/colors.js rename to source/renderer/app/utils/colors.ts diff --git a/source/renderer/app/utils/crypto.js b/source/renderer/app/utils/crypto.ts similarity index 100% rename from source/renderer/app/utils/crypto.js rename to source/renderer/app/utils/crypto.ts diff --git a/source/renderer/app/utils/csvGenerator.js b/source/renderer/app/utils/csvGenerator.ts similarity index 100% rename from source/renderer/app/utils/csvGenerator.js rename to source/renderer/app/utils/csvGenerator.ts diff --git a/source/renderer/app/utils/domManipulation.js b/source/renderer/app/utils/domManipulation.ts similarity index 100% rename from source/renderer/app/utils/domManipulation.js rename to source/renderer/app/utils/domManipulation.ts diff --git a/source/renderer/app/utils/fileMetaGenerator.js b/source/renderer/app/utils/fileMetaGenerator.ts similarity index 100% rename from source/renderer/app/utils/fileMetaGenerator.js rename to source/renderer/app/utils/fileMetaGenerator.ts diff --git a/source/renderer/app/utils/form.js b/source/renderer/app/utils/form.ts similarity index 100% rename from source/renderer/app/utils/form.js rename to source/renderer/app/utils/form.ts diff --git a/source/renderer/app/utils/formatCpuInfo.spec.js b/source/renderer/app/utils/formatCpuInfo.spec.ts similarity index 100% rename from source/renderer/app/utils/formatCpuInfo.spec.js rename to source/renderer/app/utils/formatCpuInfo.spec.ts diff --git a/source/renderer/app/utils/formatCpuInfo.js b/source/renderer/app/utils/formatCpuInfo.ts similarity index 100% rename from source/renderer/app/utils/formatCpuInfo.js rename to source/renderer/app/utils/formatCpuInfo.ts diff --git a/source/renderer/app/utils/formatters.js b/source/renderer/app/utils/formatters.ts similarity index 100% rename from source/renderer/app/utils/formatters.js rename to source/renderer/app/utils/formatters.ts diff --git a/source/renderer/app/utils/hardwareWalletUtils.js b/source/renderer/app/utils/hardwareWalletUtils.ts similarity index 100% rename from source/renderer/app/utils/hardwareWalletUtils.js rename to source/renderer/app/utils/hardwareWalletUtils.ts diff --git a/source/renderer/app/utils/humanizeDurationByLocale.js b/source/renderer/app/utils/humanizeDurationByLocale.ts similarity index 100% rename from source/renderer/app/utils/humanizeDurationByLocale.js rename to source/renderer/app/utils/humanizeDurationByLocale.ts diff --git a/source/renderer/app/utils/i18nContext.js b/source/renderer/app/utils/i18nContext.ts similarity index 100% rename from source/renderer/app/utils/i18nContext.js rename to source/renderer/app/utils/i18nContext.ts diff --git a/source/renderer/app/utils/index.js b/source/renderer/app/utils/index.ts similarity index 100% rename from source/renderer/app/utils/index.js rename to source/renderer/app/utils/index.ts diff --git a/source/renderer/app/utils/logging.js b/source/renderer/app/utils/logging.ts similarity index 100% rename from source/renderer/app/utils/logging.js rename to source/renderer/app/utils/logging.ts diff --git a/source/renderer/app/utils/mobx-features/feature.js b/source/renderer/app/utils/mobx-features/feature.ts similarity index 100% rename from source/renderer/app/utils/mobx-features/feature.js rename to source/renderer/app/utils/mobx-features/feature.ts diff --git a/source/renderer/app/utils/mobx-features/hooks.js b/source/renderer/app/utils/mobx-features/hooks.ts similarity index 100% rename from source/renderer/app/utils/mobx-features/hooks.js rename to source/renderer/app/utils/mobx-features/hooks.ts diff --git a/source/renderer/app/utils/mobx-features/reaction.js b/source/renderer/app/utils/mobx-features/reaction.ts similarity index 100% rename from source/renderer/app/utils/mobx-features/reaction.js rename to source/renderer/app/utils/mobx-features/reaction.ts diff --git a/source/renderer/app/utils/network.js b/source/renderer/app/utils/network.ts similarity index 100% rename from source/renderer/app/utils/network.js rename to source/renderer/app/utils/network.ts diff --git a/source/renderer/app/utils/numbers.js b/source/renderer/app/utils/numbers.ts similarity index 100% rename from source/renderer/app/utils/numbers.js rename to source/renderer/app/utils/numbers.ts diff --git a/source/renderer/app/utils/paperWalletPdfGenerator.js b/source/renderer/app/utils/paperWalletPdfGenerator.ts similarity index 100% rename from source/renderer/app/utils/paperWalletPdfGenerator.js rename to source/renderer/app/utils/paperWalletPdfGenerator.ts diff --git a/source/renderer/app/utils/routing.js b/source/renderer/app/utils/routing.ts similarity index 100% rename from source/renderer/app/utils/routing.js rename to source/renderer/app/utils/routing.ts diff --git a/source/renderer/app/utils/serialize.js b/source/renderer/app/utils/serialize.ts similarity index 100% rename from source/renderer/app/utils/serialize.js rename to source/renderer/app/utils/serialize.ts diff --git a/source/renderer/app/utils/shelleyLedger.js b/source/renderer/app/utils/shelleyLedger.ts similarity index 100% rename from source/renderer/app/utils/shelleyLedger.js rename to source/renderer/app/utils/shelleyLedger.ts diff --git a/source/renderer/app/utils/shelleyTrezor.js b/source/renderer/app/utils/shelleyTrezor.ts similarity index 100% rename from source/renderer/app/utils/shelleyTrezor.js rename to source/renderer/app/utils/shelleyTrezor.ts diff --git a/source/renderer/app/utils/sortComparators.js b/source/renderer/app/utils/sortComparators.ts similarity index 100% rename from source/renderer/app/utils/sortComparators.js rename to source/renderer/app/utils/sortComparators.ts diff --git a/source/renderer/app/utils/staking.js b/source/renderer/app/utils/staking.ts similarity index 100% rename from source/renderer/app/utils/staking.js rename to source/renderer/app/utils/staking.ts diff --git a/source/renderer/app/utils/storesUtils.js b/source/renderer/app/utils/storesUtils.ts similarity index 100% rename from source/renderer/app/utils/storesUtils.js rename to source/renderer/app/utils/storesUtils.ts diff --git a/source/renderer/app/utils/strings.js b/source/renderer/app/utils/strings.ts similarity index 100% rename from source/renderer/app/utils/strings.js rename to source/renderer/app/utils/strings.ts diff --git a/source/renderer/app/utils/transaction.js b/source/renderer/app/utils/transaction.ts similarity index 100% rename from source/renderer/app/utils/transaction.js rename to source/renderer/app/utils/transaction.ts diff --git a/source/renderer/app/utils/transactionsCsvGenerator.js b/source/renderer/app/utils/transactionsCsvGenerator.ts similarity index 100% rename from source/renderer/app/utils/transactionsCsvGenerator.js rename to source/renderer/app/utils/transactionsCsvGenerator.ts diff --git a/source/renderer/app/utils/utxoUtils.js b/source/renderer/app/utils/utxoUtils.ts similarity index 100% rename from source/renderer/app/utils/utxoUtils.js rename to source/renderer/app/utils/utxoUtils.ts diff --git a/source/renderer/app/utils/validations.js b/source/renderer/app/utils/validations.ts similarity index 100% rename from source/renderer/app/utils/validations.js rename to source/renderer/app/utils/validations.ts diff --git a/source/renderer/app/utils/votingPDFGenerator.js b/source/renderer/app/utils/votingPDFGenerator.ts similarity index 100% rename from source/renderer/app/utils/votingPDFGenerator.js rename to source/renderer/app/utils/votingPDFGenerator.ts diff --git a/source/renderer/app/utils/waitFor.js b/source/renderer/app/utils/waitFor.ts similarity index 100% rename from source/renderer/app/utils/waitFor.js rename to source/renderer/app/utils/waitFor.ts diff --git a/source/renderer/app/utils/waitForExist.js b/source/renderer/app/utils/waitForExist.ts similarity index 100% rename from source/renderer/app/utils/waitForExist.js rename to source/renderer/app/utils/waitForExist.ts diff --git a/source/renderer/app/utils/walletRecoveryPhraseVerificationUtils.js b/source/renderer/app/utils/walletRecoveryPhraseVerificationUtils.ts similarity index 100% rename from source/renderer/app/utils/walletRecoveryPhraseVerificationUtils.js rename to source/renderer/app/utils/walletRecoveryPhraseVerificationUtils.ts diff --git a/source/renderer/app/utils/walletSorting.spec.js b/source/renderer/app/utils/walletSorting.spec.ts similarity index 100% rename from source/renderer/app/utils/walletSorting.spec.js rename to source/renderer/app/utils/walletSorting.spec.ts diff --git a/source/renderer/app/utils/walletSorting.js b/source/renderer/app/utils/walletSorting.ts similarity index 100% rename from source/renderer/app/utils/walletSorting.js rename to source/renderer/app/utils/walletSorting.ts diff --git a/source/renderer/app/utils/walletUtils.js b/source/renderer/app/utils/walletUtils.ts similarity index 100% rename from source/renderer/app/utils/walletUtils.js rename to source/renderer/app/utils/walletUtils.ts diff --git a/source/renderer/app/utils/walletsForStakePoolsRanking.js b/source/renderer/app/utils/walletsForStakePoolsRanking.ts similarity index 100% rename from source/renderer/app/utils/walletsForStakePoolsRanking.js rename to source/renderer/app/utils/walletsForStakePoolsRanking.ts diff --git a/source/renderer/index.js b/source/renderer/index.ts similarity index 100% rename from source/renderer/index.js rename to source/renderer/index.ts diff --git a/storybook/addons.js b/storybook/addons.ts similarity index 100% rename from storybook/addons.js rename to storybook/addons.ts diff --git a/storybook/addons/DaedalusMenu/DaedalusMenu.js b/storybook/addons/DaedalusMenu/DaedalusMenu.ts similarity index 100% rename from storybook/addons/DaedalusMenu/DaedalusMenu.js rename to storybook/addons/DaedalusMenu/DaedalusMenu.ts diff --git a/storybook/addons/DaedalusMenu/DaedalusMenuStyles.js b/storybook/addons/DaedalusMenu/DaedalusMenuStyles.ts similarity index 100% rename from storybook/addons/DaedalusMenu/DaedalusMenuStyles.js rename to storybook/addons/DaedalusMenu/DaedalusMenuStyles.ts diff --git a/storybook/addons/DaedalusMenu/index.js b/storybook/addons/DaedalusMenu/index.ts similarity index 100% rename from storybook/addons/DaedalusMenu/index.js rename to storybook/addons/DaedalusMenu/index.ts diff --git a/storybook/addons/DaedalusMenu/register.js b/storybook/addons/DaedalusMenu/register.ts similarity index 100% rename from storybook/addons/DaedalusMenu/register.js rename to storybook/addons/DaedalusMenu/register.ts diff --git a/storybook/config.js b/storybook/config.ts similarity index 100% rename from storybook/config.js rename to storybook/config.ts diff --git a/storybook/stories/_support/DiscreetModeNotificationKnob.js b/storybook/stories/_support/DiscreetModeNotificationKnob.ts similarity index 100% rename from storybook/stories/_support/DiscreetModeNotificationKnob.js rename to storybook/stories/_support/DiscreetModeNotificationKnob.ts diff --git a/storybook/stories/_support/DiscreetModeToggleKnob.js b/storybook/stories/_support/DiscreetModeToggleKnob.ts similarity index 100% rename from storybook/stories/_support/DiscreetModeToggleKnob.js rename to storybook/stories/_support/DiscreetModeToggleKnob.ts diff --git a/storybook/stories/_support/StoryDecorator.js b/storybook/stories/_support/StoryDecorator.ts similarity index 100% rename from storybook/stories/_support/StoryDecorator.js rename to storybook/stories/_support/StoryDecorator.ts diff --git a/storybook/stories/_support/StoryLayout.js b/storybook/stories/_support/StoryLayout.ts similarity index 100% rename from storybook/stories/_support/StoryLayout.js rename to storybook/stories/_support/StoryLayout.ts diff --git a/storybook/stories/_support/StoryProvider.js b/storybook/stories/_support/StoryProvider.ts similarity index 100% rename from storybook/stories/_support/StoryProvider.js rename to storybook/stories/_support/StoryProvider.ts diff --git a/storybook/stories/_support/StoryWrapper.js b/storybook/stories/_support/StoryWrapper.ts similarity index 100% rename from storybook/stories/_support/StoryWrapper.js rename to storybook/stories/_support/StoryWrapper.ts diff --git a/storybook/stories/_support/config.js b/storybook/stories/_support/config.ts similarity index 100% rename from storybook/stories/_support/config.js rename to storybook/stories/_support/config.ts diff --git a/storybook/stories/_support/environment.js b/storybook/stories/_support/environment.ts similarity index 100% rename from storybook/stories/_support/environment.js rename to storybook/stories/_support/environment.ts diff --git a/storybook/stories/_support/profileSettings.js b/storybook/stories/_support/profileSettings.ts similarity index 100% rename from storybook/stories/_support/profileSettings.js rename to storybook/stories/_support/profileSettings.ts diff --git a/storybook/stories/_support/utils.js b/storybook/stories/_support/utils.ts similarity index 100% rename from storybook/stories/_support/utils.js rename to storybook/stories/_support/utils.ts diff --git a/storybook/stories/assets/Asset.stories.js b/storybook/stories/assets/Asset.stories.ts similarity index 100% rename from storybook/stories/assets/Asset.stories.js rename to storybook/stories/assets/Asset.stories.ts diff --git a/storybook/stories/assets/AssetSettingsDialog.stories.js b/storybook/stories/assets/AssetSettingsDialog.stories.ts similarity index 100% rename from storybook/stories/assets/AssetSettingsDialog.stories.js rename to storybook/stories/assets/AssetSettingsDialog.stories.ts diff --git a/storybook/stories/common/ItemsDropdown.stories.js b/storybook/stories/common/ItemsDropdown.stories.ts similarity index 100% rename from storybook/stories/common/ItemsDropdown.stories.js rename to storybook/stories/common/ItemsDropdown.stories.ts diff --git a/storybook/stories/common/Widgets.stories.js b/storybook/stories/common/Widgets.stories.ts similarity index 100% rename from storybook/stories/common/Widgets.stories.js rename to storybook/stories/common/Widgets.stories.ts diff --git a/storybook/stories/dapps/TransactionRequest.stories.js b/storybook/stories/dapps/TransactionRequest.stories.ts similarity index 100% rename from storybook/stories/dapps/TransactionRequest.stories.js rename to storybook/stories/dapps/TransactionRequest.stories.ts diff --git a/storybook/stories/index.js b/storybook/stories/index.ts similarity index 100% rename from storybook/stories/index.js rename to storybook/stories/index.ts diff --git a/storybook/stories/navigation/Sidebar.stories.js b/storybook/stories/navigation/Sidebar.stories.ts similarity index 100% rename from storybook/stories/navigation/Sidebar.stories.js rename to storybook/stories/navigation/Sidebar.stories.ts diff --git a/storybook/stories/navigation/SidebarCategory.stories.js b/storybook/stories/navigation/SidebarCategory.stories.ts similarity index 100% rename from storybook/stories/navigation/SidebarCategory.stories.js rename to storybook/stories/navigation/SidebarCategory.stories.ts diff --git a/storybook/stories/navigation/SidebarWalletsMenu.stories.js b/storybook/stories/navigation/SidebarWalletsMenu.stories.ts similarity index 100% rename from storybook/stories/navigation/SidebarWalletsMenu.stories.js rename to storybook/stories/navigation/SidebarWalletsMenu.stories.ts diff --git a/storybook/stories/news/AlertsOverlay.stories.js b/storybook/stories/news/AlertsOverlay.stories.ts similarity index 100% rename from storybook/stories/news/AlertsOverlay.stories.js rename to storybook/stories/news/AlertsOverlay.stories.ts diff --git a/storybook/stories/news/AppUpdateOverlay.stories.js b/storybook/stories/news/AppUpdateOverlay.stories.ts similarity index 100% rename from storybook/stories/news/AppUpdateOverlay.stories.js rename to storybook/stories/news/AppUpdateOverlay.stories.ts diff --git a/storybook/stories/news/IncidentOverlay.stories.js b/storybook/stories/news/IncidentOverlay.stories.ts similarity index 100% rename from storybook/stories/news/IncidentOverlay.stories.js rename to storybook/stories/news/IncidentOverlay.stories.ts diff --git a/storybook/stories/news/NewsFeed.stories.js b/storybook/stories/news/NewsFeed.stories.ts similarity index 100% rename from storybook/stories/news/NewsFeed.stories.js rename to storybook/stories/news/NewsFeed.stories.ts diff --git a/storybook/stories/news/_utils/fakeDataNewsFeed.js b/storybook/stories/news/_utils/fakeDataNewsFeed.ts similarity index 100% rename from storybook/stories/news/_utils/fakeDataNewsFeed.js rename to storybook/stories/news/_utils/fakeDataNewsFeed.ts diff --git a/storybook/stories/news/_utils/fakeDataUpdate.js b/storybook/stories/news/_utils/fakeDataUpdate.ts similarity index 100% rename from storybook/stories/news/_utils/fakeDataUpdate.js rename to storybook/stories/news/_utils/fakeDataUpdate.ts diff --git a/storybook/stories/nodes/_utils/props.js b/storybook/stories/nodes/_utils/props.ts similarity index 100% rename from storybook/stories/nodes/_utils/props.js rename to storybook/stories/nodes/_utils/props.ts diff --git a/storybook/stories/nodes/about/About.stories.js b/storybook/stories/nodes/about/About.stories.ts similarity index 100% rename from storybook/stories/nodes/about/About.stories.js rename to storybook/stories/nodes/about/About.stories.ts diff --git a/storybook/stories/nodes/environment/TopBarEnvironment.stories.js b/storybook/stories/nodes/environment/TopBarEnvironment.stories.ts similarity index 100% rename from storybook/stories/nodes/environment/TopBarEnvironment.stories.js rename to storybook/stories/nodes/environment/TopBarEnvironment.stories.ts diff --git a/storybook/stories/nodes/errors/Errors.stories.js b/storybook/stories/nodes/errors/Errors.stories.ts similarity index 100% rename from storybook/stories/nodes/errors/Errors.stories.js rename to storybook/stories/nodes/errors/Errors.stories.ts diff --git a/storybook/stories/nodes/errors/NoDiskSpaceError.stories.js b/storybook/stories/nodes/errors/NoDiskSpaceError.stories.ts similarity index 100% rename from storybook/stories/nodes/errors/NoDiskSpaceError.stories.js rename to storybook/stories/nodes/errors/NoDiskSpaceError.stories.ts diff --git a/storybook/stories/nodes/errors/SystemTimeError.stories.js b/storybook/stories/nodes/errors/SystemTimeError.stories.ts similarity index 100% rename from storybook/stories/nodes/errors/SystemTimeError.stories.js rename to storybook/stories/nodes/errors/SystemTimeError.stories.ts diff --git a/storybook/stories/nodes/index.js b/storybook/stories/nodes/index.ts similarity index 100% rename from storybook/stories/nodes/index.js rename to storybook/stories/nodes/index.ts diff --git a/storybook/stories/nodes/splash/Splash.stories.js b/storybook/stories/nodes/splash/Splash.stories.ts similarity index 100% rename from storybook/stories/nodes/splash/Splash.stories.js rename to storybook/stories/nodes/splash/Splash.stories.ts diff --git a/storybook/stories/nodes/status/Diagnostics.stories.js b/storybook/stories/nodes/status/Diagnostics.stories.ts similarity index 100% rename from storybook/stories/nodes/status/Diagnostics.stories.js rename to storybook/stories/nodes/status/Diagnostics.stories.ts diff --git a/storybook/stories/nodes/status/Status.stories.js b/storybook/stories/nodes/status/Status.stories.ts similarity index 100% rename from storybook/stories/nodes/status/Status.stories.js rename to storybook/stories/nodes/status/Status.stories.ts diff --git a/storybook/stories/nodes/syncing/Syncing.stories.js b/storybook/stories/nodes/syncing/Syncing.stories.ts similarity index 100% rename from storybook/stories/nodes/syncing/Syncing.stories.js rename to storybook/stories/nodes/syncing/Syncing.stories.ts diff --git a/storybook/stories/nodes/syncing/SyncingConnecting.stories.js b/storybook/stories/nodes/syncing/SyncingConnecting.stories.ts similarity index 100% rename from storybook/stories/nodes/syncing/SyncingConnecting.stories.js rename to storybook/stories/nodes/syncing/SyncingConnecting.stories.ts diff --git a/storybook/stories/nodes/updates/DataLayerMigration.stories.js b/storybook/stories/nodes/updates/DataLayerMigration.stories.ts similarity index 100% rename from storybook/stories/nodes/updates/DataLayerMigration.stories.js rename to storybook/stories/nodes/updates/DataLayerMigration.stories.ts diff --git a/storybook/stories/nodes/updates/Updates.stories.js b/storybook/stories/nodes/updates/Updates.stories.ts similarity index 100% rename from storybook/stories/nodes/updates/Updates.stories.js rename to storybook/stories/nodes/updates/Updates.stories.ts diff --git a/storybook/stories/notifications/Notifications.stories.js b/storybook/stories/notifications/Notifications.stories.ts similarity index 100% rename from storybook/stories/notifications/Notifications.stories.js rename to storybook/stories/notifications/Notifications.stories.ts diff --git a/storybook/stories/settings/general/General.stories.js b/storybook/stories/settings/general/General.stories.ts similarity index 100% rename from storybook/stories/settings/general/General.stories.js rename to storybook/stories/settings/general/General.stories.ts diff --git a/storybook/stories/settings/index.js b/storybook/stories/settings/index.ts similarity index 100% rename from storybook/stories/settings/index.js rename to storybook/stories/settings/index.ts diff --git a/storybook/stories/settings/language/Language.stories.js b/storybook/stories/settings/language/Language.stories.ts similarity index 100% rename from storybook/stories/settings/language/Language.stories.js rename to storybook/stories/settings/language/Language.stories.ts diff --git a/storybook/stories/settings/utils/SettingsWrapper.js b/storybook/stories/settings/utils/SettingsWrapper.ts similarity index 100% rename from storybook/stories/settings/utils/SettingsWrapper.js rename to storybook/stories/settings/utils/SettingsWrapper.ts diff --git a/storybook/stories/staking/CountdownParty.stories.js b/storybook/stories/staking/CountdownParty.stories.ts similarity index 100% rename from storybook/stories/staking/CountdownParty.stories.js rename to storybook/stories/staking/CountdownParty.stories.ts diff --git a/storybook/stories/staking/DelegationCenter.stories.js b/storybook/stories/staking/DelegationCenter.stories.ts similarity index 100% rename from storybook/stories/staking/DelegationCenter.stories.js rename to storybook/stories/staking/DelegationCenter.stories.ts diff --git a/storybook/stories/staking/DelegationSteps.stories.js b/storybook/stories/staking/DelegationSteps.stories.ts similarity index 100% rename from storybook/stories/staking/DelegationSteps.stories.js rename to storybook/stories/staking/DelegationSteps.stories.ts diff --git a/storybook/stories/staking/Epochs.stories.js b/storybook/stories/staking/Epochs.stories.ts similarity index 100% rename from storybook/stories/staking/Epochs.stories.js rename to storybook/stories/staking/Epochs.stories.ts diff --git a/storybook/stories/staking/Legacy.stories.js b/storybook/stories/staking/Legacy.stories.ts similarity index 100% rename from storybook/stories/staking/Legacy.stories.js rename to storybook/stories/staking/Legacy.stories.ts diff --git a/storybook/stories/staking/RedeemItnWallets.stories.js b/storybook/stories/staking/RedeemItnWallets.stories.ts similarity index 100% rename from storybook/stories/staking/RedeemItnWallets.stories.js rename to storybook/stories/staking/RedeemItnWallets.stories.ts diff --git a/storybook/stories/staking/Rewards.stories.js b/storybook/stories/staking/Rewards.stories.ts similarity index 100% rename from storybook/stories/staking/Rewards.stories.js rename to storybook/stories/staking/Rewards.stories.ts diff --git a/storybook/stories/staking/StakePools.stories.js b/storybook/stories/staking/StakePools.stories.ts similarity index 100% rename from storybook/stories/staking/StakePools.stories.js rename to storybook/stories/staking/StakePools.stories.ts diff --git a/storybook/stories/staking/StakePoolsTable.stories.js b/storybook/stories/staking/StakePoolsTable.stories.ts similarity index 100% rename from storybook/stories/staking/StakePoolsTable.stories.js rename to storybook/stories/staking/StakePoolsTable.stories.ts diff --git a/storybook/stories/staking/Staking.stories.js b/storybook/stories/staking/Staking.stories.ts similarity index 100% rename from storybook/stories/staking/Staking.stories.js rename to storybook/stories/staking/Staking.stories.ts diff --git a/storybook/stories/staking/StakingWrapper.js b/storybook/stories/staking/StakingWrapper.ts similarity index 100% rename from storybook/stories/staking/StakingWrapper.js rename to storybook/stories/staking/StakingWrapper.ts diff --git a/storybook/stories/staking/Undelegate.stories.js b/storybook/stories/staking/Undelegate.stories.ts similarity index 100% rename from storybook/stories/staking/Undelegate.stories.js rename to storybook/stories/staking/Undelegate.stories.ts diff --git a/storybook/stories/voting/Voting.stories.js b/storybook/stories/voting/Voting.stories.ts similarity index 100% rename from storybook/stories/voting/Voting.stories.js rename to storybook/stories/voting/Voting.stories.ts diff --git a/storybook/stories/wallets/_utils/CreateWalletScreens.js b/storybook/stories/wallets/_utils/CreateWalletScreens.ts similarity index 100% rename from storybook/stories/wallets/_utils/CreateWalletScreens.js rename to storybook/stories/wallets/_utils/CreateWalletScreens.ts diff --git a/storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.js b/storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.ts similarity index 100% rename from storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.js rename to storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.ts diff --git a/storybook/stories/wallets/_utils/HardwareWalletsWrapper.js b/storybook/stories/wallets/_utils/HardwareWalletsWrapper.ts similarity index 100% rename from storybook/stories/wallets/_utils/HardwareWalletsWrapper.js rename to storybook/stories/wallets/_utils/HardwareWalletsWrapper.ts diff --git a/storybook/stories/wallets/_utils/WalletWithNavigationLayout.js b/storybook/stories/wallets/_utils/WalletWithNavigationLayout.ts similarity index 100% rename from storybook/stories/wallets/_utils/WalletWithNavigationLayout.js rename to storybook/stories/wallets/_utils/WalletWithNavigationLayout.ts diff --git a/storybook/stories/wallets/_utils/WalletsTransactionsWrapper.js b/storybook/stories/wallets/_utils/WalletsTransactionsWrapper.ts similarity index 100% rename from storybook/stories/wallets/_utils/WalletsTransactionsWrapper.js rename to storybook/stories/wallets/_utils/WalletsTransactionsWrapper.ts diff --git a/storybook/stories/wallets/_utils/WalletsWrapper.js b/storybook/stories/wallets/_utils/WalletsWrapper.ts similarity index 100% rename from storybook/stories/wallets/_utils/WalletsWrapper.js rename to storybook/stories/wallets/_utils/WalletsWrapper.ts diff --git a/storybook/stories/wallets/_utils/defaultWalletProps.js b/storybook/stories/wallets/_utils/defaultWalletProps.ts similarity index 100% rename from storybook/stories/wallets/_utils/defaultWalletProps.js rename to storybook/stories/wallets/_utils/defaultWalletProps.ts diff --git a/storybook/stories/wallets/addWallet/Add.stories.js b/storybook/stories/wallets/addWallet/Add.stories.ts similarity index 100% rename from storybook/stories/wallets/addWallet/Add.stories.js rename to storybook/stories/wallets/addWallet/Add.stories.ts diff --git a/storybook/stories/wallets/addWallet/AddWallet.stories.js b/storybook/stories/wallets/addWallet/AddWallet.stories.ts similarity index 100% rename from storybook/stories/wallets/addWallet/AddWallet.stories.js rename to storybook/stories/wallets/addWallet/AddWallet.stories.ts diff --git a/storybook/stories/wallets/addWallet/Create.stories.js b/storybook/stories/wallets/addWallet/Create.stories.ts similarity index 100% rename from storybook/stories/wallets/addWallet/Create.stories.js rename to storybook/stories/wallets/addWallet/Create.stories.ts diff --git a/storybook/stories/wallets/addWallet/Import.stories.js b/storybook/stories/wallets/addWallet/Import.stories.ts similarity index 100% rename from storybook/stories/wallets/addWallet/Import.stories.js rename to storybook/stories/wallets/addWallet/Import.stories.ts diff --git a/storybook/stories/wallets/addWallet/Restore.stories.js b/storybook/stories/wallets/addWallet/Restore.stories.ts similarity index 100% rename from storybook/stories/wallets/addWallet/Restore.stories.js rename to storybook/stories/wallets/addWallet/Restore.stories.ts diff --git a/storybook/stories/wallets/addWallet/RestoreOld.stories.js b/storybook/stories/wallets/addWallet/RestoreOld.stories.ts similarity index 100% rename from storybook/stories/wallets/addWallet/RestoreOld.stories.js rename to storybook/stories/wallets/addWallet/RestoreOld.stories.ts diff --git a/storybook/stories/wallets/export/WalletExportToFile.stories.js b/storybook/stories/wallets/export/WalletExportToFile.stories.ts similarity index 100% rename from storybook/stories/wallets/export/WalletExportToFile.stories.js rename to storybook/stories/wallets/export/WalletExportToFile.stories.ts diff --git a/storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.js b/storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.ts similarity index 100% rename from storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.js rename to storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.ts diff --git a/storybook/stories/wallets/import/WalletImportFile.stories.js b/storybook/stories/wallets/import/WalletImportFile.stories.ts similarity index 100% rename from storybook/stories/wallets/import/WalletImportFile.stories.js rename to storybook/stories/wallets/import/WalletImportFile.stories.ts diff --git a/storybook/stories/wallets/index.js b/storybook/stories/wallets/index.ts similarity index 100% rename from storybook/stories/wallets/index.js rename to storybook/stories/wallets/index.ts diff --git a/storybook/stories/wallets/legacyWallets/LegacyNotification.stories.js b/storybook/stories/wallets/legacyWallets/LegacyNotification.stories.ts similarity index 100% rename from storybook/stories/wallets/legacyWallets/LegacyNotification.stories.js rename to storybook/stories/wallets/legacyWallets/LegacyNotification.stories.ts diff --git a/storybook/stories/wallets/legacyWallets/TransferFunds.stories.js b/storybook/stories/wallets/legacyWallets/TransferFunds.stories.ts similarity index 100% rename from storybook/stories/wallets/legacyWallets/TransferFunds.stories.js rename to storybook/stories/wallets/legacyWallets/TransferFunds.stories.ts diff --git a/storybook/stories/wallets/paperWallets/PaperWallets.stories.js b/storybook/stories/wallets/paperWallets/PaperWallets.stories.ts similarity index 100% rename from storybook/stories/wallets/paperWallets/PaperWallets.stories.js rename to storybook/stories/wallets/paperWallets/PaperWallets.stories.ts diff --git a/storybook/stories/wallets/receive/WalletReceive.stories.js b/storybook/stories/wallets/receive/WalletReceive.stories.ts similarity index 100% rename from storybook/stories/wallets/receive/WalletReceive.stories.js rename to storybook/stories/wallets/receive/WalletReceive.stories.ts diff --git a/storybook/stories/wallets/send/WalletSend.stories.js b/storybook/stories/wallets/send/WalletSend.stories.ts similarity index 100% rename from storybook/stories/wallets/send/WalletSend.stories.js rename to storybook/stories/wallets/send/WalletSend.stories.ts diff --git a/storybook/stories/wallets/setPassword/SetWalletPassword.stories.js b/storybook/stories/wallets/setPassword/SetWalletPassword.stories.ts similarity index 100% rename from storybook/stories/wallets/setPassword/SetWalletPassword.stories.js rename to storybook/stories/wallets/setPassword/SetWalletPassword.stories.ts diff --git a/storybook/stories/wallets/settings/PublicKeyQRCode.stories.js b/storybook/stories/wallets/settings/PublicKeyQRCode.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/PublicKeyQRCode.stories.js rename to storybook/stories/wallets/settings/PublicKeyQRCode.stories.ts diff --git a/storybook/stories/wallets/settings/WalletDelete.stories.js b/storybook/stories/wallets/settings/WalletDelete.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/WalletDelete.stories.js rename to storybook/stories/wallets/settings/WalletDelete.stories.ts diff --git a/storybook/stories/wallets/settings/WalletPublicKey.stories.js b/storybook/stories/wallets/settings/WalletPublicKey.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/WalletPublicKey.stories.js rename to storybook/stories/wallets/settings/WalletPublicKey.stories.ts diff --git a/storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.js b/storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.js rename to storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.ts diff --git a/storybook/stories/wallets/settings/WalletSettings.stories.js b/storybook/stories/wallets/settings/WalletSettings.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/WalletSettings.stories.js rename to storybook/stories/wallets/settings/WalletSettings.stories.ts diff --git a/storybook/stories/wallets/settings/WalletSettingsScreen.stories.js b/storybook/stories/wallets/settings/WalletSettingsScreen.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/WalletSettingsScreen.stories.js rename to storybook/stories/wallets/settings/WalletSettingsScreen.stories.ts diff --git a/storybook/stories/wallets/settings/WalletUnpair.stories.js b/storybook/stories/wallets/settings/WalletUnpair.stories.ts similarity index 100% rename from storybook/stories/wallets/settings/WalletUnpair.stories.js rename to storybook/stories/wallets/settings/WalletUnpair.stories.ts diff --git a/storybook/stories/wallets/summary/WalletSummary.stories.js b/storybook/stories/wallets/summary/WalletSummary.stories.ts similarity index 100% rename from storybook/stories/wallets/summary/WalletSummary.stories.js rename to storybook/stories/wallets/summary/WalletSummary.stories.ts diff --git a/storybook/stories/wallets/tokens/WalletTokens.stories.js b/storybook/stories/wallets/tokens/WalletTokens.stories.ts similarity index 100% rename from storybook/stories/wallets/tokens/WalletTokens.stories.js rename to storybook/stories/wallets/tokens/WalletTokens.stories.ts diff --git a/storybook/stories/wallets/tokens/WalletTokensList.stories.js b/storybook/stories/wallets/tokens/WalletTokensList.stories.ts similarity index 100% rename from storybook/stories/wallets/tokens/WalletTokensList.stories.js rename to storybook/stories/wallets/tokens/WalletTokensList.stories.ts diff --git a/storybook/stories/wallets/transactions/Transaction.stories.js b/storybook/stories/wallets/transactions/Transaction.stories.ts similarity index 100% rename from storybook/stories/wallets/transactions/Transaction.stories.js rename to storybook/stories/wallets/transactions/Transaction.stories.ts diff --git a/storybook/stories/wallets/transactions/TransactionMetadata.stories.js b/storybook/stories/wallets/transactions/TransactionMetadata.stories.ts similarity index 100% rename from storybook/stories/wallets/transactions/TransactionMetadata.stories.js rename to storybook/stories/wallets/transactions/TransactionMetadata.stories.ts diff --git a/storybook/stories/wallets/transactions/TransactionsList.stories.js b/storybook/stories/wallets/transactions/TransactionsList.stories.ts similarity index 100% rename from storybook/stories/wallets/transactions/TransactionsList.stories.js rename to storybook/stories/wallets/transactions/TransactionsList.stories.ts diff --git a/storybook/stories/wallets/transactions/Utxo.stories.js b/storybook/stories/wallets/transactions/Utxo.stories.ts similarity index 100% rename from storybook/stories/wallets/transactions/Utxo.stories.js rename to storybook/stories/wallets/transactions/Utxo.stories.ts diff --git a/tests/_utils/TestDecorator.js b/tests/_utils/TestDecorator.ts similarity index 100% rename from tests/_utils/TestDecorator.js rename to tests/_utils/TestDecorator.ts diff --git a/tests/addresses/e2e/steps/addresses.js b/tests/addresses/e2e/steps/addresses.ts similarity index 100% rename from tests/addresses/e2e/steps/addresses.js rename to tests/addresses/e2e/steps/addresses.ts diff --git a/tests/app/e2e/steps/about-dialog.js b/tests/app/e2e/steps/about-dialog.ts similarity index 100% rename from tests/app/e2e/steps/about-dialog.js rename to tests/app/e2e/steps/about-dialog.ts diff --git a/tests/app/e2e/steps/app-version-difference.js b/tests/app/e2e/steps/app-version-difference.ts similarity index 100% rename from tests/app/e2e/steps/app-version-difference.js rename to tests/app/e2e/steps/app-version-difference.ts diff --git a/tests/app/e2e/steps/cardano-node.js b/tests/app/e2e/steps/cardano-node.ts similarity index 100% rename from tests/app/e2e/steps/cardano-node.js rename to tests/app/e2e/steps/cardano-node.ts diff --git a/tests/app/e2e/steps/daedalus-process.js b/tests/app/e2e/steps/daedalus-process.ts similarity index 100% rename from tests/app/e2e/steps/daedalus-process.js rename to tests/app/e2e/steps/daedalus-process.ts diff --git a/tests/app/e2e/steps/data-layer-migration.js b/tests/app/e2e/steps/data-layer-migration.ts similarity index 100% rename from tests/app/e2e/steps/data-layer-migration.js rename to tests/app/e2e/steps/data-layer-migration.ts diff --git a/tests/app/e2e/steps/helpers.js b/tests/app/e2e/steps/helpers.ts similarity index 100% rename from tests/app/e2e/steps/helpers.js rename to tests/app/e2e/steps/helpers.ts diff --git a/tests/app/e2e/steps/inject-fault.js b/tests/app/e2e/steps/inject-fault.ts similarity index 100% rename from tests/app/e2e/steps/inject-fault.js rename to tests/app/e2e/steps/inject-fault.ts diff --git a/tests/app/e2e/steps/local-time-difference.js b/tests/app/e2e/steps/local-time-difference.ts similarity index 100% rename from tests/app/e2e/steps/local-time-difference.js rename to tests/app/e2e/steps/local-time-difference.ts diff --git a/tests/app/e2e/steps/no-disk-space.js b/tests/app/e2e/steps/no-disk-space.ts similarity index 100% rename from tests/app/e2e/steps/no-disk-space.js rename to tests/app/e2e/steps/no-disk-space.ts diff --git a/tests/app/e2e/steps/node-restart.js b/tests/app/e2e/steps/node-restart.ts similarity index 100% rename from tests/app/e2e/steps/node-restart.js rename to tests/app/e2e/steps/node-restart.ts diff --git a/tests/app/e2e/steps/trouble-connecting-notification.js b/tests/app/e2e/steps/trouble-connecting-notification.ts similarity index 100% rename from tests/app/e2e/steps/trouble-connecting-notification.js rename to tests/app/e2e/steps/trouble-connecting-notification.ts diff --git a/tests/app/e2e/steps/trouble-syncing-notification.js b/tests/app/e2e/steps/trouble-syncing-notification.ts similarity index 100% rename from tests/app/e2e/steps/trouble-syncing-notification.js rename to tests/app/e2e/steps/trouble-syncing-notification.ts diff --git a/tests/assets/unit/assets.spec.js b/tests/assets/unit/assets.spec.ts similarity index 100% rename from tests/assets/unit/assets.spec.js rename to tests/assets/unit/assets.spec.ts diff --git a/tests/common/e2e/steps/config.js b/tests/common/e2e/steps/config.ts similarity index 100% rename from tests/common/e2e/steps/config.js rename to tests/common/e2e/steps/config.ts diff --git a/tests/common/e2e/steps/helpers.js b/tests/common/e2e/steps/helpers.ts similarity index 100% rename from tests/common/e2e/steps/helpers.js rename to tests/common/e2e/steps/helpers.ts diff --git a/tests/common/unit/networks.spec.js b/tests/common/unit/networks.spec.ts similarity index 100% rename from tests/common/unit/networks.spec.js rename to tests/common/unit/networks.spec.ts diff --git a/tests/common/unit/steps/mnemonics-form-validation.steps.js b/tests/common/unit/steps/mnemonics-form-validation.steps.ts similarity index 100% rename from tests/common/unit/steps/mnemonics-form-validation.steps.js rename to tests/common/unit/steps/mnemonics-form-validation.steps.ts diff --git a/tests/delegation/e2e/steps/delegation-pending.js b/tests/delegation/e2e/steps/delegation-pending.ts similarity index 100% rename from tests/delegation/e2e/steps/delegation-pending.js rename to tests/delegation/e2e/steps/delegation-pending.ts diff --git a/tests/delegation/e2e/steps/delegation.js b/tests/delegation/e2e/steps/delegation.ts similarity index 100% rename from tests/delegation/e2e/steps/delegation.js rename to tests/delegation/e2e/steps/delegation.ts diff --git a/tests/delegation/e2e/steps/helpers.js b/tests/delegation/e2e/steps/helpers.ts similarity index 100% rename from tests/delegation/e2e/steps/helpers.js rename to tests/delegation/e2e/steps/helpers.ts diff --git a/tests/delegation/e2e/steps/rewards.js b/tests/delegation/e2e/steps/rewards.ts similarity index 100% rename from tests/delegation/e2e/steps/rewards.js rename to tests/delegation/e2e/steps/rewards.ts diff --git a/tests/delegation/e2e/steps/stake-pools.js b/tests/delegation/e2e/steps/stake-pools.ts similarity index 100% rename from tests/delegation/e2e/steps/stake-pools.js rename to tests/delegation/e2e/steps/stake-pools.ts diff --git a/tests/navigation/e2e/steps/general-settings.js b/tests/navigation/e2e/steps/general-settings.ts similarity index 100% rename from tests/navigation/e2e/steps/general-settings.js rename to tests/navigation/e2e/steps/general-settings.ts diff --git a/tests/navigation/e2e/steps/helpers.js b/tests/navigation/e2e/steps/helpers.ts similarity index 100% rename from tests/navigation/e2e/steps/helpers.js rename to tests/navigation/e2e/steps/helpers.ts diff --git a/tests/navigation/e2e/steps/sidebar.js b/tests/navigation/e2e/steps/sidebar.ts similarity index 100% rename from tests/navigation/e2e/steps/sidebar.js rename to tests/navigation/e2e/steps/sidebar.ts diff --git a/tests/news/e2e/steps/newsfeed-steps.js b/tests/news/e2e/steps/newsfeed-steps.ts similarity index 100% rename from tests/news/e2e/steps/newsfeed-steps.js rename to tests/news/e2e/steps/newsfeed-steps.ts diff --git a/tests/paper-wallets/e2e/steps/paper-wallets-certificate.js b/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts similarity index 100% rename from tests/paper-wallets/e2e/steps/paper-wallets-certificate.js rename to tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts diff --git a/tests/reporter.js b/tests/reporter.ts similarity index 100% rename from tests/reporter.js rename to tests/reporter.ts diff --git a/tests/settings/e2e/steps/basic-setup.js b/tests/settings/e2e/steps/basic-setup.ts similarity index 100% rename from tests/settings/e2e/steps/basic-setup.js rename to tests/settings/e2e/steps/basic-setup.ts diff --git a/tests/settings/e2e/steps/custom-formats.js b/tests/settings/e2e/steps/custom-formats.ts similarity index 100% rename from tests/settings/e2e/steps/custom-formats.js rename to tests/settings/e2e/steps/custom-formats.ts diff --git a/tests/settings/e2e/steps/general-settings.js b/tests/settings/e2e/steps/general-settings.ts similarity index 100% rename from tests/settings/e2e/steps/general-settings.js rename to tests/settings/e2e/steps/general-settings.ts diff --git a/tests/settings/e2e/steps/helpers.js b/tests/settings/e2e/steps/helpers.ts similarity index 100% rename from tests/settings/e2e/steps/helpers.js rename to tests/settings/e2e/steps/helpers.ts diff --git a/tests/settings/e2e/steps/select-language.js b/tests/settings/e2e/steps/select-language.ts similarity index 100% rename from tests/settings/e2e/steps/select-language.js rename to tests/settings/e2e/steps/select-language.ts diff --git a/tests/settings/e2e/steps/settings.js b/tests/settings/e2e/steps/settings.ts similarity index 100% rename from tests/settings/e2e/steps/settings.js rename to tests/settings/e2e/steps/settings.ts diff --git a/tests/settings/e2e/steps/terms-of-use.js b/tests/settings/e2e/steps/terms-of-use.ts similarity index 100% rename from tests/settings/e2e/steps/terms-of-use.js rename to tests/settings/e2e/steps/terms-of-use.ts diff --git a/tests/settings/unit/steps/file-names.js b/tests/settings/unit/steps/file-names.ts similarity index 100% rename from tests/settings/unit/steps/file-names.js rename to tests/settings/unit/steps/file-names.ts diff --git a/tests/setup-common.js b/tests/setup-common.ts similarity index 100% rename from tests/setup-common.js rename to tests/setup-common.ts diff --git a/tests/setup-e2e.js b/tests/setup-e2e.ts similarity index 100% rename from tests/setup-e2e.js rename to tests/setup-e2e.ts diff --git a/tests/transactions/e2e/steps/transactions.js b/tests/transactions/e2e/steps/transactions.ts similarity index 100% rename from tests/transactions/e2e/steps/transactions.js rename to tests/transactions/e2e/steps/transactions.ts diff --git a/tests/transactions/e2e/steps/utxos.js b/tests/transactions/e2e/steps/utxos.ts similarity index 100% rename from tests/transactions/e2e/steps/utxos.js rename to tests/transactions/e2e/steps/utxos.ts diff --git a/tests/transactions/unit/steps/helpers.js b/tests/transactions/unit/steps/helpers.ts similarity index 100% rename from tests/transactions/unit/steps/helpers.js rename to tests/transactions/unit/steps/helpers.ts diff --git a/tests/transactions/unit/steps/utxos-chart.js b/tests/transactions/unit/steps/utxos-chart.ts similarity index 100% rename from tests/transactions/unit/steps/utxos-chart.js rename to tests/transactions/unit/steps/utxos-chart.ts diff --git a/tests/types.js b/tests/types.ts similarity index 100% rename from tests/types.js rename to tests/types.ts diff --git a/tests/wallets/e2e/steps/balance-wallets-notification.js b/tests/wallets/e2e/steps/balance-wallets-notification.ts similarity index 100% rename from tests/wallets/e2e/steps/balance-wallets-notification.js rename to tests/wallets/e2e/steps/balance-wallets-notification.ts diff --git a/tests/wallets/e2e/steps/create-wallet.js b/tests/wallets/e2e/steps/create-wallet.ts similarity index 100% rename from tests/wallets/e2e/steps/create-wallet.js rename to tests/wallets/e2e/steps/create-wallet.ts diff --git a/tests/wallets/e2e/steps/delete-wallet.js b/tests/wallets/e2e/steps/delete-wallet.ts similarity index 100% rename from tests/wallets/e2e/steps/delete-wallet.js rename to tests/wallets/e2e/steps/delete-wallet.ts diff --git a/tests/wallets/e2e/steps/helpers.js b/tests/wallets/e2e/steps/helpers.ts similarity index 100% rename from tests/wallets/e2e/steps/helpers.js rename to tests/wallets/e2e/steps/helpers.ts diff --git a/tests/wallets/e2e/steps/import-and-migrate-wallets.js b/tests/wallets/e2e/steps/import-and-migrate-wallets.ts similarity index 100% rename from tests/wallets/e2e/steps/import-and-migrate-wallets.js rename to tests/wallets/e2e/steps/import-and-migrate-wallets.ts diff --git a/tests/wallets/e2e/steps/recovery-phrase-verification-steps.js b/tests/wallets/e2e/steps/recovery-phrase-verification-steps.ts similarity index 100% rename from tests/wallets/e2e/steps/recovery-phrase-verification-steps.js rename to tests/wallets/e2e/steps/recovery-phrase-verification-steps.ts diff --git a/tests/wallets/e2e/steps/restore-wallet.js b/tests/wallets/e2e/steps/restore-wallet.ts similarity index 100% rename from tests/wallets/e2e/steps/restore-wallet.js rename to tests/wallets/e2e/steps/restore-wallet.ts diff --git a/tests/wallets/e2e/steps/transfer-funds-wizard.js b/tests/wallets/e2e/steps/transfer-funds-wizard.ts similarity index 100% rename from tests/wallets/e2e/steps/transfer-funds-wizard.js rename to tests/wallets/e2e/steps/transfer-funds-wizard.ts diff --git a/tests/wallets/e2e/steps/wallet-not-responding.js b/tests/wallets/e2e/steps/wallet-not-responding.ts similarity index 100% rename from tests/wallets/e2e/steps/wallet-not-responding.js rename to tests/wallets/e2e/steps/wallet-not-responding.ts diff --git a/tests/wallets/e2e/steps/wallets-limit.js b/tests/wallets/e2e/steps/wallets-limit.ts similarity index 100% rename from tests/wallets/e2e/steps/wallets-limit.js rename to tests/wallets/e2e/steps/wallets-limit.ts diff --git a/tests/wallets/e2e/steps/wallets-ordering.js b/tests/wallets/e2e/steps/wallets-ordering.ts similarity index 100% rename from tests/wallets/e2e/steps/wallets-ordering.js rename to tests/wallets/e2e/steps/wallets-ordering.ts diff --git a/tests/wallets/e2e/steps/wallets.js b/tests/wallets/e2e/steps/wallets.ts similarity index 100% rename from tests/wallets/e2e/steps/wallets.js rename to tests/wallets/e2e/steps/wallets.ts diff --git a/tests/wallets/unit/steps/mnemonics.js b/tests/wallets/unit/steps/mnemonics.ts similarity index 100% rename from tests/wallets/unit/steps/mnemonics.js rename to tests/wallets/unit/steps/mnemonics.ts diff --git a/tests/wallets/unit/steps/spending-password.js b/tests/wallets/unit/steps/spending-password.ts similarity index 100% rename from tests/wallets/unit/steps/spending-password.js rename to tests/wallets/unit/steps/spending-password.ts diff --git a/tests/wallets/unit/wallet-utils.spec.js b/tests/wallets/unit/wallet-utils.spec.ts similarity index 100% rename from tests/wallets/unit/wallet-utils.spec.js rename to tests/wallets/unit/wallet-utils.spec.ts diff --git a/translations/translation-runner.js b/translations/translation-runner.ts similarity index 100% rename from translations/translation-runner.js rename to translations/translation-runner.ts diff --git a/utils/api-importer/byron-wallet-importer.js b/utils/api-importer/byron-wallet-importer.ts similarity index 100% rename from utils/api-importer/byron-wallet-importer.js rename to utils/api-importer/byron-wallet-importer.ts diff --git a/utils/api-importer/itn-byron-wallet-importer.js b/utils/api-importer/itn-byron-wallet-importer.ts similarity index 100% rename from utils/api-importer/itn-byron-wallet-importer.js rename to utils/api-importer/itn-byron-wallet-importer.ts diff --git a/utils/api-importer/itn-shelley-wallet-importer.js b/utils/api-importer/itn-shelley-wallet-importer.ts similarity index 100% rename from utils/api-importer/itn-shelley-wallet-importer.js rename to utils/api-importer/itn-shelley-wallet-importer.ts diff --git a/utils/api-importer/mary-wallet-importer.js b/utils/api-importer/mary-wallet-importer.ts similarity index 100% rename from utils/api-importer/mary-wallet-importer.js rename to utils/api-importer/mary-wallet-importer.ts diff --git a/utils/api-importer/mnemonics.js b/utils/api-importer/mnemonics.ts similarity index 100% rename from utils/api-importer/mnemonics.js rename to utils/api-importer/mnemonics.ts diff --git a/utils/api-importer/shelley-wallet-importer.js b/utils/api-importer/shelley-wallet-importer.ts similarity index 100% rename from utils/api-importer/shelley-wallet-importer.js rename to utils/api-importer/shelley-wallet-importer.ts diff --git a/utils/api-importer/yoroi-wallet-importer.js b/utils/api-importer/yoroi-wallet-importer.ts similarity index 100% rename from utils/api-importer/yoroi-wallet-importer.js rename to utils/api-importer/yoroi-wallet-importer.ts diff --git a/utils/create-news-verification-hashes/index.js b/utils/create-news-verification-hashes/index.ts similarity index 100% rename from utils/create-news-verification-hashes/index.js rename to utils/create-news-verification-hashes/index.ts diff --git a/utils/lockfile-checker/index.js b/utils/lockfile-checker/index.ts similarity index 100% rename from utils/lockfile-checker/index.js rename to utils/lockfile-checker/index.ts From b859f8ad77cc0bdfe8fd7fe1d90e71c9700ed1da Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:33:41 +0000 Subject: [PATCH 027/204] [DDW-773] converted files returning react components to tsx extension --- source/renderer/app/{App.ts => App.tsx} | 0 source/renderer/app/{Routes.ts => Routes.tsx} | 0 source/renderer/app/{ThemeManager.ts => ThemeManager.tsx} | 0 .../renderer/app/{WindowSizeManager.ts => WindowSizeManager.tsx} | 0 .../appUpdate/{AppUpdateOverlay.ts => AppUpdateOverlay.tsx} | 0 source/renderer/app/components/assets/{Asset.ts => Asset.tsx} | 0 .../app/components/assets/{AssetAmount.ts => AssetAmount.tsx} | 0 .../app/components/assets/{AssetContent.ts => AssetContent.tsx} | 0 .../assets/{AssetSettingsDialog.ts => AssetSettingsDialog.tsx} | 0 ...ransactionConfirmation.ts => AssetTransactionConfirmation.tsx} | 0 ...ansactionConfirmation.ts => AssetsTransactionConfirmation.tsx} | 0 .../{DappTransactionRequest.ts => DappTransactionRequest.tsx} | 0 .../{HardwareWalletStatus.ts => HardwareWalletStatus.tsx} | 0 .../components/layout/{CenteredLayout.ts => CenteredLayout.tsx} | 0 .../app/components/layout/{SidebarLayout.ts => SidebarLayout.tsx} | 0 source/renderer/app/components/layout/{TopBar.ts => TopBar.tsx} | 0 .../app/components/layout/{TopBarLayout.ts => TopBarLayout.tsx} | 0 .../{VerticalFlexContainer.ts => VerticalFlexContainer.tsx} | 0 .../{NoDiskSpaceError.ts => NoDiskSpaceError.tsx} | 0 .../syncing-connecting/{LogosDisplay.ts => LogosDisplay.tsx} | 0 .../syncing-connecting/{ReportIssue.ts => ReportIssue.tsx} | 0 .../syncing-connecting/{StatusIcons.ts => StatusIcons.tsx} | 0 .../{SyncingConnecting.ts => SyncingConnecting.tsx} | 0 ...ingConnectingBackground.ts => SyncingConnectingBackground.tsx} | 0 .../{SyncingConnectingStatus.ts => SyncingConnectingStatus.tsx} | 0 .../system-time-error/{SystemTimeError.ts => SystemTimeError.tsx} | 0 .../app/components/navigation/{NavButton.ts => NavButton.tsx} | 0 .../app/components/navigation/{NavDropdown.ts => NavDropdown.tsx} | 0 .../app/components/navigation/{Navigation.ts => Navigation.tsx} | 0 .../app/components/news/{AlertsOverlay.ts => AlertsOverlay.tsx} | 0 .../components/news/{IncidentOverlay.ts => IncidentOverlay.tsx} | 0 source/renderer/app/components/news/{NewsFeed.ts => NewsFeed.tsx} | 0 source/renderer/app/components/news/{NewsItem.ts => NewsItem.tsx} | 0 .../app/components/news/{UpdateItem.ts => UpdateItem.tsx} | 0 .../{InlineNotification.ts => InlineNotification.tsx} | 0 .../components/notifications/{LegacyBadge.ts => LegacyBadge.tsx} | 0 .../{LegacyNotification.ts => LegacyNotification.tsx} | 0 .../notifications/{Notification.ts => Notification.tsx} | 0 .../{NotificationActions.ts => NotificationActions.tsx} | 0 .../{RestoreNotification.ts => RestoreNotification.tsx} | 0 .../{DataLayerMigrationForm.ts => DataLayerMigrationForm.tsx} | 0 .../initial-settings/{InitialSettings.ts => InitialSettings.tsx} | 0 .../terms-of-use/{TermsOfUseForm.ts => TermsOfUseForm.tsx} | 0 .../terms-of-use/{TermsOfUseText.ts => TermsOfUseText.tsx} | 0 .../components/settings/{SettingsLayout.ts => SettingsLayout.tsx} | 0 .../categories/{DisplaySettings.ts => DisplaySettings.tsx} | 0 .../categories/{GeneralSettings.ts => GeneralSettings.tsx} | 0 .../categories/{SecuritySettings.ts => SecuritySettings.tsx} | 0 .../categories/{StakePoolsSettings.ts => StakePoolsSettings.tsx} | 0 .../categories/{SupportSettings.ts => SupportSettings.tsx} | 0 .../categories/{TermsOfUseSettings.ts => TermsOfUseSettings.tsx} | 0 .../categories/{WalletsSettings.ts => WalletsSettings.tsx} | 0 .../settings/menu/{SecurityMenuItem.ts => SecurityMenuItem.tsx} | 0 .../settings/menu/{SettingsMenu.ts => SettingsMenu.tsx} | 0 .../settings/menu/{SettingsMenuItem.ts => SettingsMenuItem.tsx} | 0 .../renderer/app/components/sidebar/{Sidebar.ts => Sidebar.tsx} | 0 .../sidebar/{SidebarCategory.ts => SidebarCategory.tsx} | 0 ...debarCategoryNetworkInfo.ts => SidebarCategoryNetworkInfo.tsx} | 0 .../{SidebarCategoryWrapper.ts => SidebarCategoryWrapper.tsx} | 0 .../app/components/sidebar/{SidebarMenu.ts => SidebarMenu.tsx} | 0 .../{SidebarWalletMenuItem.ts => SidebarWalletMenuItem.tsx} | 0 .../{SidebarWalletsMenu.spec.ts => SidebarWalletsMenu.spec.tsx} | 0 .../wallets/{SidebarWalletsMenu.ts => SidebarWalletsMenu.tsx} | 0 .../sidebar/wallets/{WalletSearch.ts => WalletSearch.tsx} | 0 .../sidebar/wallets/{WalletSortButton.ts => WalletSortButton.tsx} | 0 .../splash/{SplashNetworkFlight.ts => SplashNetworkFlight.tsx} | 0 .../staking/{StakingUnavailable.ts => StakingUnavailable.tsx} | 0 .../countdown/{StakingCountdown.ts => StakingCountdown.tsx} | 0 .../{DelegationCenter.ts => DelegationCenter.tsx} | 0 .../{DelegationCenterBody.ts => DelegationCenterBody.tsx} | 0 .../{DelegationCenterHeader.ts => DelegationCenterHeader.tsx} | 0 ...DelegationCenterNoWallets.ts => DelegationCenterNoWallets.tsx} | 0 .../staking/delegation-center/{DonutRing.ts => DonutRing.tsx} | 0 .../delegation-center/{DropdownMenu.ts => DropdownMenu.tsx} | 0 .../staking/delegation-center/{WalletRow.ts => WalletRow.tsx} | 0 .../staking/delegation-center/{helpers.ts => helpers.tsx} | 0 .../widgets/{WalletAmount.ts => WalletAmount.tsx} | 0 ...gationSetupWizardDialog.ts => DelegationSetupWizardDialog.tsx} | 0 ...takePoolDialog.ts => DelegationStepsChooseStakePoolDialog.tsx} | 0 ...hooseWalletDialog.ts => DelegationStepsChooseWalletDialog.tsx} | 0 ...onfirmationDialog.ts => DelegationStepsConfirmationDialog.tsx} | 0 ...legationStepsIntroDialog.ts => DelegationStepsIntroDialog.tsx} | 0 ...otAvailableDialog.ts => DelegationStepsNotAvailableDialog.tsx} | 0 ...tionStepsSuccessDialog.ts => DelegationStepsSuccessDialog.tsx} | 0 .../{OversaturationText.ts => OversaturationText.tsx} | 0 .../staking/epochs/{StakingEpochs.ts => StakingEpochs.tsx} | 0 ...pochsCurrentEpochData.ts => StakingEpochsCurrentEpochData.tsx} | 0 .../{StakingEpochsDataTable.ts => StakingEpochsDataTable.tsx} | 0 .../epochs/{StakingEpochsNoData.ts => StakingEpochsNoData.tsx} | 0 ...chsPreviousEpochData.ts => StakingEpochsPreviousEpochData.tsx} | 0 .../components/staking/info/{StakingInfo.ts => StakingInfo.tsx} | 0 .../info/{StakingInfoCountdown.ts => StakingInfoCountdown.tsx} | 0 .../{StakingWithNavigation.ts => StakingWithNavigation.tsx} | 0 .../legacy/{BlockGenerationInfo.ts => BlockGenerationInfo.tsx} | 0 .../app/components/staking/legacy/{Staking.ts => Staking.tsx} | 0 .../staking/legacy/{StakingChart.ts => StakingChart.tsx} | 0 .../legacy/{StakingChartTooltip.ts => StakingChartTooltip.tsx} | 0 .../{StakingChartTooltipItem.ts => StakingChartTooltipItem.tsx} | 0 .../staking/legacy/{StakingSwitch.ts => StakingSwitch.tsx} | 0 .../legacy/{StakingSystemState.ts => StakingSystemState.tsx} | 0 ...StakingSystemStateElement.ts => StakingSystemStateElement.tsx} | 0 .../navigation/{StakingNavigation.ts => StakingNavigation.tsx} | 0 .../redeem-itn-rewards/{LoadingOverlay.ts => LoadingOverlay.tsx} | 0 .../{NoWalletsDialog.ts => NoWalletsDialog.tsx} | 0 ...mptionUnavailableDialog.ts => RedemptionUnavailableDialog.tsx} | 0 .../{Step1ConfigurationDialog.ts => Step1ConfigurationDialog.tsx} | 0 .../{Step2ConfirmationDialog.ts => Step2ConfirmationDialog.tsx} | 0 .../{Step3FailureDialog.ts => Step3FailureDialog.tsx} | 0 .../{Step3SuccessDialog.ts => Step3SuccessDialog.tsx} | 0 .../staking/rewards/{RewardAmount.ts => RewardAmount.tsx} | 0 .../staking/rewards/{StakingRewards.ts => StakingRewards.tsx} | 0 .../staking/stake-pools/{StakePools.ts => StakePools.tsx} | 0 .../staking/stake-pools/{StakePoolsList.ts => StakePoolsList.tsx} | 0 .../stake-pools/{StakePoolsRanking.ts => StakePoolsRanking.tsx} | 0 .../{StakePoolsRankingLoader.ts => StakePoolsRankingLoader.tsx} | 0 .../stake-pools/{StakePoolsSearch.ts => StakePoolsSearch.tsx} | 0 .../stake-pools/{StakePoolsTable.ts => StakePoolsTable.tsx} | 0 .../{StakePoolsTableBody.ts => StakePoolsTableBody.tsx} | 0 .../{StakePoolsTableHeader.ts => StakePoolsTableHeader.tsx} | 0 .../staking/widgets/{PoolPopOver.ts => PoolPopOver.tsx} | 0 .../components/staking/widgets/{ThumbPool.ts => ThumbPool.tsx} | 0 .../staking/widgets/{ThumbPoolContent.ts => ThumbPoolContent.tsx} | 0 .../widgets/{ThumbSelectedPool.ts => ThumbSelectedPool.tsx} | 0 .../staking/widgets/{TooltipPool.ts => TooltipPool.tsx} | 0 source/renderer/app/components/static/{About.ts => About.tsx} | 0 .../status/{DaedalusDiagnostics.ts => DaedalusDiagnostics.tsx} | 0 .../voting/{VotingFooterLinks.ts => VotingFooterLinks.tsx} | 0 .../components/voting/{VotingNoWallets.ts => VotingNoWallets.tsx} | 0 ...strationDialogWizard.ts => VotingRegistrationDialogWizard.tsx} | 0 .../voting/{VotingUnavailable.ts => VotingUnavailable.tsx} | 0 .../components/voting/voting-info/{AppStore.ts => AppStore.tsx} | 0 .../components/voting/voting-info/{Headline.ts => Headline.tsx} | 0 .../voting/voting-info/{RegisterToVote.ts => RegisterToVote.tsx} | 0 .../voting/voting-info/{ResultsPhase.ts => ResultsPhase.tsx} | 0 .../voting/voting-info/{SnapshotPhase.ts => SnapshotPhase.tsx} | 0 .../voting/voting-info/{TallyingPhase.ts => TallyingPhase.tsx} | 0 .../voting/voting-info/{VotingInfo.ts => VotingInfo.tsx} | 0 .../voting/voting-info/{VotingPhase.ts => VotingPhase.tsx} | 0 ...epsChooseWallet.ts => VotingRegistrationStepsChooseWallet.tsx} | 0 ...strationStepsConfirm.ts => VotingRegistrationStepsConfirm.tsx} | 0 ...epsEnterPinCode.ts => VotingRegistrationStepsEnterPinCode.tsx} | 0 ...gistrationStepsQrCode.ts => VotingRegistrationStepsQrCode.tsx} | 0 ...rationStepsRegister.ts => VotingRegistrationStepsRegister.tsx} | 0 .../widgets/{ConfirmationDialog.ts => ConfirmationDialog.tsx} | 0 .../{VotingRegistrationDialog.ts => VotingRegistrationDialog.tsx} | 0 .../app/components/wallet/{WalletAdd.ts => WalletAdd.tsx} | 0 .../wallet/{WalletBackupDialog.ts => WalletBackupDialog.tsx} | 0 .../wallet/{WalletConnectDialog.ts => WalletConnectDialog.tsx} | 0 .../wallet/{WalletCreateDialog.ts => WalletCreateDialog.tsx} | 0 .../wallet/{WalletRestoreDialog.ts => WalletRestoreDialog.tsx} | 0 .../wallet/{WalletSendForm.spec.ts => WalletSendForm.spec.tsx} | 0 .../components/wallet/{WalletSendForm.ts => WalletSendForm.tsx} | 0 ...ivacyWarningDialog.ts => WalletBackupPrivacyWarningDialog.tsx} | 0 ...lletRecoveryInstructions.ts => WalletRecoveryInstructions.tsx} | 0 ...raseDisplayDialog.ts => WalletRecoveryPhraseDisplayDialog.tsx} | 0 ...ryPhraseEntryDialog.ts => WalletRecoveryPhraseEntryDialog.tsx} | 0 ...RecoveryPhraseMnemonic.ts => WalletRecoveryPhraseMnemonic.tsx} | 0 .../{WalletFileImportDialog.ts => WalletFileImportDialog.tsx} | 0 .../layouts/{WalletWithNavigation.ts => WalletWithNavigation.tsx} | 0 .../navigation/{WalletNavigation.ts => WalletNavigation.tsx} | 0 .../wallet/not-responding/{NotResponding.ts => NotResponding.tsx} | 0 .../{CompletionDialog.ts => CompletionDialog.tsx} | 0 .../{ConfirmationDialog.ts => ConfirmationDialog.tsx} | 0 .../{InstructionsDialog.ts => InstructionsDialog.tsx} | 0 .../paper-wallet-certificate/{PrintDialog.ts => PrintDialog.tsx} | 0 .../{SecuringPasswordDialog.ts => SecuringPasswordDialog.tsx} | 0 .../{VerificationDialog.ts => VerificationDialog.tsx} | 0 .../wallet/receive/{AddressActions.ts => AddressActions.tsx} | 0 .../wallet/receive/{AddressRandom.ts => AddressRandom.tsx} | 0 .../receive/{AddressSequential.ts => AddressSequential.tsx} | 0 .../receive/{VirtualAddressesList.ts => VirtualAddressesList.tsx} | 0 .../receive/{WalletReceiveDialog.ts => WalletReceiveDialog.tsx} | 0 .../receive/{WalletReceiveRandom.ts => WalletReceiveRandom.tsx} | 0 .../{WalletReceiveSequential.ts => WalletReceiveSequential.tsx} | 0 .../components/wallet/send-form/{AssetInput.ts => AssetInput.tsx} | 0 ...nfirmationDialog.ts => WalletSendAssetsConfirmationDialog.tsx} | 0 ...SendConfirmationDialog.ts => WalletSendConfirmationDialog.tsx} | 0 ...SpendingPasswordDialog.ts => ChangeSpendingPasswordDialog.tsx} | 0 .../{DelegateWalletButton.ts => DelegateWalletButton.tsx} | 0 .../wallet/settings/{DeleteWallet.ts => DeleteWallet.tsx} | 0 .../{DeleteWalletConfirmation.ts => DeleteWalletConfirmation.tsx} | 0 .../{ExportWalletToFileDialog.ts => ExportWalletToFileDialog.tsx} | 0 .../wallet/settings/{ICOPublicKeyBox.ts => ICOPublicKeyBox.tsx} | 0 .../settings/{ICOPublicKeyDialog.ts => ICOPublicKeyDialog.tsx} | 0 .../{ICOPublicKeyQRCodeDialog.ts => ICOPublicKeyQRCodeDialog.tsx} | 0 .../wallet/settings/{PublicKeyField.ts => PublicKeyField.tsx} | 0 .../settings/{PublicKeyFieldSkin.ts => PublicKeyFieldSkin.tsx} | 0 .../settings/{SetWalletPassword.ts => SetWalletPassword.tsx} | 0 .../{UndelegateWalletButton.ts => UndelegateWalletButton.tsx} | 0 ...nfirmationDialog.ts => UndelegateWalletConfirmationDialog.tsx} | 0 ...teWalletSuccessDialog.ts => UndelegateWalletSuccessDialog.tsx} | 0 .../wallet/settings/{UnpairWallet.ts => UnpairWallet.tsx} | 0 .../settings/{WalletPublicKeyBox.ts => WalletPublicKeyBox.tsx} | 0 .../{WalletPublicKeyDialog.ts => WalletPublicKeyDialog.tsx} | 0 ...etPublicKeyQRCodeDialog.ts => WalletPublicKeyQRCodeDialog.tsx} | 0 ...ryPhraseStep1Dialog.ts => WalletRecoveryPhraseStep1Dialog.tsx} | 0 ...ryPhraseStep2Dialog.ts => WalletRecoveryPhraseStep2Dialog.tsx} | 0 ...ryPhraseStep3Dialog.ts => WalletRecoveryPhraseStep3Dialog.tsx} | 0 ...ryPhraseStep4Dialog.ts => WalletRecoveryPhraseStep4Dialog.tsx} | 0 ...cationWidget.ts => WalletRecoveryPhraseVerificationWidget.tsx} | 0 .../wallet/settings/{WalletSettings.ts => WalletSettings.tsx} | 0 ...lletSettingsRemoveButton.ts => WalletSettingsRemoveButton.tsx} | 0 ...mationDialog.ts => WalletSettingsRemoveConfirmationDialog.tsx} | 0 .../wallet/skins/{AmountInputSkin.ts => AmountInputSkin.tsx} | 0 .../wallet/summary/{WalletSummary.ts => WalletSummary.tsx} | 0 .../summary/{WalletSummaryAsset.ts => WalletSummaryAsset.tsx} | 0 .../{WalletSummaryCurrency.ts => WalletSummaryCurrency.tsx} | 0 .../summary/{WalletSummaryHeader.ts => WalletSummaryHeader.tsx} | 0 .../wallet-no-tokens/{WalletNoTokens.ts => WalletNoTokens.tsx} | 0 ...WalletTokenPicker.stories.ts => WalletTokenPicker.stories.tsx} | 0 .../{WalletTokenPicker.ts => WalletTokenPicker.tsx} | 0 ...WalletTokenPickerCheckbox.ts => WalletTokenPickerCheckbox.tsx} | 0 .../tokens/wallet-token-picker/{hooks.spec.ts => hooks.spec.tsx} | 0 .../tokens/wallet-token/{WalletToken.ts => WalletToken.tsx} | 0 .../wallet-token/{WalletTokenFooter.ts => WalletTokenFooter.tsx} | 0 .../wallet-token/{WalletTokenHeader.ts => WalletTokenHeader.tsx} | 0 .../{WalletTokensList.ts => WalletTokensList.tsx} | 0 .../{WalletTokensSearch.ts => WalletTokensSearch.tsx} | 0 .../tokens/wallet-tokens/{WalletTokens.ts => WalletTokens.tsx} | 0 .../{CancelTransactionButton.ts => CancelTransactionButton.tsx} | 0 ...firmationDialog.ts => CancelTransactionConfirmationDialog.tsx} | 0 .../wallet/transactions/{FilterButton.ts => FilterButton.tsx} | 0 .../wallet/transactions/{FilterDialog.ts => FilterDialog.tsx} | 0 .../transactions/{FilterResultInfo.ts => FilterResultInfo.tsx} | 0 .../wallet/transactions/{Transaction.ts => Transaction.tsx} | 0 .../{TransactionTypeIcon.ts => TransactionTypeIcon.tsx} | 0 .../{WalletNoTransactions.ts => WalletNoTransactions.tsx} | 0 .../{WalletTransactions.ts => WalletTransactions.tsx} | 0 .../{WalletTransactionsHeader.ts => WalletTransactionsHeader.tsx} | 0 .../{WalletTransactionsList.ts => WalletTransactionsList.tsx} | 0 .../{WalletTransactionsSearch.ts => WalletTransactionsSearch.tsx} | 0 .../metadata/{MetadataValueView.ts => MetadataValueView.tsx} | 0 .../{TransactionMetadataView.ts => TransactionMetadataView.tsx} | 0 .../{SimpleTransactionList.ts => SimpleTransactionList.tsx} | 0 .../{VirtualTransactionList.ts => VirtualTransactionList.tsx} | 0 .../{TransferFundsStep1Dialog.ts => TransferFundsStep1Dialog.tsx} | 0 .../{TransferFundsStep2Dialog.ts => TransferFundsStep2Dialog.tsx} | 0 .../app/components/wallet/utxo/{WalletUtxo.ts => WalletUtxo.tsx} | 0 .../wallet/utxo/{WalletUtxoCursor.ts => WalletUtxoCursor.tsx} | 0 .../utxo/{WalletUtxoDescription.ts => WalletUtxoDescription.tsx} | 0 .../wallet/utxo/{WalletUtxoTick.ts => WalletUtxoTick.tsx} | 0 .../wallet/utxo/{WalletUtxoTooltip.ts => WalletUtxoTooltip.tsx} | 0 .../wallet/wallet-create/{ConfigDialog.ts => ConfigDialog.tsx} | 0 .../wallet/wallet-create/{HashDialog.ts => HashDialog.tsx} | 0 .../{InstructionsDialog.ts => InstructionsDialog.tsx} | 0 .../wallet-create/{MnemonicsDialog.ts => MnemonicsDialog.tsx} | 0 .../wallet-create/{TemplateDialog.ts => TemplateDialog.tsx} | 0 .../wallet-create/{ValidateDialog.ts => ValidateDialog.tsx} | 0 .../{WalletCreateDialog.ts => WalletCreateDialog.tsx} | 0 .../wallet-create/{WalletCreateSteps.ts => WalletCreateSteps.tsx} | 0 .../{WalletImportFileDialog.ts => WalletImportFileDialog.tsx} | 0 .../{WalletSelectImportDialog.ts => WalletSelectImportDialog.tsx} | 0 .../{ConfigurationDialog.ts => ConfigurationDialog.tsx} | 0 .../wallet-restore/{MnemonicsDialog.ts => MnemonicsDialog.tsx} | 0 .../wallet/wallet-restore/{SuccessDialog.ts => SuccessDialog.tsx} | 0 .../wallet-restore/{WalletTypeDialog.ts => WalletTypeDialog.tsx} | 0 .../widgets/{ConfirmationDialog.ts => ConfirmationDialog.tsx} | 0 .../widgets/{WalletRestoreDialog.ts => WalletRestoreDialog.tsx} | 0 .../widgets/{WalletRestoreSteps.ts => WalletRestoreSteps.tsx} | 0 .../widgets/{BackToTopButton.ts => BackToTopButton.tsx} | 0 .../widgets/{BigButtonForDialogs.ts => BigButtonForDialogs.tsx} | 0 .../app/components/widgets/{BorderedBox.ts => BorderedBox.tsx} | 0 .../app/components/widgets/{ButtonLink.ts => ButtonLink.tsx} | 0 .../widgets/{CountdownWidget.ts => CountdownWidget.tsx} | 0 source/renderer/app/components/widgets/{Dialog.ts => Dialog.tsx} | 0 .../widgets/{DialogBackButton.ts => DialogBackButton.tsx} | 0 .../widgets/{DialogCloseButton.ts => DialogCloseButton.tsx} | 0 .../widgets/{ExternalLinkButton.ts => ExternalLinkButton.tsx} | 0 ...tedHTMLMessageWithLink.ts => FormattedHTMLMessageWithLink.tsx} | 0 .../{FullyDecentralizedEffect.ts => FullyDecentralizedEffect.tsx} | 0 .../components/widgets/{LoadingSpinner.ts => LoadingSpinner.tsx} | 0 .../app/components/widgets/{NewsFeedIcon.ts => NewsFeedIcon.tsx} | 0 .../widgets/{NodeSyncStatusIcon.ts => NodeSyncStatusIcon.tsx} | 0 .../app/components/widgets/{ProgressBar.ts => ProgressBar.tsx} | 0 .../widgets/{ProgressBarLarge.ts => ProgressBarLarge.tsx} | 0 .../renderer/app/components/widgets/{RadioSet.ts => RadioSet.tsx} | 0 source/renderer/app/components/widgets/{Slider.ts => Slider.tsx} | 0 .../app/components/widgets/{TadaButton.ts => TadaButton.tsx} | 0 ...lletTestEnvironmentLabel.ts => WalletTestEnvironmentLabel.tsx} | 0 .../widgets/{WholeSelectionText.ts => WholeSelectionText.tsx} | 0 .../widgets/forms/{AssetsDropdown.ts => AssetsDropdown.tsx} | 0 .../widgets/forms/{FileUploadWidget.ts => FileUploadWidget.tsx} | 0 .../forms/{FormFieldSkinTooltip.ts => FormFieldSkinTooltip.tsx} | 0 .../widgets/forms/{ImageUploadWidget.ts => ImageUploadWidget.tsx} | 0 .../forms/{InlineEditingDropdown.ts => InlineEditingDropdown.tsx} | 0 .../forms/{InlineEditingInput.ts => InlineEditingInput.tsx} | 0 .../{InlineEditingSmallInput.ts => InlineEditingSmallInput.tsx} | 0 .../forms/{ItemDropdownOption.ts => ItemDropdownOption.tsx} | 0 .../widgets/forms/{ItemsDropdown.ts => ItemsDropdown.tsx} | 0 .../forms/{MnemonicInputWidget.ts => MnemonicInputWidget.tsx} | 0 .../widgets/forms/{NormalSwitch.ts => NormalSwitch.tsx} | 0 .../widgets/forms/{PasswordInput.ts => PasswordInput.tsx} | 0 .../app/components/widgets/forms/{PinCode.ts => PinCode.tsx} | 0 .../forms/{ProfileSettingsForm.ts => ProfileSettingsForm.tsx} | 0 .../widgets/forms/{ReadOnlyInput.ts => ReadOnlyInput.tsx} | 0 .../components/widgets/forms/{TinyButton.ts => TinyButton.tsx} | 0 .../widgets/forms/{TinyCheckbox.ts => TinyCheckbox.tsx} | 0 .../widgets/forms/{TinyDatePicker.ts => TinyDatePicker.tsx} | 0 .../app/components/widgets/forms/{TinyInput.ts => TinyInput.tsx} | 0 .../components/widgets/forms/{TinySelect.ts => TinySelect.tsx} | 0 .../components/widgets/forms/{TinySwitch.ts => TinySwitch.tsx} | 0 .../widgets/forms/{WalletsDropdown.ts => WalletsDropdown.tsx} | 0 .../forms/{WalletsDropdownLabel.ts => WalletsDropdownLabel.tsx} | 0 .../notification-dot/{NotificationDot.ts => NotificationDot.tsx} | 0 .../app/components/widgets/splash/{Splash.ts => Splash.tsx} | 0 source/renderer/app/containers/{MainLayout.ts => MainLayout.tsx} | 0 source/renderer/app/containers/{Root.ts => Root.tsx} | 0 .../app/containers/{TopBarContainer.ts => TopBarContainer.tsx} | 0 .../appUpdate/{AppUpdateContainer.ts => AppUpdateContainer.tsx} | 0 ...ettingsDialogContainer.ts => AssetSettingsDialogContainer.tsx} | 0 .../app/containers/loading/{LoadingPage.ts => LoadingPage.tsx} | 0 .../loading/{NoDiskSpaceErrorPage.ts => NoDiskSpaceErrorPage.tsx} | 0 .../{SyncingConnectingPage.ts => SyncingConnectingPage.tsx} | 0 .../loading/{SystemTimeErrorPage.ts => SystemTimeErrorPage.tsx} | 0 .../news/{NewsFeedContainer.ts => NewsFeedContainer.tsx} | 0 .../news/{NewsOverlayContainer.ts => NewsOverlayContainer.tsx} | 0 .../{NotificationsContainer.ts => NotificationsContainer.tsx} | 0 .../{DataLayerMigrationPage.ts => DataLayerMigrationPage.tsx} | 0 .../profile/{InitialSettingsPage.ts => InitialSettingsPage.tsx} | 0 .../containers/profile/{TermsOfUsePage.ts => TermsOfUsePage.tsx} | 0 .../app/containers/settings/{Settings.ts => Settings.tsx} | 0 .../{DisplaySettingsPage.ts => DisplaySettingsPage.tsx} | 0 .../{GeneralSettingsPage.ts => GeneralSettingsPage.tsx} | 0 .../{SecuritySettingsPage.ts => SecuritySettingsPage.tsx} | 0 .../{StakePoolsSettingsPage.ts => StakePoolsSettingsPage.tsx} | 0 .../{SupportSettingsPage.ts => SupportSettingsPage.tsx} | 0 .../{TermsOfUseSettingsPage.ts => TermsOfUseSettingsPage.tsx} | 0 .../{WalletsSettingsPage.ts => WalletsSettingsPage.tsx} | 0 .../splash/{SplashNetworkPage.ts => SplashNetworkPage.tsx} | 0 .../staking/{DelegationCenterPage.ts => DelegationCenterPage.tsx} | 0 ...RedeemItnRewardsContainer.ts => RedeemItnRewardsContainer.tsx} | 0 .../staking/{StakePoolsListPage.ts => StakePoolsListPage.tsx} | 0 .../renderer/app/containers/staking/{Staking.ts => Staking.tsx} | 0 .../staking/{StakingCountdownPage.ts => StakingCountdownPage.tsx} | 0 .../staking/{StakingEpochsPage.ts => StakingEpochsPage.tsx} | 0 .../staking/{StakingInfoPage.ts => StakingInfoPage.tsx} | 0 .../staking/{StakingRewardsPage.ts => StakingRewardsPage.tsx} | 0 ...ialogContainer.ts => DelegationSetupWizardDialogContainer.tsx} | 0 .../{NoWalletsContainer.ts => NoWalletsContainer.tsx} | 0 ...UnavailableContainer.ts => RedemptionUnavailableContainer.tsx} | 0 ...1ConfigurationContainer.ts => Step1ConfigurationContainer.tsx} | 0 ...ep2ConfirmationContainer.ts => Step2ConfirmationContainer.tsx} | 0 .../{Step3ResultContainer.ts => Step3ResultContainer.tsx} | 0 .../app/containers/static/{AboutDialog.ts => AboutDialog.tsx} | 0 ...DaedalusDiagnosticsDialog.ts => DaedalusDiagnosticsDialog.tsx} | 0 .../{VotingRegistrationPage.ts => VotingRegistrationPage.tsx} | 0 ...onDialogContainer.ts => VotingRegistrationDialogContainer.tsx} | 0 ...ateCertificatePage.ts => PaperWalletCreateCertificatePage.tsx} | 0 .../wallet/{TransferFundsPage.ts => TransferFundsPage.tsx} | 0 source/renderer/app/containers/wallet/{Wallet.ts => Wallet.tsx} | 0 .../app/containers/wallet/{WalletAddPage.ts => WalletAddPage.tsx} | 0 .../wallet/{WalletReceivePage.ts => WalletReceivePage.tsx} | 0 .../containers/wallet/{WalletSendPage.ts => WalletSendPage.tsx} | 0 .../wallet/{WalletSettingsPage.ts => WalletSettingsPage.tsx} | 0 .../wallet/{WalletSummaryPage.ts => WalletSummaryPage.tsx} | 0 .../wallet/{WalletTokensPage.ts => WalletTokensPage.tsx} | 0 .../{WalletTransactionsPage.ts => WalletTransactionsPage.tsx} | 0 .../containers/wallet/{WalletUtxoPage.ts => WalletUtxoPage.tsx} | 0 ...etBackupDialogContainer.ts => WalletBackupDialogContainer.tsx} | 0 ...ConnectDialogContainer.ts => WalletConnectDialogContainer.tsx} | 0 ...etCreateDialogContainer.ts => WalletCreateDialogContainer.tsx} | 0 ...teDialogContainerOld.ts => WalletCreateDialogContainerOld.tsx} | 0 ...etImportDialogContainer.ts => WalletImportDialogContainer.tsx} | 0 ...RestoreDialogContainer.ts => WalletRestoreDialogContainer.tsx} | 0 ...eDialogContainerOld.ts => WalletRestoreDialogContainerOld.tsx} | 0 ...alogContainer.ts => WalletSendConfirmationDialogContainer.tsx} | 0 ...CompletionDialogContainer.ts => CompletionDialogContainer.tsx} | 0 ...ructionsDialogContainer.ts => InstructionsDialogContainer.tsx} | 0 .../{PrintDialogContainer.ts => PrintDialogContainer.tsx} | 0 ...wordDialogContainer.ts => SecuringPasswordDialogContainer.tsx} | 0 ...ficationDialogContainer.ts => VerificationDialogContainer.tsx} | 0 ...alogContainer.ts => ChangeSpendingPasswordDialogContainer.tsx} | 0 ...teWalletDialogContainer.ts => DeleteWalletDialogContainer.tsx} | 0 ...leDialogContainer.ts => ExportWalletToFileDialogContainer.tsx} | 0 .../{PublicKeyDialogContainer.ts => PublicKeyDialogContainer.tsx} | 0 ...RCodeDialogContainer.ts => PublicKeyQRCodeDialogContainer.tsx} | 0 ...lletDialogContainer.ts => UndelegateWalletDialogContainer.tsx} | 0 ...irWalletDialogContainer.ts => UnpairWalletDialogContainer.tsx} | 0 ...coveryPhraseContainer.ts => WalletRecoveryPhraseContainer.tsx} | 0 ...sferFundsStep1Container.ts => TransferFundsStep1Container.tsx} | 0 ...sferFundsStep2Container.ts => TransferFundsStep2Container.tsx} | 0 .../{ConfigDialogContainer.ts => ConfigDialogContainer.tsx} | 0 .../{HashDialogContainer.ts => HashDialogContainer.tsx} | 0 ...ructionsDialogContainer.ts => InstructionsDialogContainer.tsx} | 0 .../{MnemonicsDialogContainer.ts => MnemonicsDialogContainer.tsx} | 0 .../{TemplateDialogContainer.ts => TemplateDialogContainer.tsx} | 0 .../{ValidateDialogContainer.ts => ValidateDialogContainer.tsx} | 0 ...leImportStepContainer.ts => WalletFileImportStepContainer.tsx} | 0 ...ImportStepContainer.ts => WalletSelectImportStepContainer.tsx} | 0 ...epConfigurationContainer.ts => StepConfigurationContainer.tsx} | 0 .../{StepMnemonicsContainer.ts => StepMnemonicsContainer.tsx} | 0 .../{StepSuccessContainer.ts => StepSuccessContainer.tsx} | 0 .../{StepWalletTypeContainer.ts => StepWalletTypeContainer.tsx} | 0 .../__mocks__/{react-svg-inline.ts => react-svg-inline.tsx} | 0 .../app/features/discreet-mode/{context.ts => context.tsx} | 0 .../{integration-tests.spec.ts => integration-tests.spec.tsx} | 0 ...DiscreetTokenWalletAmount.ts => DiscreetTokenWalletAmount.tsx} | 0 .../ui/{DiscreetValue.story.ts => DiscreetValue.story.tsx} | 0 .../discreet-mode/ui/{DiscreetValue.ts => DiscreetValue.tsx} | 0 .../ui/{DiscreetWalletAmount.ts => DiscreetWalletAmount.tsx} | 0 .../{DiscreetToggleTopBar.ts => DiscreetToggleTopBar.tsx} | 0 .../{DiscreetModeToggle.story.ts => DiscreetModeToggle.story.tsx} | 0 .../{DiscreetModeToggle.ts => DiscreetModeToggle.tsx} | 0 .../ui/{withDiscreetMode.ts => withDiscreetMode.tsx} | 0 .../app/features/local-storage/{context.ts => context.tsx} | 0 ...BrowserLocalStorageBridge.ts => BrowserLocalStorageBridge.tsx} | 0 source/renderer/app/{index.ts => index.tsx} | 0 source/renderer/app/utils/{transaction.ts => transaction.tsx} | 0 .../addons/DaedalusMenu/{DaedalusMenu.ts => DaedalusMenu.tsx} | 0 storybook/addons/DaedalusMenu/{register.ts => register.tsx} | 0 storybook/{config.ts => config.tsx} | 0 .../stories/_support/{StoryDecorator.ts => StoryDecorator.tsx} | 0 storybook/stories/_support/{StoryLayout.ts => StoryLayout.tsx} | 0 .../stories/_support/{StoryProvider.ts => StoryProvider.tsx} | 0 storybook/stories/_support/{StoryWrapper.ts => StoryWrapper.tsx} | 0 storybook/stories/assets/{Asset.stories.ts => Asset.stories.tsx} | 0 ...tSettingsDialog.stories.ts => AssetSettingsDialog.stories.tsx} | 0 .../{ItemsDropdown.stories.ts => ItemsDropdown.stories.tsx} | 0 .../stories/common/{Widgets.stories.ts => Widgets.stories.tsx} | 0 ...ansactionRequest.stories.ts => TransactionRequest.stories.tsx} | 0 .../navigation/{Sidebar.stories.ts => Sidebar.stories.tsx} | 0 .../{SidebarCategory.stories.ts => SidebarCategory.stories.tsx} | 0 ...debarWalletsMenu.stories.ts => SidebarWalletsMenu.stories.tsx} | 0 .../news/{AlertsOverlay.stories.ts => AlertsOverlay.stories.tsx} | 0 .../{AppUpdateOverlay.stories.ts => AppUpdateOverlay.stories.tsx} | 0 .../{IncidentOverlay.stories.ts => IncidentOverlay.stories.tsx} | 0 .../stories/news/{NewsFeed.stories.ts => NewsFeed.stories.tsx} | 0 .../stories/nodes/about/{About.stories.ts => About.stories.tsx} | 0 ...TopBarEnvironment.stories.ts => TopBarEnvironment.stories.tsx} | 0 .../nodes/errors/{Errors.stories.ts => Errors.stories.tsx} | 0 .../{NoDiskSpaceError.stories.ts => NoDiskSpaceError.stories.tsx} | 0 .../{SystemTimeError.stories.ts => SystemTimeError.stories.tsx} | 0 .../nodes/splash/{Splash.stories.ts => Splash.stories.tsx} | 0 .../status/{Diagnostics.stories.ts => Diagnostics.stories.tsx} | 0 .../nodes/syncing/{Syncing.stories.ts => Syncing.stories.tsx} | 0 ...SyncingConnecting.stories.ts => SyncingConnecting.stories.tsx} | 0 ...taLayerMigration.stories.ts => DataLayerMigration.stories.tsx} | 0 .../nodes/updates/{Updates.stories.ts => Updates.stories.tsx} | 0 .../{Notifications.stories.ts => Notifications.stories.tsx} | 0 .../settings/general/{General.stories.ts => General.stories.tsx} | 0 .../language/{Language.stories.ts => Language.stories.tsx} | 0 .../settings/utils/{SettingsWrapper.ts => SettingsWrapper.tsx} | 0 .../{CountdownParty.stories.ts => CountdownParty.stories.tsx} | 0 .../{DelegationCenter.stories.ts => DelegationCenter.stories.tsx} | 0 .../{DelegationSteps.stories.ts => DelegationSteps.stories.tsx} | 0 .../stories/staking/{Epochs.stories.ts => Epochs.stories.tsx} | 0 .../stories/staking/{Legacy.stories.ts => Legacy.stories.tsx} | 0 .../{RedeemItnWallets.stories.ts => RedeemItnWallets.stories.tsx} | 0 .../stories/staking/{Rewards.stories.ts => Rewards.stories.tsx} | 0 .../staking/{StakePools.stories.ts => StakePools.stories.tsx} | 0 .../{StakePoolsTable.stories.ts => StakePoolsTable.stories.tsx} | 0 .../stories/staking/{Staking.stories.ts => Staking.stories.tsx} | 0 .../stories/staking/{StakingWrapper.ts => StakingWrapper.tsx} | 0 .../staking/{Undelegate.stories.ts => Undelegate.stories.tsx} | 0 .../stories/voting/{Voting.stories.ts => Voting.stories.tsx} | 0 .../_utils/{CreateWalletScreens.ts => CreateWalletScreens.tsx} | 0 ...NavigationLayout.ts => HardwareWalletWithNavigationLayout.tsx} | 0 .../{HardwareWalletsWrapper.ts => HardwareWalletsWrapper.tsx} | 0 ...lletWithNavigationLayout.ts => WalletWithNavigationLayout.tsx} | 0 .../wallets/_utils/{WalletsWrapper.ts => WalletsWrapper.tsx} | 0 .../_utils/{defaultWalletProps.ts => defaultWalletProps.tsx} | 0 .../stories/wallets/addWallet/{Add.stories.ts => Add.stories.tsx} | 0 .../wallets/addWallet/{Create.stories.ts => Create.stories.tsx} | 0 .../wallets/addWallet/{Import.stories.ts => Import.stories.tsx} | 0 .../wallets/addWallet/{Restore.stories.ts => Restore.stories.tsx} | 0 .../addWallet/{RestoreOld.stories.ts => RestoreOld.stories.tsx} | 0 ...lletExportToFile.stories.ts => WalletExportToFile.stories.tsx} | 0 .../{HardwareWallets.stories.ts => HardwareWallets.stories.tsx} | 0 .../{WalletImportFile.stories.ts => WalletImportFile.stories.tsx} | 0 ...gacyNotification.stories.ts => LegacyNotification.stories.tsx} | 0 .../{TransferFunds.stories.ts => TransferFunds.stories.tsx} | 0 .../{PaperWallets.stories.ts => PaperWallets.stories.tsx} | 0 .../{WalletReceive.stories.ts => WalletReceive.stories.tsx} | 0 .../send/{WalletSend.stories.ts => WalletSend.stories.tsx} | 0 ...SetWalletPassword.stories.ts => SetWalletPassword.stories.tsx} | 0 .../{PublicKeyQRCode.stories.ts => PublicKeyQRCode.stories.tsx} | 0 .../{WalletDelete.stories.ts => WalletDelete.stories.tsx} | 0 .../{WalletPublicKey.stories.ts => WalletPublicKey.stories.tsx} | 0 ...on.stories.ts => WalletRecoveryPhraseVerification.stories.tsx} | 0 .../{WalletSettings.stories.ts => WalletSettings.stories.tsx} | 0 ...SettingsScreen.stories.ts => WalletSettingsScreen.stories.tsx} | 0 .../{WalletUnpair.stories.ts => WalletUnpair.stories.tsx} | 0 .../{WalletSummary.stories.ts => WalletSummary.stories.tsx} | 0 .../tokens/{WalletTokens.stories.ts => WalletTokens.stories.tsx} | 0 .../{WalletTokensList.stories.ts => WalletTokensList.stories.tsx} | 0 .../{Transaction.stories.ts => Transaction.stories.tsx} | 0 ...sactionMetadata.stories.ts => TransactionMetadata.stories.tsx} | 0 .../{TransactionsList.stories.ts => TransactionsList.stories.tsx} | 0 .../wallets/transactions/{Utxo.stories.ts => Utxo.stories.tsx} | 0 tests/_utils/{TestDecorator.ts => TestDecorator.tsx} | 0 490 files changed, 0 insertions(+), 0 deletions(-) rename source/renderer/app/{App.ts => App.tsx} (100%) rename source/renderer/app/{Routes.ts => Routes.tsx} (100%) rename source/renderer/app/{ThemeManager.ts => ThemeManager.tsx} (100%) rename source/renderer/app/{WindowSizeManager.ts => WindowSizeManager.tsx} (100%) rename source/renderer/app/components/appUpdate/{AppUpdateOverlay.ts => AppUpdateOverlay.tsx} (100%) rename source/renderer/app/components/assets/{Asset.ts => Asset.tsx} (100%) rename source/renderer/app/components/assets/{AssetAmount.ts => AssetAmount.tsx} (100%) rename source/renderer/app/components/assets/{AssetContent.ts => AssetContent.tsx} (100%) rename source/renderer/app/components/assets/{AssetSettingsDialog.ts => AssetSettingsDialog.tsx} (100%) rename source/renderer/app/components/assets/{AssetTransactionConfirmation.ts => AssetTransactionConfirmation.tsx} (100%) rename source/renderer/app/components/assets/{AssetsTransactionConfirmation.ts => AssetsTransactionConfirmation.tsx} (100%) rename source/renderer/app/components/dapp/{DappTransactionRequest.ts => DappTransactionRequest.tsx} (100%) rename source/renderer/app/components/hardware-wallet/{HardwareWalletStatus.ts => HardwareWalletStatus.tsx} (100%) rename source/renderer/app/components/layout/{CenteredLayout.ts => CenteredLayout.tsx} (100%) rename source/renderer/app/components/layout/{SidebarLayout.ts => SidebarLayout.tsx} (100%) rename source/renderer/app/components/layout/{TopBar.ts => TopBar.tsx} (100%) rename source/renderer/app/components/layout/{TopBarLayout.ts => TopBarLayout.tsx} (100%) rename source/renderer/app/components/layout/{VerticalFlexContainer.ts => VerticalFlexContainer.tsx} (100%) rename source/renderer/app/components/loading/no-disk-space-error/{NoDiskSpaceError.ts => NoDiskSpaceError.tsx} (100%) rename source/renderer/app/components/loading/syncing-connecting/{LogosDisplay.ts => LogosDisplay.tsx} (100%) rename source/renderer/app/components/loading/syncing-connecting/{ReportIssue.ts => ReportIssue.tsx} (100%) rename source/renderer/app/components/loading/syncing-connecting/{StatusIcons.ts => StatusIcons.tsx} (100%) rename source/renderer/app/components/loading/syncing-connecting/{SyncingConnecting.ts => SyncingConnecting.tsx} (100%) rename source/renderer/app/components/loading/syncing-connecting/{SyncingConnectingBackground.ts => SyncingConnectingBackground.tsx} (100%) rename source/renderer/app/components/loading/syncing-connecting/{SyncingConnectingStatus.ts => SyncingConnectingStatus.tsx} (100%) rename source/renderer/app/components/loading/system-time-error/{SystemTimeError.ts => SystemTimeError.tsx} (100%) rename source/renderer/app/components/navigation/{NavButton.ts => NavButton.tsx} (100%) rename source/renderer/app/components/navigation/{NavDropdown.ts => NavDropdown.tsx} (100%) rename source/renderer/app/components/navigation/{Navigation.ts => Navigation.tsx} (100%) rename source/renderer/app/components/news/{AlertsOverlay.ts => AlertsOverlay.tsx} (100%) rename source/renderer/app/components/news/{IncidentOverlay.ts => IncidentOverlay.tsx} (100%) rename source/renderer/app/components/news/{NewsFeed.ts => NewsFeed.tsx} (100%) rename source/renderer/app/components/news/{NewsItem.ts => NewsItem.tsx} (100%) rename source/renderer/app/components/news/{UpdateItem.ts => UpdateItem.tsx} (100%) rename source/renderer/app/components/notifications/{InlineNotification.ts => InlineNotification.tsx} (100%) rename source/renderer/app/components/notifications/{LegacyBadge.ts => LegacyBadge.tsx} (100%) rename source/renderer/app/components/notifications/{LegacyNotification.ts => LegacyNotification.tsx} (100%) rename source/renderer/app/components/notifications/{Notification.ts => Notification.tsx} (100%) rename source/renderer/app/components/notifications/{NotificationActions.ts => NotificationActions.tsx} (100%) rename source/renderer/app/components/notifications/{RestoreNotification.ts => RestoreNotification.tsx} (100%) rename source/renderer/app/components/profile/data-layer-migration/{DataLayerMigrationForm.ts => DataLayerMigrationForm.tsx} (100%) rename source/renderer/app/components/profile/initial-settings/{InitialSettings.ts => InitialSettings.tsx} (100%) rename source/renderer/app/components/profile/terms-of-use/{TermsOfUseForm.ts => TermsOfUseForm.tsx} (100%) rename source/renderer/app/components/profile/terms-of-use/{TermsOfUseText.ts => TermsOfUseText.tsx} (100%) rename source/renderer/app/components/settings/{SettingsLayout.ts => SettingsLayout.tsx} (100%) rename source/renderer/app/components/settings/categories/{DisplaySettings.ts => DisplaySettings.tsx} (100%) rename source/renderer/app/components/settings/categories/{GeneralSettings.ts => GeneralSettings.tsx} (100%) rename source/renderer/app/components/settings/categories/{SecuritySettings.ts => SecuritySettings.tsx} (100%) rename source/renderer/app/components/settings/categories/{StakePoolsSettings.ts => StakePoolsSettings.tsx} (100%) rename source/renderer/app/components/settings/categories/{SupportSettings.ts => SupportSettings.tsx} (100%) rename source/renderer/app/components/settings/categories/{TermsOfUseSettings.ts => TermsOfUseSettings.tsx} (100%) rename source/renderer/app/components/settings/categories/{WalletsSettings.ts => WalletsSettings.tsx} (100%) rename source/renderer/app/components/settings/menu/{SecurityMenuItem.ts => SecurityMenuItem.tsx} (100%) rename source/renderer/app/components/settings/menu/{SettingsMenu.ts => SettingsMenu.tsx} (100%) rename source/renderer/app/components/settings/menu/{SettingsMenuItem.ts => SettingsMenuItem.tsx} (100%) rename source/renderer/app/components/sidebar/{Sidebar.ts => Sidebar.tsx} (100%) rename source/renderer/app/components/sidebar/{SidebarCategory.ts => SidebarCategory.tsx} (100%) rename source/renderer/app/components/sidebar/{SidebarCategoryNetworkInfo.ts => SidebarCategoryNetworkInfo.tsx} (100%) rename source/renderer/app/components/sidebar/{SidebarCategoryWrapper.ts => SidebarCategoryWrapper.tsx} (100%) rename source/renderer/app/components/sidebar/{SidebarMenu.ts => SidebarMenu.tsx} (100%) rename source/renderer/app/components/sidebar/wallets/{SidebarWalletMenuItem.ts => SidebarWalletMenuItem.tsx} (100%) rename source/renderer/app/components/sidebar/wallets/{SidebarWalletsMenu.spec.ts => SidebarWalletsMenu.spec.tsx} (100%) rename source/renderer/app/components/sidebar/wallets/{SidebarWalletsMenu.ts => SidebarWalletsMenu.tsx} (100%) rename source/renderer/app/components/sidebar/wallets/{WalletSearch.ts => WalletSearch.tsx} (100%) rename source/renderer/app/components/sidebar/wallets/{WalletSortButton.ts => WalletSortButton.tsx} (100%) rename source/renderer/app/components/splash/{SplashNetworkFlight.ts => SplashNetworkFlight.tsx} (100%) rename source/renderer/app/components/staking/{StakingUnavailable.ts => StakingUnavailable.tsx} (100%) rename source/renderer/app/components/staking/countdown/{StakingCountdown.ts => StakingCountdown.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenter.ts => DelegationCenter.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenterBody.ts => DelegationCenterBody.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenterHeader.ts => DelegationCenterHeader.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{DelegationCenterNoWallets.ts => DelegationCenterNoWallets.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{DonutRing.ts => DonutRing.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{DropdownMenu.ts => DropdownMenu.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{WalletRow.ts => WalletRow.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/{helpers.ts => helpers.tsx} (100%) rename source/renderer/app/components/staking/delegation-center/widgets/{WalletAmount.ts => WalletAmount.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationSetupWizardDialog.ts => DelegationSetupWizardDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsChooseStakePoolDialog.ts => DelegationStepsChooseStakePoolDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsChooseWalletDialog.ts => DelegationStepsChooseWalletDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsConfirmationDialog.ts => DelegationStepsConfirmationDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsIntroDialog.ts => DelegationStepsIntroDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsNotAvailableDialog.ts => DelegationStepsNotAvailableDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{DelegationStepsSuccessDialog.ts => DelegationStepsSuccessDialog.tsx} (100%) rename source/renderer/app/components/staking/delegation-setup-wizard/{OversaturationText.ts => OversaturationText.tsx} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochs.ts => StakingEpochs.tsx} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsCurrentEpochData.ts => StakingEpochsCurrentEpochData.tsx} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsDataTable.ts => StakingEpochsDataTable.tsx} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsNoData.ts => StakingEpochsNoData.tsx} (100%) rename source/renderer/app/components/staking/epochs/{StakingEpochsPreviousEpochData.ts => StakingEpochsPreviousEpochData.tsx} (100%) rename source/renderer/app/components/staking/info/{StakingInfo.ts => StakingInfo.tsx} (100%) rename source/renderer/app/components/staking/info/{StakingInfoCountdown.ts => StakingInfoCountdown.tsx} (100%) rename source/renderer/app/components/staking/layouts/{StakingWithNavigation.ts => StakingWithNavigation.tsx} (100%) rename source/renderer/app/components/staking/legacy/{BlockGenerationInfo.ts => BlockGenerationInfo.tsx} (100%) rename source/renderer/app/components/staking/legacy/{Staking.ts => Staking.tsx} (100%) rename source/renderer/app/components/staking/legacy/{StakingChart.ts => StakingChart.tsx} (100%) rename source/renderer/app/components/staking/legacy/{StakingChartTooltip.ts => StakingChartTooltip.tsx} (100%) rename source/renderer/app/components/staking/legacy/{StakingChartTooltipItem.ts => StakingChartTooltipItem.tsx} (100%) rename source/renderer/app/components/staking/legacy/{StakingSwitch.ts => StakingSwitch.tsx} (100%) rename source/renderer/app/components/staking/legacy/{StakingSystemState.ts => StakingSystemState.tsx} (100%) rename source/renderer/app/components/staking/legacy/{StakingSystemStateElement.ts => StakingSystemStateElement.tsx} (100%) rename source/renderer/app/components/staking/navigation/{StakingNavigation.ts => StakingNavigation.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{LoadingOverlay.ts => LoadingOverlay.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{NoWalletsDialog.ts => NoWalletsDialog.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{RedemptionUnavailableDialog.ts => RedemptionUnavailableDialog.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step1ConfigurationDialog.ts => Step1ConfigurationDialog.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step2ConfirmationDialog.ts => Step2ConfirmationDialog.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step3FailureDialog.ts => Step3FailureDialog.tsx} (100%) rename source/renderer/app/components/staking/redeem-itn-rewards/{Step3SuccessDialog.ts => Step3SuccessDialog.tsx} (100%) rename source/renderer/app/components/staking/rewards/{RewardAmount.ts => RewardAmount.tsx} (100%) rename source/renderer/app/components/staking/rewards/{StakingRewards.ts => StakingRewards.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePools.ts => StakePools.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsList.ts => StakePoolsList.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsRanking.ts => StakePoolsRanking.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsRankingLoader.ts => StakePoolsRankingLoader.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsSearch.ts => StakePoolsSearch.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsTable.ts => StakePoolsTable.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsTableBody.ts => StakePoolsTableBody.tsx} (100%) rename source/renderer/app/components/staking/stake-pools/{StakePoolsTableHeader.ts => StakePoolsTableHeader.tsx} (100%) rename source/renderer/app/components/staking/widgets/{PoolPopOver.ts => PoolPopOver.tsx} (100%) rename source/renderer/app/components/staking/widgets/{ThumbPool.ts => ThumbPool.tsx} (100%) rename source/renderer/app/components/staking/widgets/{ThumbPoolContent.ts => ThumbPoolContent.tsx} (100%) rename source/renderer/app/components/staking/widgets/{ThumbSelectedPool.ts => ThumbSelectedPool.tsx} (100%) rename source/renderer/app/components/staking/widgets/{TooltipPool.ts => TooltipPool.tsx} (100%) rename source/renderer/app/components/static/{About.ts => About.tsx} (100%) rename source/renderer/app/components/status/{DaedalusDiagnostics.ts => DaedalusDiagnostics.tsx} (100%) rename source/renderer/app/components/voting/{VotingFooterLinks.ts => VotingFooterLinks.tsx} (100%) rename source/renderer/app/components/voting/{VotingNoWallets.ts => VotingNoWallets.tsx} (100%) rename source/renderer/app/components/voting/{VotingRegistrationDialogWizard.ts => VotingRegistrationDialogWizard.tsx} (100%) rename source/renderer/app/components/voting/{VotingUnavailable.ts => VotingUnavailable.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{AppStore.ts => AppStore.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{Headline.ts => Headline.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{RegisterToVote.ts => RegisterToVote.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{ResultsPhase.ts => ResultsPhase.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{SnapshotPhase.ts => SnapshotPhase.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{TallyingPhase.ts => TallyingPhase.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{VotingInfo.ts => VotingInfo.tsx} (100%) rename source/renderer/app/components/voting/voting-info/{VotingPhase.ts => VotingPhase.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsChooseWallet.ts => VotingRegistrationStepsChooseWallet.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsConfirm.ts => VotingRegistrationStepsConfirm.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsEnterPinCode.ts => VotingRegistrationStepsEnterPinCode.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsQrCode.ts => VotingRegistrationStepsQrCode.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/{VotingRegistrationStepsRegister.ts => VotingRegistrationStepsRegister.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/{ConfirmationDialog.ts => ConfirmationDialog.tsx} (100%) rename source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/{VotingRegistrationDialog.ts => VotingRegistrationDialog.tsx} (100%) rename source/renderer/app/components/wallet/{WalletAdd.ts => WalletAdd.tsx} (100%) rename source/renderer/app/components/wallet/{WalletBackupDialog.ts => WalletBackupDialog.tsx} (100%) rename source/renderer/app/components/wallet/{WalletConnectDialog.ts => WalletConnectDialog.tsx} (100%) rename source/renderer/app/components/wallet/{WalletCreateDialog.ts => WalletCreateDialog.tsx} (100%) rename source/renderer/app/components/wallet/{WalletRestoreDialog.ts => WalletRestoreDialog.tsx} (100%) rename source/renderer/app/components/wallet/{WalletSendForm.spec.ts => WalletSendForm.spec.tsx} (100%) rename source/renderer/app/components/wallet/{WalletSendForm.ts => WalletSendForm.tsx} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletBackupPrivacyWarningDialog.ts => WalletBackupPrivacyWarningDialog.tsx} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryInstructions.ts => WalletRecoveryInstructions.tsx} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryPhraseDisplayDialog.ts => WalletRecoveryPhraseDisplayDialog.tsx} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryPhraseEntryDialog.ts => WalletRecoveryPhraseEntryDialog.tsx} (100%) rename source/renderer/app/components/wallet/backup-recovery/{WalletRecoveryPhraseMnemonic.ts => WalletRecoveryPhraseMnemonic.tsx} (100%) rename source/renderer/app/components/wallet/file-import/{WalletFileImportDialog.ts => WalletFileImportDialog.tsx} (100%) rename source/renderer/app/components/wallet/layouts/{WalletWithNavigation.ts => WalletWithNavigation.tsx} (100%) rename source/renderer/app/components/wallet/navigation/{WalletNavigation.ts => WalletNavigation.tsx} (100%) rename source/renderer/app/components/wallet/not-responding/{NotResponding.ts => NotResponding.tsx} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{CompletionDialog.ts => CompletionDialog.tsx} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{ConfirmationDialog.ts => ConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{InstructionsDialog.ts => InstructionsDialog.tsx} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{PrintDialog.ts => PrintDialog.tsx} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{SecuringPasswordDialog.ts => SecuringPasswordDialog.tsx} (100%) rename source/renderer/app/components/wallet/paper-wallet-certificate/{VerificationDialog.ts => VerificationDialog.tsx} (100%) rename source/renderer/app/components/wallet/receive/{AddressActions.ts => AddressActions.tsx} (100%) rename source/renderer/app/components/wallet/receive/{AddressRandom.ts => AddressRandom.tsx} (100%) rename source/renderer/app/components/wallet/receive/{AddressSequential.ts => AddressSequential.tsx} (100%) rename source/renderer/app/components/wallet/receive/{VirtualAddressesList.ts => VirtualAddressesList.tsx} (100%) rename source/renderer/app/components/wallet/receive/{WalletReceiveDialog.ts => WalletReceiveDialog.tsx} (100%) rename source/renderer/app/components/wallet/receive/{WalletReceiveRandom.ts => WalletReceiveRandom.tsx} (100%) rename source/renderer/app/components/wallet/receive/{WalletReceiveSequential.ts => WalletReceiveSequential.tsx} (100%) rename source/renderer/app/components/wallet/send-form/{AssetInput.ts => AssetInput.tsx} (100%) rename source/renderer/app/components/wallet/send-form/{WalletSendAssetsConfirmationDialog.ts => WalletSendAssetsConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/send-form/{WalletSendConfirmationDialog.ts => WalletSendConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{ChangeSpendingPasswordDialog.ts => ChangeSpendingPasswordDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{DelegateWalletButton.ts => DelegateWalletButton.tsx} (100%) rename source/renderer/app/components/wallet/settings/{DeleteWallet.ts => DeleteWallet.tsx} (100%) rename source/renderer/app/components/wallet/settings/{DeleteWalletConfirmation.ts => DeleteWalletConfirmation.tsx} (100%) rename source/renderer/app/components/wallet/settings/{ExportWalletToFileDialog.ts => ExportWalletToFileDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyBox.ts => ICOPublicKeyBox.tsx} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyDialog.ts => ICOPublicKeyDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{ICOPublicKeyQRCodeDialog.ts => ICOPublicKeyQRCodeDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{PublicKeyField.ts => PublicKeyField.tsx} (100%) rename source/renderer/app/components/wallet/settings/{PublicKeyFieldSkin.ts => PublicKeyFieldSkin.tsx} (100%) rename source/renderer/app/components/wallet/settings/{SetWalletPassword.ts => SetWalletPassword.tsx} (100%) rename source/renderer/app/components/wallet/settings/{UndelegateWalletButton.ts => UndelegateWalletButton.tsx} (100%) rename source/renderer/app/components/wallet/settings/{UndelegateWalletConfirmationDialog.ts => UndelegateWalletConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{UndelegateWalletSuccessDialog.ts => UndelegateWalletSuccessDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{UnpairWallet.ts => UnpairWallet.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletPublicKeyBox.ts => WalletPublicKeyBox.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletPublicKeyDialog.ts => WalletPublicKeyDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletPublicKeyQRCodeDialog.ts => WalletPublicKeyQRCodeDialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep1Dialog.ts => WalletRecoveryPhraseStep1Dialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep2Dialog.ts => WalletRecoveryPhraseStep2Dialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep3Dialog.ts => WalletRecoveryPhraseStep3Dialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseStep4Dialog.ts => WalletRecoveryPhraseStep4Dialog.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletRecoveryPhraseVerificationWidget.ts => WalletRecoveryPhraseVerificationWidget.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletSettings.ts => WalletSettings.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletSettingsRemoveButton.ts => WalletSettingsRemoveButton.tsx} (100%) rename source/renderer/app/components/wallet/settings/{WalletSettingsRemoveConfirmationDialog.ts => WalletSettingsRemoveConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/skins/{AmountInputSkin.ts => AmountInputSkin.tsx} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummary.ts => WalletSummary.tsx} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummaryAsset.ts => WalletSummaryAsset.tsx} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummaryCurrency.ts => WalletSummaryCurrency.tsx} (100%) rename source/renderer/app/components/wallet/summary/{WalletSummaryHeader.ts => WalletSummaryHeader.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-no-tokens/{WalletNoTokens.ts => WalletNoTokens.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPicker.stories.ts => WalletTokenPicker.stories.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPicker.ts => WalletTokenPicker.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{WalletTokenPickerCheckbox.ts => WalletTokenPickerCheckbox.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token-picker/{hooks.spec.ts => hooks.spec.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletToken.ts => WalletToken.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletTokenFooter.ts => WalletTokenFooter.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-token/{WalletTokenHeader.ts => WalletTokenHeader.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens-list/{WalletTokensList.ts => WalletTokensList.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens-search/{WalletTokensSearch.ts => WalletTokensSearch.tsx} (100%) rename source/renderer/app/components/wallet/tokens/wallet-tokens/{WalletTokens.ts => WalletTokens.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{CancelTransactionButton.ts => CancelTransactionButton.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{CancelTransactionConfirmationDialog.ts => CancelTransactionConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{FilterButton.ts => FilterButton.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{FilterDialog.ts => FilterDialog.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{FilterResultInfo.ts => FilterResultInfo.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{Transaction.ts => Transaction.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{TransactionTypeIcon.ts => TransactionTypeIcon.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{WalletNoTransactions.ts => WalletNoTransactions.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactions.ts => WalletTransactions.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactionsHeader.ts => WalletTransactionsHeader.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactionsList.ts => WalletTransactionsList.tsx} (100%) rename source/renderer/app/components/wallet/transactions/{WalletTransactionsSearch.ts => WalletTransactionsSearch.tsx} (100%) rename source/renderer/app/components/wallet/transactions/metadata/{MetadataValueView.ts => MetadataValueView.tsx} (100%) rename source/renderer/app/components/wallet/transactions/metadata/{TransactionMetadataView.ts => TransactionMetadataView.tsx} (100%) rename source/renderer/app/components/wallet/transactions/render-strategies/{SimpleTransactionList.ts => SimpleTransactionList.tsx} (100%) rename source/renderer/app/components/wallet/transactions/render-strategies/{VirtualTransactionList.ts => VirtualTransactionList.tsx} (100%) rename source/renderer/app/components/wallet/transfer-funds/{TransferFundsStep1Dialog.ts => TransferFundsStep1Dialog.tsx} (100%) rename source/renderer/app/components/wallet/transfer-funds/{TransferFundsStep2Dialog.ts => TransferFundsStep2Dialog.tsx} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxo.ts => WalletUtxo.tsx} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoCursor.ts => WalletUtxoCursor.tsx} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoDescription.ts => WalletUtxoDescription.tsx} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoTick.ts => WalletUtxoTick.tsx} (100%) rename source/renderer/app/components/wallet/utxo/{WalletUtxoTooltip.ts => WalletUtxoTooltip.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{ConfigDialog.ts => ConfigDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{HashDialog.ts => HashDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{InstructionsDialog.ts => InstructionsDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{MnemonicsDialog.ts => MnemonicsDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{TemplateDialog.ts => TemplateDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{ValidateDialog.ts => ValidateDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{WalletCreateDialog.ts => WalletCreateDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-create/{WalletCreateSteps.ts => WalletCreateSteps.tsx} (100%) rename source/renderer/app/components/wallet/wallet-import/{WalletImportFileDialog.ts => WalletImportFileDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-import/{WalletSelectImportDialog.ts => WalletSelectImportDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/{ConfigurationDialog.ts => ConfigurationDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/{MnemonicsDialog.ts => MnemonicsDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/{SuccessDialog.ts => SuccessDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/{WalletTypeDialog.ts => WalletTypeDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/widgets/{ConfirmationDialog.ts => ConfirmationDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/widgets/{WalletRestoreDialog.ts => WalletRestoreDialog.tsx} (100%) rename source/renderer/app/components/wallet/wallet-restore/widgets/{WalletRestoreSteps.ts => WalletRestoreSteps.tsx} (100%) rename source/renderer/app/components/widgets/{BackToTopButton.ts => BackToTopButton.tsx} (100%) rename source/renderer/app/components/widgets/{BigButtonForDialogs.ts => BigButtonForDialogs.tsx} (100%) rename source/renderer/app/components/widgets/{BorderedBox.ts => BorderedBox.tsx} (100%) rename source/renderer/app/components/widgets/{ButtonLink.ts => ButtonLink.tsx} (100%) rename source/renderer/app/components/widgets/{CountdownWidget.ts => CountdownWidget.tsx} (100%) rename source/renderer/app/components/widgets/{Dialog.ts => Dialog.tsx} (100%) rename source/renderer/app/components/widgets/{DialogBackButton.ts => DialogBackButton.tsx} (100%) rename source/renderer/app/components/widgets/{DialogCloseButton.ts => DialogCloseButton.tsx} (100%) rename source/renderer/app/components/widgets/{ExternalLinkButton.ts => ExternalLinkButton.tsx} (100%) rename source/renderer/app/components/widgets/{FormattedHTMLMessageWithLink.ts => FormattedHTMLMessageWithLink.tsx} (100%) rename source/renderer/app/components/widgets/{FullyDecentralizedEffect.ts => FullyDecentralizedEffect.tsx} (100%) rename source/renderer/app/components/widgets/{LoadingSpinner.ts => LoadingSpinner.tsx} (100%) rename source/renderer/app/components/widgets/{NewsFeedIcon.ts => NewsFeedIcon.tsx} (100%) rename source/renderer/app/components/widgets/{NodeSyncStatusIcon.ts => NodeSyncStatusIcon.tsx} (100%) rename source/renderer/app/components/widgets/{ProgressBar.ts => ProgressBar.tsx} (100%) rename source/renderer/app/components/widgets/{ProgressBarLarge.ts => ProgressBarLarge.tsx} (100%) rename source/renderer/app/components/widgets/{RadioSet.ts => RadioSet.tsx} (100%) rename source/renderer/app/components/widgets/{Slider.ts => Slider.tsx} (100%) rename source/renderer/app/components/widgets/{TadaButton.ts => TadaButton.tsx} (100%) rename source/renderer/app/components/widgets/{WalletTestEnvironmentLabel.ts => WalletTestEnvironmentLabel.tsx} (100%) rename source/renderer/app/components/widgets/{WholeSelectionText.ts => WholeSelectionText.tsx} (100%) rename source/renderer/app/components/widgets/forms/{AssetsDropdown.ts => AssetsDropdown.tsx} (100%) rename source/renderer/app/components/widgets/forms/{FileUploadWidget.ts => FileUploadWidget.tsx} (100%) rename source/renderer/app/components/widgets/forms/{FormFieldSkinTooltip.ts => FormFieldSkinTooltip.tsx} (100%) rename source/renderer/app/components/widgets/forms/{ImageUploadWidget.ts => ImageUploadWidget.tsx} (100%) rename source/renderer/app/components/widgets/forms/{InlineEditingDropdown.ts => InlineEditingDropdown.tsx} (100%) rename source/renderer/app/components/widgets/forms/{InlineEditingInput.ts => InlineEditingInput.tsx} (100%) rename source/renderer/app/components/widgets/forms/{InlineEditingSmallInput.ts => InlineEditingSmallInput.tsx} (100%) rename source/renderer/app/components/widgets/forms/{ItemDropdownOption.ts => ItemDropdownOption.tsx} (100%) rename source/renderer/app/components/widgets/forms/{ItemsDropdown.ts => ItemsDropdown.tsx} (100%) rename source/renderer/app/components/widgets/forms/{MnemonicInputWidget.ts => MnemonicInputWidget.tsx} (100%) rename source/renderer/app/components/widgets/forms/{NormalSwitch.ts => NormalSwitch.tsx} (100%) rename source/renderer/app/components/widgets/forms/{PasswordInput.ts => PasswordInput.tsx} (100%) rename source/renderer/app/components/widgets/forms/{PinCode.ts => PinCode.tsx} (100%) rename source/renderer/app/components/widgets/forms/{ProfileSettingsForm.ts => ProfileSettingsForm.tsx} (100%) rename source/renderer/app/components/widgets/forms/{ReadOnlyInput.ts => ReadOnlyInput.tsx} (100%) rename source/renderer/app/components/widgets/forms/{TinyButton.ts => TinyButton.tsx} (100%) rename source/renderer/app/components/widgets/forms/{TinyCheckbox.ts => TinyCheckbox.tsx} (100%) rename source/renderer/app/components/widgets/forms/{TinyDatePicker.ts => TinyDatePicker.tsx} (100%) rename source/renderer/app/components/widgets/forms/{TinyInput.ts => TinyInput.tsx} (100%) rename source/renderer/app/components/widgets/forms/{TinySelect.ts => TinySelect.tsx} (100%) rename source/renderer/app/components/widgets/forms/{TinySwitch.ts => TinySwitch.tsx} (100%) rename source/renderer/app/components/widgets/forms/{WalletsDropdown.ts => WalletsDropdown.tsx} (100%) rename source/renderer/app/components/widgets/forms/{WalletsDropdownLabel.ts => WalletsDropdownLabel.tsx} (100%) rename source/renderer/app/components/widgets/notification-dot/{NotificationDot.ts => NotificationDot.tsx} (100%) rename source/renderer/app/components/widgets/splash/{Splash.ts => Splash.tsx} (100%) rename source/renderer/app/containers/{MainLayout.ts => MainLayout.tsx} (100%) rename source/renderer/app/containers/{Root.ts => Root.tsx} (100%) rename source/renderer/app/containers/{TopBarContainer.ts => TopBarContainer.tsx} (100%) rename source/renderer/app/containers/appUpdate/{AppUpdateContainer.ts => AppUpdateContainer.tsx} (100%) rename source/renderer/app/containers/assets/{AssetSettingsDialogContainer.ts => AssetSettingsDialogContainer.tsx} (100%) rename source/renderer/app/containers/loading/{LoadingPage.ts => LoadingPage.tsx} (100%) rename source/renderer/app/containers/loading/{NoDiskSpaceErrorPage.ts => NoDiskSpaceErrorPage.tsx} (100%) rename source/renderer/app/containers/loading/{SyncingConnectingPage.ts => SyncingConnectingPage.tsx} (100%) rename source/renderer/app/containers/loading/{SystemTimeErrorPage.ts => SystemTimeErrorPage.tsx} (100%) rename source/renderer/app/containers/news/{NewsFeedContainer.ts => NewsFeedContainer.tsx} (100%) rename source/renderer/app/containers/news/{NewsOverlayContainer.ts => NewsOverlayContainer.tsx} (100%) rename source/renderer/app/containers/notifications/{NotificationsContainer.ts => NotificationsContainer.tsx} (100%) rename source/renderer/app/containers/profile/{DataLayerMigrationPage.ts => DataLayerMigrationPage.tsx} (100%) rename source/renderer/app/containers/profile/{InitialSettingsPage.ts => InitialSettingsPage.tsx} (100%) rename source/renderer/app/containers/profile/{TermsOfUsePage.ts => TermsOfUsePage.tsx} (100%) rename source/renderer/app/containers/settings/{Settings.ts => Settings.tsx} (100%) rename source/renderer/app/containers/settings/categories/{DisplaySettingsPage.ts => DisplaySettingsPage.tsx} (100%) rename source/renderer/app/containers/settings/categories/{GeneralSettingsPage.ts => GeneralSettingsPage.tsx} (100%) rename source/renderer/app/containers/settings/categories/{SecuritySettingsPage.ts => SecuritySettingsPage.tsx} (100%) rename source/renderer/app/containers/settings/categories/{StakePoolsSettingsPage.ts => StakePoolsSettingsPage.tsx} (100%) rename source/renderer/app/containers/settings/categories/{SupportSettingsPage.ts => SupportSettingsPage.tsx} (100%) rename source/renderer/app/containers/settings/categories/{TermsOfUseSettingsPage.ts => TermsOfUseSettingsPage.tsx} (100%) rename source/renderer/app/containers/settings/categories/{WalletsSettingsPage.ts => WalletsSettingsPage.tsx} (100%) rename source/renderer/app/containers/splash/{SplashNetworkPage.ts => SplashNetworkPage.tsx} (100%) rename source/renderer/app/containers/staking/{DelegationCenterPage.ts => DelegationCenterPage.tsx} (100%) rename source/renderer/app/containers/staking/{RedeemItnRewardsContainer.ts => RedeemItnRewardsContainer.tsx} (100%) rename source/renderer/app/containers/staking/{StakePoolsListPage.ts => StakePoolsListPage.tsx} (100%) rename source/renderer/app/containers/staking/{Staking.ts => Staking.tsx} (100%) rename source/renderer/app/containers/staking/{StakingCountdownPage.ts => StakingCountdownPage.tsx} (100%) rename source/renderer/app/containers/staking/{StakingEpochsPage.ts => StakingEpochsPage.tsx} (100%) rename source/renderer/app/containers/staking/{StakingInfoPage.ts => StakingInfoPage.tsx} (100%) rename source/renderer/app/containers/staking/{StakingRewardsPage.ts => StakingRewardsPage.tsx} (100%) rename source/renderer/app/containers/staking/dialogs/{DelegationSetupWizardDialogContainer.ts => DelegationSetupWizardDialogContainer.tsx} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{NoWalletsContainer.ts => NoWalletsContainer.tsx} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{RedemptionUnavailableContainer.ts => RedemptionUnavailableContainer.tsx} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{Step1ConfigurationContainer.ts => Step1ConfigurationContainer.tsx} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{Step2ConfirmationContainer.ts => Step2ConfirmationContainer.tsx} (100%) rename source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/{Step3ResultContainer.ts => Step3ResultContainer.tsx} (100%) rename source/renderer/app/containers/static/{AboutDialog.ts => AboutDialog.tsx} (100%) rename source/renderer/app/containers/status/{DaedalusDiagnosticsDialog.ts => DaedalusDiagnosticsDialog.tsx} (100%) rename source/renderer/app/containers/voting/{VotingRegistrationPage.ts => VotingRegistrationPage.tsx} (100%) rename source/renderer/app/containers/voting/dialogs/{VotingRegistrationDialogContainer.ts => VotingRegistrationDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/{PaperWalletCreateCertificatePage.ts => PaperWalletCreateCertificatePage.tsx} (100%) rename source/renderer/app/containers/wallet/{TransferFundsPage.ts => TransferFundsPage.tsx} (100%) rename source/renderer/app/containers/wallet/{Wallet.ts => Wallet.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletAddPage.ts => WalletAddPage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletReceivePage.ts => WalletReceivePage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletSendPage.ts => WalletSendPage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletSettingsPage.ts => WalletSettingsPage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletSummaryPage.ts => WalletSummaryPage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletTokensPage.ts => WalletTokensPage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletTransactionsPage.ts => WalletTransactionsPage.tsx} (100%) rename source/renderer/app/containers/wallet/{WalletUtxoPage.ts => WalletUtxoPage.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletBackupDialogContainer.ts => WalletBackupDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletConnectDialogContainer.ts => WalletConnectDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletCreateDialogContainer.ts => WalletCreateDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletCreateDialogContainerOld.ts => WalletCreateDialogContainerOld.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletImportDialogContainer.ts => WalletImportDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletRestoreDialogContainer.ts => WalletRestoreDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletRestoreDialogContainerOld.ts => WalletRestoreDialogContainerOld.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/{WalletSendConfirmationDialogContainer.ts => WalletSendConfirmationDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{CompletionDialogContainer.ts => CompletionDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{InstructionsDialogContainer.ts => InstructionsDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{PrintDialogContainer.ts => PrintDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{SecuringPasswordDialogContainer.ts => SecuringPasswordDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/{VerificationDialogContainer.ts => VerificationDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{ChangeSpendingPasswordDialogContainer.ts => ChangeSpendingPasswordDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{DeleteWalletDialogContainer.ts => DeleteWalletDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{ExportWalletToFileDialogContainer.ts => ExportWalletToFileDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{PublicKeyDialogContainer.ts => PublicKeyDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{PublicKeyQRCodeDialogContainer.ts => PublicKeyQRCodeDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{UndelegateWalletDialogContainer.ts => UndelegateWalletDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{UnpairWalletDialogContainer.ts => UnpairWalletDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/settings/{WalletRecoveryPhraseContainer.ts => WalletRecoveryPhraseContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/transfer-funds/{TransferFundsStep1Container.ts => TransferFundsStep1Container.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/transfer-funds/{TransferFundsStep2Container.ts => TransferFundsStep2Container.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{ConfigDialogContainer.ts => ConfigDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{HashDialogContainer.ts => HashDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{InstructionsDialogContainer.ts => InstructionsDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{MnemonicsDialogContainer.ts => MnemonicsDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{TemplateDialogContainer.ts => TemplateDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-create/{ValidateDialogContainer.ts => ValidateDialogContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-import/{WalletFileImportStepContainer.ts => WalletFileImportStepContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-import/{WalletSelectImportStepContainer.ts => WalletSelectImportStepContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepConfigurationContainer.ts => StepConfigurationContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepMnemonicsContainer.ts => StepMnemonicsContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepSuccessContainer.ts => StepSuccessContainer.tsx} (100%) rename source/renderer/app/containers/wallet/dialogs/wallet-restore/{StepWalletTypeContainer.ts => StepWalletTypeContainer.tsx} (100%) rename source/renderer/app/features/discreet-mode/__mocks__/{react-svg-inline.ts => react-svg-inline.tsx} (100%) rename source/renderer/app/features/discreet-mode/{context.ts => context.tsx} (100%) rename source/renderer/app/features/discreet-mode/{integration-tests.spec.ts => integration-tests.spec.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetTokenWalletAmount.ts => DiscreetTokenWalletAmount.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetValue.story.ts => DiscreetValue.story.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetValue.ts => DiscreetValue.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/{DiscreetWalletAmount.ts => DiscreetWalletAmount.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/{DiscreetToggleTopBar.ts => DiscreetToggleTopBar.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle/{DiscreetModeToggle.story.ts => DiscreetModeToggle.story.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/discreet-toggle/{DiscreetModeToggle.ts => DiscreetModeToggle.tsx} (100%) rename source/renderer/app/features/discreet-mode/ui/{withDiscreetMode.ts => withDiscreetMode.tsx} (100%) rename source/renderer/app/features/local-storage/{context.ts => context.tsx} (100%) rename source/renderer/app/features/local-storage/ui/{BrowserLocalStorageBridge.ts => BrowserLocalStorageBridge.tsx} (100%) rename source/renderer/app/{index.ts => index.tsx} (100%) rename source/renderer/app/utils/{transaction.ts => transaction.tsx} (100%) rename storybook/addons/DaedalusMenu/{DaedalusMenu.ts => DaedalusMenu.tsx} (100%) rename storybook/addons/DaedalusMenu/{register.ts => register.tsx} (100%) rename storybook/{config.ts => config.tsx} (100%) rename storybook/stories/_support/{StoryDecorator.ts => StoryDecorator.tsx} (100%) rename storybook/stories/_support/{StoryLayout.ts => StoryLayout.tsx} (100%) rename storybook/stories/_support/{StoryProvider.ts => StoryProvider.tsx} (100%) rename storybook/stories/_support/{StoryWrapper.ts => StoryWrapper.tsx} (100%) rename storybook/stories/assets/{Asset.stories.ts => Asset.stories.tsx} (100%) rename storybook/stories/assets/{AssetSettingsDialog.stories.ts => AssetSettingsDialog.stories.tsx} (100%) rename storybook/stories/common/{ItemsDropdown.stories.ts => ItemsDropdown.stories.tsx} (100%) rename storybook/stories/common/{Widgets.stories.ts => Widgets.stories.tsx} (100%) rename storybook/stories/dapps/{TransactionRequest.stories.ts => TransactionRequest.stories.tsx} (100%) rename storybook/stories/navigation/{Sidebar.stories.ts => Sidebar.stories.tsx} (100%) rename storybook/stories/navigation/{SidebarCategory.stories.ts => SidebarCategory.stories.tsx} (100%) rename storybook/stories/navigation/{SidebarWalletsMenu.stories.ts => SidebarWalletsMenu.stories.tsx} (100%) rename storybook/stories/news/{AlertsOverlay.stories.ts => AlertsOverlay.stories.tsx} (100%) rename storybook/stories/news/{AppUpdateOverlay.stories.ts => AppUpdateOverlay.stories.tsx} (100%) rename storybook/stories/news/{IncidentOverlay.stories.ts => IncidentOverlay.stories.tsx} (100%) rename storybook/stories/news/{NewsFeed.stories.ts => NewsFeed.stories.tsx} (100%) rename storybook/stories/nodes/about/{About.stories.ts => About.stories.tsx} (100%) rename storybook/stories/nodes/environment/{TopBarEnvironment.stories.ts => TopBarEnvironment.stories.tsx} (100%) rename storybook/stories/nodes/errors/{Errors.stories.ts => Errors.stories.tsx} (100%) rename storybook/stories/nodes/errors/{NoDiskSpaceError.stories.ts => NoDiskSpaceError.stories.tsx} (100%) rename storybook/stories/nodes/errors/{SystemTimeError.stories.ts => SystemTimeError.stories.tsx} (100%) rename storybook/stories/nodes/splash/{Splash.stories.ts => Splash.stories.tsx} (100%) rename storybook/stories/nodes/status/{Diagnostics.stories.ts => Diagnostics.stories.tsx} (100%) rename storybook/stories/nodes/syncing/{Syncing.stories.ts => Syncing.stories.tsx} (100%) rename storybook/stories/nodes/syncing/{SyncingConnecting.stories.ts => SyncingConnecting.stories.tsx} (100%) rename storybook/stories/nodes/updates/{DataLayerMigration.stories.ts => DataLayerMigration.stories.tsx} (100%) rename storybook/stories/nodes/updates/{Updates.stories.ts => Updates.stories.tsx} (100%) rename storybook/stories/notifications/{Notifications.stories.ts => Notifications.stories.tsx} (100%) rename storybook/stories/settings/general/{General.stories.ts => General.stories.tsx} (100%) rename storybook/stories/settings/language/{Language.stories.ts => Language.stories.tsx} (100%) rename storybook/stories/settings/utils/{SettingsWrapper.ts => SettingsWrapper.tsx} (100%) rename storybook/stories/staking/{CountdownParty.stories.ts => CountdownParty.stories.tsx} (100%) rename storybook/stories/staking/{DelegationCenter.stories.ts => DelegationCenter.stories.tsx} (100%) rename storybook/stories/staking/{DelegationSteps.stories.ts => DelegationSteps.stories.tsx} (100%) rename storybook/stories/staking/{Epochs.stories.ts => Epochs.stories.tsx} (100%) rename storybook/stories/staking/{Legacy.stories.ts => Legacy.stories.tsx} (100%) rename storybook/stories/staking/{RedeemItnWallets.stories.ts => RedeemItnWallets.stories.tsx} (100%) rename storybook/stories/staking/{Rewards.stories.ts => Rewards.stories.tsx} (100%) rename storybook/stories/staking/{StakePools.stories.ts => StakePools.stories.tsx} (100%) rename storybook/stories/staking/{StakePoolsTable.stories.ts => StakePoolsTable.stories.tsx} (100%) rename storybook/stories/staking/{Staking.stories.ts => Staking.stories.tsx} (100%) rename storybook/stories/staking/{StakingWrapper.ts => StakingWrapper.tsx} (100%) rename storybook/stories/staking/{Undelegate.stories.ts => Undelegate.stories.tsx} (100%) rename storybook/stories/voting/{Voting.stories.ts => Voting.stories.tsx} (100%) rename storybook/stories/wallets/_utils/{CreateWalletScreens.ts => CreateWalletScreens.tsx} (100%) rename storybook/stories/wallets/_utils/{HardwareWalletWithNavigationLayout.ts => HardwareWalletWithNavigationLayout.tsx} (100%) rename storybook/stories/wallets/_utils/{HardwareWalletsWrapper.ts => HardwareWalletsWrapper.tsx} (100%) rename storybook/stories/wallets/_utils/{WalletWithNavigationLayout.ts => WalletWithNavigationLayout.tsx} (100%) rename storybook/stories/wallets/_utils/{WalletsWrapper.ts => WalletsWrapper.tsx} (100%) rename storybook/stories/wallets/_utils/{defaultWalletProps.ts => defaultWalletProps.tsx} (100%) rename storybook/stories/wallets/addWallet/{Add.stories.ts => Add.stories.tsx} (100%) rename storybook/stories/wallets/addWallet/{Create.stories.ts => Create.stories.tsx} (100%) rename storybook/stories/wallets/addWallet/{Import.stories.ts => Import.stories.tsx} (100%) rename storybook/stories/wallets/addWallet/{Restore.stories.ts => Restore.stories.tsx} (100%) rename storybook/stories/wallets/addWallet/{RestoreOld.stories.ts => RestoreOld.stories.tsx} (100%) rename storybook/stories/wallets/export/{WalletExportToFile.stories.ts => WalletExportToFile.stories.tsx} (100%) rename storybook/stories/wallets/hardwareWallets/{HardwareWallets.stories.ts => HardwareWallets.stories.tsx} (100%) rename storybook/stories/wallets/import/{WalletImportFile.stories.ts => WalletImportFile.stories.tsx} (100%) rename storybook/stories/wallets/legacyWallets/{LegacyNotification.stories.ts => LegacyNotification.stories.tsx} (100%) rename storybook/stories/wallets/legacyWallets/{TransferFunds.stories.ts => TransferFunds.stories.tsx} (100%) rename storybook/stories/wallets/paperWallets/{PaperWallets.stories.ts => PaperWallets.stories.tsx} (100%) rename storybook/stories/wallets/receive/{WalletReceive.stories.ts => WalletReceive.stories.tsx} (100%) rename storybook/stories/wallets/send/{WalletSend.stories.ts => WalletSend.stories.tsx} (100%) rename storybook/stories/wallets/setPassword/{SetWalletPassword.stories.ts => SetWalletPassword.stories.tsx} (100%) rename storybook/stories/wallets/settings/{PublicKeyQRCode.stories.ts => PublicKeyQRCode.stories.tsx} (100%) rename storybook/stories/wallets/settings/{WalletDelete.stories.ts => WalletDelete.stories.tsx} (100%) rename storybook/stories/wallets/settings/{WalletPublicKey.stories.ts => WalletPublicKey.stories.tsx} (100%) rename storybook/stories/wallets/settings/{WalletRecoveryPhraseVerification.stories.ts => WalletRecoveryPhraseVerification.stories.tsx} (100%) rename storybook/stories/wallets/settings/{WalletSettings.stories.ts => WalletSettings.stories.tsx} (100%) rename storybook/stories/wallets/settings/{WalletSettingsScreen.stories.ts => WalletSettingsScreen.stories.tsx} (100%) rename storybook/stories/wallets/settings/{WalletUnpair.stories.ts => WalletUnpair.stories.tsx} (100%) rename storybook/stories/wallets/summary/{WalletSummary.stories.ts => WalletSummary.stories.tsx} (100%) rename storybook/stories/wallets/tokens/{WalletTokens.stories.ts => WalletTokens.stories.tsx} (100%) rename storybook/stories/wallets/tokens/{WalletTokensList.stories.ts => WalletTokensList.stories.tsx} (100%) rename storybook/stories/wallets/transactions/{Transaction.stories.ts => Transaction.stories.tsx} (100%) rename storybook/stories/wallets/transactions/{TransactionMetadata.stories.ts => TransactionMetadata.stories.tsx} (100%) rename storybook/stories/wallets/transactions/{TransactionsList.stories.ts => TransactionsList.stories.tsx} (100%) rename storybook/stories/wallets/transactions/{Utxo.stories.ts => Utxo.stories.tsx} (100%) rename tests/_utils/{TestDecorator.ts => TestDecorator.tsx} (100%) diff --git a/source/renderer/app/App.ts b/source/renderer/app/App.tsx similarity index 100% rename from source/renderer/app/App.ts rename to source/renderer/app/App.tsx diff --git a/source/renderer/app/Routes.ts b/source/renderer/app/Routes.tsx similarity index 100% rename from source/renderer/app/Routes.ts rename to source/renderer/app/Routes.tsx diff --git a/source/renderer/app/ThemeManager.ts b/source/renderer/app/ThemeManager.tsx similarity index 100% rename from source/renderer/app/ThemeManager.ts rename to source/renderer/app/ThemeManager.tsx diff --git a/source/renderer/app/WindowSizeManager.ts b/source/renderer/app/WindowSizeManager.tsx similarity index 100% rename from source/renderer/app/WindowSizeManager.ts rename to source/renderer/app/WindowSizeManager.tsx diff --git a/source/renderer/app/components/appUpdate/AppUpdateOverlay.ts b/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx similarity index 100% rename from source/renderer/app/components/appUpdate/AppUpdateOverlay.ts rename to source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx diff --git a/source/renderer/app/components/assets/Asset.ts b/source/renderer/app/components/assets/Asset.tsx similarity index 100% rename from source/renderer/app/components/assets/Asset.ts rename to source/renderer/app/components/assets/Asset.tsx diff --git a/source/renderer/app/components/assets/AssetAmount.ts b/source/renderer/app/components/assets/AssetAmount.tsx similarity index 100% rename from source/renderer/app/components/assets/AssetAmount.ts rename to source/renderer/app/components/assets/AssetAmount.tsx diff --git a/source/renderer/app/components/assets/AssetContent.ts b/source/renderer/app/components/assets/AssetContent.tsx similarity index 100% rename from source/renderer/app/components/assets/AssetContent.ts rename to source/renderer/app/components/assets/AssetContent.tsx diff --git a/source/renderer/app/components/assets/AssetSettingsDialog.ts b/source/renderer/app/components/assets/AssetSettingsDialog.tsx similarity index 100% rename from source/renderer/app/components/assets/AssetSettingsDialog.ts rename to source/renderer/app/components/assets/AssetSettingsDialog.tsx diff --git a/source/renderer/app/components/assets/AssetTransactionConfirmation.ts b/source/renderer/app/components/assets/AssetTransactionConfirmation.tsx similarity index 100% rename from source/renderer/app/components/assets/AssetTransactionConfirmation.ts rename to source/renderer/app/components/assets/AssetTransactionConfirmation.tsx diff --git a/source/renderer/app/components/assets/AssetsTransactionConfirmation.ts b/source/renderer/app/components/assets/AssetsTransactionConfirmation.tsx similarity index 100% rename from source/renderer/app/components/assets/AssetsTransactionConfirmation.ts rename to source/renderer/app/components/assets/AssetsTransactionConfirmation.tsx diff --git a/source/renderer/app/components/dapp/DappTransactionRequest.ts b/source/renderer/app/components/dapp/DappTransactionRequest.tsx similarity index 100% rename from source/renderer/app/components/dapp/DappTransactionRequest.ts rename to source/renderer/app/components/dapp/DappTransactionRequest.tsx diff --git a/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.ts b/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.tsx similarity index 100% rename from source/renderer/app/components/hardware-wallet/HardwareWalletStatus.ts rename to source/renderer/app/components/hardware-wallet/HardwareWalletStatus.tsx diff --git a/source/renderer/app/components/layout/CenteredLayout.ts b/source/renderer/app/components/layout/CenteredLayout.tsx similarity index 100% rename from source/renderer/app/components/layout/CenteredLayout.ts rename to source/renderer/app/components/layout/CenteredLayout.tsx diff --git a/source/renderer/app/components/layout/SidebarLayout.ts b/source/renderer/app/components/layout/SidebarLayout.tsx similarity index 100% rename from source/renderer/app/components/layout/SidebarLayout.ts rename to source/renderer/app/components/layout/SidebarLayout.tsx diff --git a/source/renderer/app/components/layout/TopBar.ts b/source/renderer/app/components/layout/TopBar.tsx similarity index 100% rename from source/renderer/app/components/layout/TopBar.ts rename to source/renderer/app/components/layout/TopBar.tsx diff --git a/source/renderer/app/components/layout/TopBarLayout.ts b/source/renderer/app/components/layout/TopBarLayout.tsx similarity index 100% rename from source/renderer/app/components/layout/TopBarLayout.ts rename to source/renderer/app/components/layout/TopBarLayout.tsx diff --git a/source/renderer/app/components/layout/VerticalFlexContainer.ts b/source/renderer/app/components/layout/VerticalFlexContainer.tsx similarity index 100% rename from source/renderer/app/components/layout/VerticalFlexContainer.ts rename to source/renderer/app/components/layout/VerticalFlexContainer.tsx diff --git a/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.ts b/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.tsx similarity index 100% rename from source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.ts rename to source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.tsx diff --git a/source/renderer/app/components/loading/syncing-connecting/LogosDisplay.ts b/source/renderer/app/components/loading/syncing-connecting/LogosDisplay.tsx similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/LogosDisplay.ts rename to source/renderer/app/components/loading/syncing-connecting/LogosDisplay.tsx diff --git a/source/renderer/app/components/loading/syncing-connecting/ReportIssue.ts b/source/renderer/app/components/loading/syncing-connecting/ReportIssue.tsx similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/ReportIssue.ts rename to source/renderer/app/components/loading/syncing-connecting/ReportIssue.tsx diff --git a/source/renderer/app/components/loading/syncing-connecting/StatusIcons.ts b/source/renderer/app/components/loading/syncing-connecting/StatusIcons.tsx similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/StatusIcons.ts rename to source/renderer/app/components/loading/syncing-connecting/StatusIcons.tsx diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.ts b/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.tsx similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.ts rename to source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.tsx diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.ts b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.tsx similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.ts rename to source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.tsx diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.ts b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.tsx similarity index 100% rename from source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.ts rename to source/renderer/app/components/loading/syncing-connecting/SyncingConnectingStatus.tsx diff --git a/source/renderer/app/components/loading/system-time-error/SystemTimeError.ts b/source/renderer/app/components/loading/system-time-error/SystemTimeError.tsx similarity index 100% rename from source/renderer/app/components/loading/system-time-error/SystemTimeError.ts rename to source/renderer/app/components/loading/system-time-error/SystemTimeError.tsx diff --git a/source/renderer/app/components/navigation/NavButton.ts b/source/renderer/app/components/navigation/NavButton.tsx similarity index 100% rename from source/renderer/app/components/navigation/NavButton.ts rename to source/renderer/app/components/navigation/NavButton.tsx diff --git a/source/renderer/app/components/navigation/NavDropdown.ts b/source/renderer/app/components/navigation/NavDropdown.tsx similarity index 100% rename from source/renderer/app/components/navigation/NavDropdown.ts rename to source/renderer/app/components/navigation/NavDropdown.tsx diff --git a/source/renderer/app/components/navigation/Navigation.ts b/source/renderer/app/components/navigation/Navigation.tsx similarity index 100% rename from source/renderer/app/components/navigation/Navigation.ts rename to source/renderer/app/components/navigation/Navigation.tsx diff --git a/source/renderer/app/components/news/AlertsOverlay.ts b/source/renderer/app/components/news/AlertsOverlay.tsx similarity index 100% rename from source/renderer/app/components/news/AlertsOverlay.ts rename to source/renderer/app/components/news/AlertsOverlay.tsx diff --git a/source/renderer/app/components/news/IncidentOverlay.ts b/source/renderer/app/components/news/IncidentOverlay.tsx similarity index 100% rename from source/renderer/app/components/news/IncidentOverlay.ts rename to source/renderer/app/components/news/IncidentOverlay.tsx diff --git a/source/renderer/app/components/news/NewsFeed.ts b/source/renderer/app/components/news/NewsFeed.tsx similarity index 100% rename from source/renderer/app/components/news/NewsFeed.ts rename to source/renderer/app/components/news/NewsFeed.tsx diff --git a/source/renderer/app/components/news/NewsItem.ts b/source/renderer/app/components/news/NewsItem.tsx similarity index 100% rename from source/renderer/app/components/news/NewsItem.ts rename to source/renderer/app/components/news/NewsItem.tsx diff --git a/source/renderer/app/components/news/UpdateItem.ts b/source/renderer/app/components/news/UpdateItem.tsx similarity index 100% rename from source/renderer/app/components/news/UpdateItem.ts rename to source/renderer/app/components/news/UpdateItem.tsx diff --git a/source/renderer/app/components/notifications/InlineNotification.ts b/source/renderer/app/components/notifications/InlineNotification.tsx similarity index 100% rename from source/renderer/app/components/notifications/InlineNotification.ts rename to source/renderer/app/components/notifications/InlineNotification.tsx diff --git a/source/renderer/app/components/notifications/LegacyBadge.ts b/source/renderer/app/components/notifications/LegacyBadge.tsx similarity index 100% rename from source/renderer/app/components/notifications/LegacyBadge.ts rename to source/renderer/app/components/notifications/LegacyBadge.tsx diff --git a/source/renderer/app/components/notifications/LegacyNotification.ts b/source/renderer/app/components/notifications/LegacyNotification.tsx similarity index 100% rename from source/renderer/app/components/notifications/LegacyNotification.ts rename to source/renderer/app/components/notifications/LegacyNotification.tsx diff --git a/source/renderer/app/components/notifications/Notification.ts b/source/renderer/app/components/notifications/Notification.tsx similarity index 100% rename from source/renderer/app/components/notifications/Notification.ts rename to source/renderer/app/components/notifications/Notification.tsx diff --git a/source/renderer/app/components/notifications/NotificationActions.ts b/source/renderer/app/components/notifications/NotificationActions.tsx similarity index 100% rename from source/renderer/app/components/notifications/NotificationActions.ts rename to source/renderer/app/components/notifications/NotificationActions.tsx diff --git a/source/renderer/app/components/notifications/RestoreNotification.ts b/source/renderer/app/components/notifications/RestoreNotification.tsx similarity index 100% rename from source/renderer/app/components/notifications/RestoreNotification.ts rename to source/renderer/app/components/notifications/RestoreNotification.tsx diff --git a/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.ts b/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.tsx similarity index 100% rename from source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.ts rename to source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.tsx diff --git a/source/renderer/app/components/profile/initial-settings/InitialSettings.ts b/source/renderer/app/components/profile/initial-settings/InitialSettings.tsx similarity index 100% rename from source/renderer/app/components/profile/initial-settings/InitialSettings.ts rename to source/renderer/app/components/profile/initial-settings/InitialSettings.tsx diff --git a/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.ts b/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.tsx similarity index 100% rename from source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.ts rename to source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.tsx diff --git a/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.ts b/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.tsx similarity index 100% rename from source/renderer/app/components/profile/terms-of-use/TermsOfUseText.ts rename to source/renderer/app/components/profile/terms-of-use/TermsOfUseText.tsx diff --git a/source/renderer/app/components/settings/SettingsLayout.ts b/source/renderer/app/components/settings/SettingsLayout.tsx similarity index 100% rename from source/renderer/app/components/settings/SettingsLayout.ts rename to source/renderer/app/components/settings/SettingsLayout.tsx diff --git a/source/renderer/app/components/settings/categories/DisplaySettings.ts b/source/renderer/app/components/settings/categories/DisplaySettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/DisplaySettings.ts rename to source/renderer/app/components/settings/categories/DisplaySettings.tsx diff --git a/source/renderer/app/components/settings/categories/GeneralSettings.ts b/source/renderer/app/components/settings/categories/GeneralSettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/GeneralSettings.ts rename to source/renderer/app/components/settings/categories/GeneralSettings.tsx diff --git a/source/renderer/app/components/settings/categories/SecuritySettings.ts b/source/renderer/app/components/settings/categories/SecuritySettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/SecuritySettings.ts rename to source/renderer/app/components/settings/categories/SecuritySettings.tsx diff --git a/source/renderer/app/components/settings/categories/StakePoolsSettings.ts b/source/renderer/app/components/settings/categories/StakePoolsSettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/StakePoolsSettings.ts rename to source/renderer/app/components/settings/categories/StakePoolsSettings.tsx diff --git a/source/renderer/app/components/settings/categories/SupportSettings.ts b/source/renderer/app/components/settings/categories/SupportSettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/SupportSettings.ts rename to source/renderer/app/components/settings/categories/SupportSettings.tsx diff --git a/source/renderer/app/components/settings/categories/TermsOfUseSettings.ts b/source/renderer/app/components/settings/categories/TermsOfUseSettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/TermsOfUseSettings.ts rename to source/renderer/app/components/settings/categories/TermsOfUseSettings.tsx diff --git a/source/renderer/app/components/settings/categories/WalletsSettings.ts b/source/renderer/app/components/settings/categories/WalletsSettings.tsx similarity index 100% rename from source/renderer/app/components/settings/categories/WalletsSettings.ts rename to source/renderer/app/components/settings/categories/WalletsSettings.tsx diff --git a/source/renderer/app/components/settings/menu/SecurityMenuItem.ts b/source/renderer/app/components/settings/menu/SecurityMenuItem.tsx similarity index 100% rename from source/renderer/app/components/settings/menu/SecurityMenuItem.ts rename to source/renderer/app/components/settings/menu/SecurityMenuItem.tsx diff --git a/source/renderer/app/components/settings/menu/SettingsMenu.ts b/source/renderer/app/components/settings/menu/SettingsMenu.tsx similarity index 100% rename from source/renderer/app/components/settings/menu/SettingsMenu.ts rename to source/renderer/app/components/settings/menu/SettingsMenu.tsx diff --git a/source/renderer/app/components/settings/menu/SettingsMenuItem.ts b/source/renderer/app/components/settings/menu/SettingsMenuItem.tsx similarity index 100% rename from source/renderer/app/components/settings/menu/SettingsMenuItem.ts rename to source/renderer/app/components/settings/menu/SettingsMenuItem.tsx diff --git a/source/renderer/app/components/sidebar/Sidebar.ts b/source/renderer/app/components/sidebar/Sidebar.tsx similarity index 100% rename from source/renderer/app/components/sidebar/Sidebar.ts rename to source/renderer/app/components/sidebar/Sidebar.tsx diff --git a/source/renderer/app/components/sidebar/SidebarCategory.ts b/source/renderer/app/components/sidebar/SidebarCategory.tsx similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategory.ts rename to source/renderer/app/components/sidebar/SidebarCategory.tsx diff --git a/source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.ts b/source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.tsx similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.ts rename to source/renderer/app/components/sidebar/SidebarCategoryNetworkInfo.tsx diff --git a/source/renderer/app/components/sidebar/SidebarCategoryWrapper.ts b/source/renderer/app/components/sidebar/SidebarCategoryWrapper.tsx similarity index 100% rename from source/renderer/app/components/sidebar/SidebarCategoryWrapper.ts rename to source/renderer/app/components/sidebar/SidebarCategoryWrapper.tsx diff --git a/source/renderer/app/components/sidebar/SidebarMenu.ts b/source/renderer/app/components/sidebar/SidebarMenu.tsx similarity index 100% rename from source/renderer/app/components/sidebar/SidebarMenu.ts rename to source/renderer/app/components/sidebar/SidebarMenu.tsx diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.ts b/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.tsx similarity index 100% rename from source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.ts rename to source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.tsx diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.ts b/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.tsx similarity index 100% rename from source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.ts rename to source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.spec.tsx diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.ts b/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.tsx similarity index 100% rename from source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.ts rename to source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.tsx diff --git a/source/renderer/app/components/sidebar/wallets/WalletSearch.ts b/source/renderer/app/components/sidebar/wallets/WalletSearch.tsx similarity index 100% rename from source/renderer/app/components/sidebar/wallets/WalletSearch.ts rename to source/renderer/app/components/sidebar/wallets/WalletSearch.tsx diff --git a/source/renderer/app/components/sidebar/wallets/WalletSortButton.ts b/source/renderer/app/components/sidebar/wallets/WalletSortButton.tsx similarity index 100% rename from source/renderer/app/components/sidebar/wallets/WalletSortButton.ts rename to source/renderer/app/components/sidebar/wallets/WalletSortButton.tsx diff --git a/source/renderer/app/components/splash/SplashNetworkFlight.ts b/source/renderer/app/components/splash/SplashNetworkFlight.tsx similarity index 100% rename from source/renderer/app/components/splash/SplashNetworkFlight.ts rename to source/renderer/app/components/splash/SplashNetworkFlight.tsx diff --git a/source/renderer/app/components/staking/StakingUnavailable.ts b/source/renderer/app/components/staking/StakingUnavailable.tsx similarity index 100% rename from source/renderer/app/components/staking/StakingUnavailable.ts rename to source/renderer/app/components/staking/StakingUnavailable.tsx diff --git a/source/renderer/app/components/staking/countdown/StakingCountdown.ts b/source/renderer/app/components/staking/countdown/StakingCountdown.tsx similarity index 100% rename from source/renderer/app/components/staking/countdown/StakingCountdown.ts rename to source/renderer/app/components/staking/countdown/StakingCountdown.tsx diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenter.ts b/source/renderer/app/components/staking/delegation-center/DelegationCenter.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenter.ts rename to source/renderer/app/components/staking/delegation-center/DelegationCenter.tsx diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.ts b/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenterBody.ts rename to source/renderer/app/components/staking/delegation-center/DelegationCenterBody.tsx diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.ts b/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.ts rename to source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.tsx diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.ts b/source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.ts rename to source/renderer/app/components/staking/delegation-center/DelegationCenterNoWallets.tsx diff --git a/source/renderer/app/components/staking/delegation-center/DonutRing.ts b/source/renderer/app/components/staking/delegation-center/DonutRing.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DonutRing.ts rename to source/renderer/app/components/staking/delegation-center/DonutRing.tsx diff --git a/source/renderer/app/components/staking/delegation-center/DropdownMenu.ts b/source/renderer/app/components/staking/delegation-center/DropdownMenu.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/DropdownMenu.ts rename to source/renderer/app/components/staking/delegation-center/DropdownMenu.tsx diff --git a/source/renderer/app/components/staking/delegation-center/WalletRow.ts b/source/renderer/app/components/staking/delegation-center/WalletRow.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/WalletRow.ts rename to source/renderer/app/components/staking/delegation-center/WalletRow.tsx diff --git a/source/renderer/app/components/staking/delegation-center/helpers.ts b/source/renderer/app/components/staking/delegation-center/helpers.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/helpers.ts rename to source/renderer/app/components/staking/delegation-center/helpers.tsx diff --git a/source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.ts b/source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.ts rename to source/renderer/app/components/staking/delegation-center/widgets/WalletAmount.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseStakePoolDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsChooseWalletDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsIntroDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsNotAvailableDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.ts b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.tsx diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.ts b/source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.tsx similarity index 100% rename from source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.ts rename to source/renderer/app/components/staking/delegation-setup-wizard/OversaturationText.tsx diff --git a/source/renderer/app/components/staking/epochs/StakingEpochs.ts b/source/renderer/app/components/staking/epochs/StakingEpochs.tsx similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochs.ts rename to source/renderer/app/components/staking/epochs/StakingEpochs.tsx diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.ts b/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.tsx similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.ts rename to source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.tsx diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.ts b/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.tsx similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsDataTable.ts rename to source/renderer/app/components/staking/epochs/StakingEpochsDataTable.tsx diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsNoData.ts b/source/renderer/app/components/staking/epochs/StakingEpochsNoData.tsx similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsNoData.ts rename to source/renderer/app/components/staking/epochs/StakingEpochsNoData.tsx diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.ts b/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.tsx similarity index 100% rename from source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.ts rename to source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.tsx diff --git a/source/renderer/app/components/staking/info/StakingInfo.ts b/source/renderer/app/components/staking/info/StakingInfo.tsx similarity index 100% rename from source/renderer/app/components/staking/info/StakingInfo.ts rename to source/renderer/app/components/staking/info/StakingInfo.tsx diff --git a/source/renderer/app/components/staking/info/StakingInfoCountdown.ts b/source/renderer/app/components/staking/info/StakingInfoCountdown.tsx similarity index 100% rename from source/renderer/app/components/staking/info/StakingInfoCountdown.ts rename to source/renderer/app/components/staking/info/StakingInfoCountdown.tsx diff --git a/source/renderer/app/components/staking/layouts/StakingWithNavigation.ts b/source/renderer/app/components/staking/layouts/StakingWithNavigation.tsx similarity index 100% rename from source/renderer/app/components/staking/layouts/StakingWithNavigation.ts rename to source/renderer/app/components/staking/layouts/StakingWithNavigation.tsx diff --git a/source/renderer/app/components/staking/legacy/BlockGenerationInfo.ts b/source/renderer/app/components/staking/legacy/BlockGenerationInfo.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/BlockGenerationInfo.ts rename to source/renderer/app/components/staking/legacy/BlockGenerationInfo.tsx diff --git a/source/renderer/app/components/staking/legacy/Staking.ts b/source/renderer/app/components/staking/legacy/Staking.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/Staking.ts rename to source/renderer/app/components/staking/legacy/Staking.tsx diff --git a/source/renderer/app/components/staking/legacy/StakingChart.ts b/source/renderer/app/components/staking/legacy/StakingChart.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingChart.ts rename to source/renderer/app/components/staking/legacy/StakingChart.tsx diff --git a/source/renderer/app/components/staking/legacy/StakingChartTooltip.ts b/source/renderer/app/components/staking/legacy/StakingChartTooltip.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingChartTooltip.ts rename to source/renderer/app/components/staking/legacy/StakingChartTooltip.tsx diff --git a/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.ts b/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingChartTooltipItem.ts rename to source/renderer/app/components/staking/legacy/StakingChartTooltipItem.tsx diff --git a/source/renderer/app/components/staking/legacy/StakingSwitch.ts b/source/renderer/app/components/staking/legacy/StakingSwitch.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingSwitch.ts rename to source/renderer/app/components/staking/legacy/StakingSwitch.tsx diff --git a/source/renderer/app/components/staking/legacy/StakingSystemState.ts b/source/renderer/app/components/staking/legacy/StakingSystemState.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingSystemState.ts rename to source/renderer/app/components/staking/legacy/StakingSystemState.tsx diff --git a/source/renderer/app/components/staking/legacy/StakingSystemStateElement.ts b/source/renderer/app/components/staking/legacy/StakingSystemStateElement.tsx similarity index 100% rename from source/renderer/app/components/staking/legacy/StakingSystemStateElement.ts rename to source/renderer/app/components/staking/legacy/StakingSystemStateElement.tsx diff --git a/source/renderer/app/components/staking/navigation/StakingNavigation.ts b/source/renderer/app/components/staking/navigation/StakingNavigation.tsx similarity index 100% rename from source/renderer/app/components/staking/navigation/StakingNavigation.ts rename to source/renderer/app/components/staking/navigation/StakingNavigation.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.ts b/source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/LoadingOverlay.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.ts b/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.ts b/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.ts b/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.ts b/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.ts b/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.tsx diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.ts b/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.tsx similarity index 100% rename from source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.ts rename to source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.tsx diff --git a/source/renderer/app/components/staking/rewards/RewardAmount.ts b/source/renderer/app/components/staking/rewards/RewardAmount.tsx similarity index 100% rename from source/renderer/app/components/staking/rewards/RewardAmount.ts rename to source/renderer/app/components/staking/rewards/RewardAmount.tsx diff --git a/source/renderer/app/components/staking/rewards/StakingRewards.ts b/source/renderer/app/components/staking/rewards/StakingRewards.tsx similarity index 100% rename from source/renderer/app/components/staking/rewards/StakingRewards.ts rename to source/renderer/app/components/staking/rewards/StakingRewards.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePools.ts b/source/renderer/app/components/staking/stake-pools/StakePools.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePools.ts rename to source/renderer/app/components/staking/stake-pools/StakePools.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsList.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsList.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsList.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsList.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsRanking.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsRanking.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsRanking.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsRanking.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsSearch.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsSearch.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsSearch.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTable.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsTable.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsTable.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsTable.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.tsx diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.ts b/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.tsx similarity index 100% rename from source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.ts rename to source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.tsx diff --git a/source/renderer/app/components/staking/widgets/PoolPopOver.ts b/source/renderer/app/components/staking/widgets/PoolPopOver.tsx similarity index 100% rename from source/renderer/app/components/staking/widgets/PoolPopOver.ts rename to source/renderer/app/components/staking/widgets/PoolPopOver.tsx diff --git a/source/renderer/app/components/staking/widgets/ThumbPool.ts b/source/renderer/app/components/staking/widgets/ThumbPool.tsx similarity index 100% rename from source/renderer/app/components/staking/widgets/ThumbPool.ts rename to source/renderer/app/components/staking/widgets/ThumbPool.tsx diff --git a/source/renderer/app/components/staking/widgets/ThumbPoolContent.ts b/source/renderer/app/components/staking/widgets/ThumbPoolContent.tsx similarity index 100% rename from source/renderer/app/components/staking/widgets/ThumbPoolContent.ts rename to source/renderer/app/components/staking/widgets/ThumbPoolContent.tsx diff --git a/source/renderer/app/components/staking/widgets/ThumbSelectedPool.ts b/source/renderer/app/components/staking/widgets/ThumbSelectedPool.tsx similarity index 100% rename from source/renderer/app/components/staking/widgets/ThumbSelectedPool.ts rename to source/renderer/app/components/staking/widgets/ThumbSelectedPool.tsx diff --git a/source/renderer/app/components/staking/widgets/TooltipPool.ts b/source/renderer/app/components/staking/widgets/TooltipPool.tsx similarity index 100% rename from source/renderer/app/components/staking/widgets/TooltipPool.ts rename to source/renderer/app/components/staking/widgets/TooltipPool.tsx diff --git a/source/renderer/app/components/static/About.ts b/source/renderer/app/components/static/About.tsx similarity index 100% rename from source/renderer/app/components/static/About.ts rename to source/renderer/app/components/static/About.tsx diff --git a/source/renderer/app/components/status/DaedalusDiagnostics.ts b/source/renderer/app/components/status/DaedalusDiagnostics.tsx similarity index 100% rename from source/renderer/app/components/status/DaedalusDiagnostics.ts rename to source/renderer/app/components/status/DaedalusDiagnostics.tsx diff --git a/source/renderer/app/components/voting/VotingFooterLinks.ts b/source/renderer/app/components/voting/VotingFooterLinks.tsx similarity index 100% rename from source/renderer/app/components/voting/VotingFooterLinks.ts rename to source/renderer/app/components/voting/VotingFooterLinks.tsx diff --git a/source/renderer/app/components/voting/VotingNoWallets.ts b/source/renderer/app/components/voting/VotingNoWallets.tsx similarity index 100% rename from source/renderer/app/components/voting/VotingNoWallets.ts rename to source/renderer/app/components/voting/VotingNoWallets.tsx diff --git a/source/renderer/app/components/voting/VotingRegistrationDialogWizard.ts b/source/renderer/app/components/voting/VotingRegistrationDialogWizard.tsx similarity index 100% rename from source/renderer/app/components/voting/VotingRegistrationDialogWizard.ts rename to source/renderer/app/components/voting/VotingRegistrationDialogWizard.tsx diff --git a/source/renderer/app/components/voting/VotingUnavailable.ts b/source/renderer/app/components/voting/VotingUnavailable.tsx similarity index 100% rename from source/renderer/app/components/voting/VotingUnavailable.ts rename to source/renderer/app/components/voting/VotingUnavailable.tsx diff --git a/source/renderer/app/components/voting/voting-info/AppStore.ts b/source/renderer/app/components/voting/voting-info/AppStore.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/AppStore.ts rename to source/renderer/app/components/voting/voting-info/AppStore.tsx diff --git a/source/renderer/app/components/voting/voting-info/Headline.ts b/source/renderer/app/components/voting/voting-info/Headline.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/Headline.ts rename to source/renderer/app/components/voting/voting-info/Headline.tsx diff --git a/source/renderer/app/components/voting/voting-info/RegisterToVote.ts b/source/renderer/app/components/voting/voting-info/RegisterToVote.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/RegisterToVote.ts rename to source/renderer/app/components/voting/voting-info/RegisterToVote.tsx diff --git a/source/renderer/app/components/voting/voting-info/ResultsPhase.ts b/source/renderer/app/components/voting/voting-info/ResultsPhase.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/ResultsPhase.ts rename to source/renderer/app/components/voting/voting-info/ResultsPhase.tsx diff --git a/source/renderer/app/components/voting/voting-info/SnapshotPhase.ts b/source/renderer/app/components/voting/voting-info/SnapshotPhase.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/SnapshotPhase.ts rename to source/renderer/app/components/voting/voting-info/SnapshotPhase.tsx diff --git a/source/renderer/app/components/voting/voting-info/TallyingPhase.ts b/source/renderer/app/components/voting/voting-info/TallyingPhase.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/TallyingPhase.ts rename to source/renderer/app/components/voting/voting-info/TallyingPhase.tsx diff --git a/source/renderer/app/components/voting/voting-info/VotingInfo.ts b/source/renderer/app/components/voting/voting-info/VotingInfo.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/VotingInfo.ts rename to source/renderer/app/components/voting/voting-info/VotingInfo.tsx diff --git a/source/renderer/app/components/voting/voting-info/VotingPhase.ts b/source/renderer/app/components/voting/voting-info/VotingPhase.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-info/VotingPhase.ts rename to source/renderer/app/components/voting/voting-info/VotingPhase.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsChooseWallet.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsQrCode.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.tsx diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.ts b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.tsx similarity index 100% rename from source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.ts rename to source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.tsx diff --git a/source/renderer/app/components/wallet/WalletAdd.ts b/source/renderer/app/components/wallet/WalletAdd.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletAdd.ts rename to source/renderer/app/components/wallet/WalletAdd.tsx diff --git a/source/renderer/app/components/wallet/WalletBackupDialog.ts b/source/renderer/app/components/wallet/WalletBackupDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletBackupDialog.ts rename to source/renderer/app/components/wallet/WalletBackupDialog.tsx diff --git a/source/renderer/app/components/wallet/WalletConnectDialog.ts b/source/renderer/app/components/wallet/WalletConnectDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletConnectDialog.ts rename to source/renderer/app/components/wallet/WalletConnectDialog.tsx diff --git a/source/renderer/app/components/wallet/WalletCreateDialog.ts b/source/renderer/app/components/wallet/WalletCreateDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletCreateDialog.ts rename to source/renderer/app/components/wallet/WalletCreateDialog.tsx diff --git a/source/renderer/app/components/wallet/WalletRestoreDialog.ts b/source/renderer/app/components/wallet/WalletRestoreDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletRestoreDialog.ts rename to source/renderer/app/components/wallet/WalletRestoreDialog.tsx diff --git a/source/renderer/app/components/wallet/WalletSendForm.spec.ts b/source/renderer/app/components/wallet/WalletSendForm.spec.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletSendForm.spec.ts rename to source/renderer/app/components/wallet/WalletSendForm.spec.tsx diff --git a/source/renderer/app/components/wallet/WalletSendForm.ts b/source/renderer/app/components/wallet/WalletSendForm.tsx similarity index 100% rename from source/renderer/app/components/wallet/WalletSendForm.ts rename to source/renderer/app/components/wallet/WalletSendForm.tsx diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.ts b/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.ts rename to source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.tsx diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.ts b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.tsx similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.ts rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.tsx diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.ts b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.ts rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.tsx diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.ts b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.ts rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.tsx diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.ts b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.tsx similarity index 100% rename from source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.ts rename to source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.tsx diff --git a/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.ts b/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/file-import/WalletFileImportDialog.ts rename to source/renderer/app/components/wallet/file-import/WalletFileImportDialog.tsx diff --git a/source/renderer/app/components/wallet/layouts/WalletWithNavigation.ts b/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx similarity index 100% rename from source/renderer/app/components/wallet/layouts/WalletWithNavigation.ts rename to source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx diff --git a/source/renderer/app/components/wallet/navigation/WalletNavigation.ts b/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx similarity index 100% rename from source/renderer/app/components/wallet/navigation/WalletNavigation.ts rename to source/renderer/app/components/wallet/navigation/WalletNavigation.tsx diff --git a/source/renderer/app/components/wallet/not-responding/NotResponding.ts b/source/renderer/app/components/wallet/not-responding/NotResponding.tsx similarity index 100% rename from source/renderer/app/components/wallet/not-responding/NotResponding.ts rename to source/renderer/app/components/wallet/not-responding/NotResponding.tsx diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.ts b/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.ts rename to source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.ts b/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.ts rename to source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.ts b/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.ts rename to source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.ts b/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.ts rename to source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.ts b/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.ts rename to source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.ts b/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.ts rename to source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx diff --git a/source/renderer/app/components/wallet/receive/AddressActions.ts b/source/renderer/app/components/wallet/receive/AddressActions.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/AddressActions.ts rename to source/renderer/app/components/wallet/receive/AddressActions.tsx diff --git a/source/renderer/app/components/wallet/receive/AddressRandom.ts b/source/renderer/app/components/wallet/receive/AddressRandom.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/AddressRandom.ts rename to source/renderer/app/components/wallet/receive/AddressRandom.tsx diff --git a/source/renderer/app/components/wallet/receive/AddressSequential.ts b/source/renderer/app/components/wallet/receive/AddressSequential.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/AddressSequential.ts rename to source/renderer/app/components/wallet/receive/AddressSequential.tsx diff --git a/source/renderer/app/components/wallet/receive/VirtualAddressesList.ts b/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/VirtualAddressesList.ts rename to source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveDialog.ts b/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/WalletReceiveDialog.ts rename to source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveRandom.ts b/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/WalletReceiveRandom.ts rename to source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveSequential.ts b/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx similarity index 100% rename from source/renderer/app/components/wallet/receive/WalletReceiveSequential.ts rename to source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx diff --git a/source/renderer/app/components/wallet/send-form/AssetInput.ts b/source/renderer/app/components/wallet/send-form/AssetInput.tsx similarity index 100% rename from source/renderer/app/components/wallet/send-form/AssetInput.ts rename to source/renderer/app/components/wallet/send-form/AssetInput.tsx diff --git a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.ts b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.ts rename to source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.ts b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.ts rename to source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.ts b/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.ts rename to source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/DelegateWalletButton.ts b/source/renderer/app/components/wallet/settings/DelegateWalletButton.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/DelegateWalletButton.ts rename to source/renderer/app/components/wallet/settings/DelegateWalletButton.tsx diff --git a/source/renderer/app/components/wallet/settings/DeleteWallet.ts b/source/renderer/app/components/wallet/settings/DeleteWallet.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/DeleteWallet.ts rename to source/renderer/app/components/wallet/settings/DeleteWallet.tsx diff --git a/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.ts b/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.ts rename to source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.tsx diff --git a/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.ts b/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.ts rename to source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.ts b/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyBox.ts rename to source/renderer/app/components/wallet/settings/ICOPublicKeyBox.tsx diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.ts b/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.ts rename to source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.ts b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.ts rename to source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/PublicKeyField.ts b/source/renderer/app/components/wallet/settings/PublicKeyField.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/PublicKeyField.ts rename to source/renderer/app/components/wallet/settings/PublicKeyField.tsx diff --git a/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.ts b/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.ts rename to source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.tsx diff --git a/source/renderer/app/components/wallet/settings/SetWalletPassword.ts b/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/SetWalletPassword.ts rename to source/renderer/app/components/wallet/settings/SetWalletPassword.tsx diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletButton.ts b/source/renderer/app/components/wallet/settings/UndelegateWalletButton.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/UndelegateWalletButton.ts rename to source/renderer/app/components/wallet/settings/UndelegateWalletButton.tsx diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.ts b/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.ts rename to source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.ts b/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.ts rename to source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/UnpairWallet.ts b/source/renderer/app/components/wallet/settings/UnpairWallet.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/UnpairWallet.ts rename to source/renderer/app/components/wallet/settings/UnpairWallet.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.ts b/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletPublicKeyBox.ts rename to source/renderer/app/components/wallet/settings/WalletPublicKeyBox.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.ts b/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.ts rename to source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.ts b/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.ts rename to source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.ts b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.ts rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.ts b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.ts rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.ts b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.ts rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.ts b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.ts rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.ts b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.ts rename to source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletSettings.ts b/source/renderer/app/components/wallet/settings/WalletSettings.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletSettings.ts rename to source/renderer/app/components/wallet/settings/WalletSettings.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.ts b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.ts rename to source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.tsx diff --git a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.ts b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.ts rename to source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/skins/AmountInputSkin.ts b/source/renderer/app/components/wallet/skins/AmountInputSkin.tsx similarity index 100% rename from source/renderer/app/components/wallet/skins/AmountInputSkin.ts rename to source/renderer/app/components/wallet/skins/AmountInputSkin.tsx diff --git a/source/renderer/app/components/wallet/summary/WalletSummary.ts b/source/renderer/app/components/wallet/summary/WalletSummary.tsx similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummary.ts rename to source/renderer/app/components/wallet/summary/WalletSummary.tsx diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryAsset.ts b/source/renderer/app/components/wallet/summary/WalletSummaryAsset.tsx similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummaryAsset.ts rename to source/renderer/app/components/wallet/summary/WalletSummaryAsset.tsx diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.ts b/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.tsx similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummaryCurrency.ts rename to source/renderer/app/components/wallet/summary/WalletSummaryCurrency.tsx diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeader.ts b/source/renderer/app/components/wallet/summary/WalletSummaryHeader.tsx similarity index 100% rename from source/renderer/app/components/wallet/summary/WalletSummaryHeader.ts rename to source/renderer/app/components/wallet/summary/WalletSummaryHeader.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.ts b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.ts rename to source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.ts b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.ts rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.stories.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.ts b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.ts rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPicker.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.ts b/source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.ts rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/WalletTokenPickerCheckbox.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.ts b/source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.ts rename to source/renderer/app/components/wallet/tokens/wallet-token-picker/hooks.spec.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.ts b/source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.ts rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletToken.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.ts b/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.ts rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenFooter.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.ts b/source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.ts rename to source/renderer/app/components/wallet/tokens/wallet-token/WalletTokenHeader.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.ts b/source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.ts rename to source/renderer/app/components/wallet/tokens/wallet-tokens-list/WalletTokensList.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.ts b/source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.ts rename to source/renderer/app/components/wallet/tokens/wallet-tokens-search/WalletTokensSearch.tsx diff --git a/source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.ts b/source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.tsx similarity index 100% rename from source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.ts rename to source/renderer/app/components/wallet/tokens/wallet-tokens/WalletTokens.tsx diff --git a/source/renderer/app/components/wallet/transactions/CancelTransactionButton.ts b/source/renderer/app/components/wallet/transactions/CancelTransactionButton.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/CancelTransactionButton.ts rename to source/renderer/app/components/wallet/transactions/CancelTransactionButton.tsx diff --git a/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.ts b/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.ts rename to source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/transactions/FilterButton.ts b/source/renderer/app/components/wallet/transactions/FilterButton.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/FilterButton.ts rename to source/renderer/app/components/wallet/transactions/FilterButton.tsx diff --git a/source/renderer/app/components/wallet/transactions/FilterDialog.ts b/source/renderer/app/components/wallet/transactions/FilterDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/FilterDialog.ts rename to source/renderer/app/components/wallet/transactions/FilterDialog.tsx diff --git a/source/renderer/app/components/wallet/transactions/FilterResultInfo.ts b/source/renderer/app/components/wallet/transactions/FilterResultInfo.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/FilterResultInfo.ts rename to source/renderer/app/components/wallet/transactions/FilterResultInfo.tsx diff --git a/source/renderer/app/components/wallet/transactions/Transaction.ts b/source/renderer/app/components/wallet/transactions/Transaction.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/Transaction.ts rename to source/renderer/app/components/wallet/transactions/Transaction.tsx diff --git a/source/renderer/app/components/wallet/transactions/TransactionTypeIcon.ts b/source/renderer/app/components/wallet/transactions/TransactionTypeIcon.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/TransactionTypeIcon.ts rename to source/renderer/app/components/wallet/transactions/TransactionTypeIcon.tsx diff --git a/source/renderer/app/components/wallet/transactions/WalletNoTransactions.ts b/source/renderer/app/components/wallet/transactions/WalletNoTransactions.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletNoTransactions.ts rename to source/renderer/app/components/wallet/transactions/WalletNoTransactions.tsx diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactions.ts b/source/renderer/app/components/wallet/transactions/WalletTransactions.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactions.ts rename to source/renderer/app/components/wallet/transactions/WalletTransactions.tsx diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.ts b/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.ts rename to source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.tsx diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsList.ts b/source/renderer/app/components/wallet/transactions/WalletTransactionsList.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactionsList.ts rename to source/renderer/app/components/wallet/transactions/WalletTransactionsList.tsx diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.ts b/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.ts rename to source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.tsx diff --git a/source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.ts b/source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.ts rename to source/renderer/app/components/wallet/transactions/metadata/MetadataValueView.tsx diff --git a/source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.ts b/source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.ts rename to source/renderer/app/components/wallet/transactions/metadata/TransactionMetadataView.tsx diff --git a/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.ts b/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.ts rename to source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.tsx diff --git a/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.ts b/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.tsx similarity index 100% rename from source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.ts rename to source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.tsx diff --git a/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.ts b/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.ts rename to source/renderer/app/components/wallet/transfer-funds/TransferFundsStep1Dialog.tsx diff --git a/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.ts b/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.ts rename to source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.tsx diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxo.ts b/source/renderer/app/components/wallet/utxo/WalletUtxo.tsx similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxo.ts rename to source/renderer/app/components/wallet/utxo/WalletUtxo.tsx diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.ts b/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.tsx similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoCursor.ts rename to source/renderer/app/components/wallet/utxo/WalletUtxoCursor.tsx diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoDescription.ts b/source/renderer/app/components/wallet/utxo/WalletUtxoDescription.tsx similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoDescription.ts rename to source/renderer/app/components/wallet/utxo/WalletUtxoDescription.tsx diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoTick.ts b/source/renderer/app/components/wallet/utxo/WalletUtxoTick.tsx similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoTick.ts rename to source/renderer/app/components/wallet/utxo/WalletUtxoTick.tsx diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.ts b/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.tsx similarity index 100% rename from source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.ts rename to source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/ConfigDialog.ts b/source/renderer/app/components/wallet/wallet-create/ConfigDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/ConfigDialog.ts rename to source/renderer/app/components/wallet/wallet-create/ConfigDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/HashDialog.ts b/source/renderer/app/components/wallet/wallet-create/HashDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/HashDialog.ts rename to source/renderer/app/components/wallet/wallet-create/HashDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/InstructionsDialog.ts b/source/renderer/app/components/wallet/wallet-create/InstructionsDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/InstructionsDialog.ts rename to source/renderer/app/components/wallet/wallet-create/InstructionsDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.ts b/source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.ts rename to source/renderer/app/components/wallet/wallet-create/MnemonicsDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/TemplateDialog.ts b/source/renderer/app/components/wallet/wallet-create/TemplateDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/TemplateDialog.ts rename to source/renderer/app/components/wallet/wallet-create/TemplateDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/ValidateDialog.ts b/source/renderer/app/components/wallet/wallet-create/ValidateDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/ValidateDialog.ts rename to source/renderer/app/components/wallet/wallet-create/ValidateDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.ts b/source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.ts rename to source/renderer/app/components/wallet/wallet-create/WalletCreateDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.ts b/source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.ts rename to source/renderer/app/components/wallet/wallet-create/WalletCreateSteps.tsx diff --git a/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.ts b/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.ts rename to source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.ts b/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.ts rename to source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.ts b/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.ts rename to source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.ts b/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.ts rename to source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.ts b/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/SuccessDialog.ts rename to source/renderer/app/components/wallet/wallet-restore/SuccessDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.ts b/source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.ts rename to source/renderer/app/components/wallet/wallet-restore/WalletTypeDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.ts b/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.ts rename to source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.ts b/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.ts rename to source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.tsx diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.ts b/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.tsx similarity index 100% rename from source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.ts rename to source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreSteps.tsx diff --git a/source/renderer/app/components/widgets/BackToTopButton.ts b/source/renderer/app/components/widgets/BackToTopButton.tsx similarity index 100% rename from source/renderer/app/components/widgets/BackToTopButton.ts rename to source/renderer/app/components/widgets/BackToTopButton.tsx diff --git a/source/renderer/app/components/widgets/BigButtonForDialogs.ts b/source/renderer/app/components/widgets/BigButtonForDialogs.tsx similarity index 100% rename from source/renderer/app/components/widgets/BigButtonForDialogs.ts rename to source/renderer/app/components/widgets/BigButtonForDialogs.tsx diff --git a/source/renderer/app/components/widgets/BorderedBox.ts b/source/renderer/app/components/widgets/BorderedBox.tsx similarity index 100% rename from source/renderer/app/components/widgets/BorderedBox.ts rename to source/renderer/app/components/widgets/BorderedBox.tsx diff --git a/source/renderer/app/components/widgets/ButtonLink.ts b/source/renderer/app/components/widgets/ButtonLink.tsx similarity index 100% rename from source/renderer/app/components/widgets/ButtonLink.ts rename to source/renderer/app/components/widgets/ButtonLink.tsx diff --git a/source/renderer/app/components/widgets/CountdownWidget.ts b/source/renderer/app/components/widgets/CountdownWidget.tsx similarity index 100% rename from source/renderer/app/components/widgets/CountdownWidget.ts rename to source/renderer/app/components/widgets/CountdownWidget.tsx diff --git a/source/renderer/app/components/widgets/Dialog.ts b/source/renderer/app/components/widgets/Dialog.tsx similarity index 100% rename from source/renderer/app/components/widgets/Dialog.ts rename to source/renderer/app/components/widgets/Dialog.tsx diff --git a/source/renderer/app/components/widgets/DialogBackButton.ts b/source/renderer/app/components/widgets/DialogBackButton.tsx similarity index 100% rename from source/renderer/app/components/widgets/DialogBackButton.ts rename to source/renderer/app/components/widgets/DialogBackButton.tsx diff --git a/source/renderer/app/components/widgets/DialogCloseButton.ts b/source/renderer/app/components/widgets/DialogCloseButton.tsx similarity index 100% rename from source/renderer/app/components/widgets/DialogCloseButton.ts rename to source/renderer/app/components/widgets/DialogCloseButton.tsx diff --git a/source/renderer/app/components/widgets/ExternalLinkButton.ts b/source/renderer/app/components/widgets/ExternalLinkButton.tsx similarity index 100% rename from source/renderer/app/components/widgets/ExternalLinkButton.ts rename to source/renderer/app/components/widgets/ExternalLinkButton.tsx diff --git a/source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.ts b/source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.tsx similarity index 100% rename from source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.ts rename to source/renderer/app/components/widgets/FormattedHTMLMessageWithLink.tsx diff --git a/source/renderer/app/components/widgets/FullyDecentralizedEffect.ts b/source/renderer/app/components/widgets/FullyDecentralizedEffect.tsx similarity index 100% rename from source/renderer/app/components/widgets/FullyDecentralizedEffect.ts rename to source/renderer/app/components/widgets/FullyDecentralizedEffect.tsx diff --git a/source/renderer/app/components/widgets/LoadingSpinner.ts b/source/renderer/app/components/widgets/LoadingSpinner.tsx similarity index 100% rename from source/renderer/app/components/widgets/LoadingSpinner.ts rename to source/renderer/app/components/widgets/LoadingSpinner.tsx diff --git a/source/renderer/app/components/widgets/NewsFeedIcon.ts b/source/renderer/app/components/widgets/NewsFeedIcon.tsx similarity index 100% rename from source/renderer/app/components/widgets/NewsFeedIcon.ts rename to source/renderer/app/components/widgets/NewsFeedIcon.tsx diff --git a/source/renderer/app/components/widgets/NodeSyncStatusIcon.ts b/source/renderer/app/components/widgets/NodeSyncStatusIcon.tsx similarity index 100% rename from source/renderer/app/components/widgets/NodeSyncStatusIcon.ts rename to source/renderer/app/components/widgets/NodeSyncStatusIcon.tsx diff --git a/source/renderer/app/components/widgets/ProgressBar.ts b/source/renderer/app/components/widgets/ProgressBar.tsx similarity index 100% rename from source/renderer/app/components/widgets/ProgressBar.ts rename to source/renderer/app/components/widgets/ProgressBar.tsx diff --git a/source/renderer/app/components/widgets/ProgressBarLarge.ts b/source/renderer/app/components/widgets/ProgressBarLarge.tsx similarity index 100% rename from source/renderer/app/components/widgets/ProgressBarLarge.ts rename to source/renderer/app/components/widgets/ProgressBarLarge.tsx diff --git a/source/renderer/app/components/widgets/RadioSet.ts b/source/renderer/app/components/widgets/RadioSet.tsx similarity index 100% rename from source/renderer/app/components/widgets/RadioSet.ts rename to source/renderer/app/components/widgets/RadioSet.tsx diff --git a/source/renderer/app/components/widgets/Slider.ts b/source/renderer/app/components/widgets/Slider.tsx similarity index 100% rename from source/renderer/app/components/widgets/Slider.ts rename to source/renderer/app/components/widgets/Slider.tsx diff --git a/source/renderer/app/components/widgets/TadaButton.ts b/source/renderer/app/components/widgets/TadaButton.tsx similarity index 100% rename from source/renderer/app/components/widgets/TadaButton.ts rename to source/renderer/app/components/widgets/TadaButton.tsx diff --git a/source/renderer/app/components/widgets/WalletTestEnvironmentLabel.ts b/source/renderer/app/components/widgets/WalletTestEnvironmentLabel.tsx similarity index 100% rename from source/renderer/app/components/widgets/WalletTestEnvironmentLabel.ts rename to source/renderer/app/components/widgets/WalletTestEnvironmentLabel.tsx diff --git a/source/renderer/app/components/widgets/WholeSelectionText.ts b/source/renderer/app/components/widgets/WholeSelectionText.tsx similarity index 100% rename from source/renderer/app/components/widgets/WholeSelectionText.ts rename to source/renderer/app/components/widgets/WholeSelectionText.tsx diff --git a/source/renderer/app/components/widgets/forms/AssetsDropdown.ts b/source/renderer/app/components/widgets/forms/AssetsDropdown.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/AssetsDropdown.ts rename to source/renderer/app/components/widgets/forms/AssetsDropdown.tsx diff --git a/source/renderer/app/components/widgets/forms/FileUploadWidget.ts b/source/renderer/app/components/widgets/forms/FileUploadWidget.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/FileUploadWidget.ts rename to source/renderer/app/components/widgets/forms/FileUploadWidget.tsx diff --git a/source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.ts b/source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.ts rename to source/renderer/app/components/widgets/forms/FormFieldSkinTooltip.tsx diff --git a/source/renderer/app/components/widgets/forms/ImageUploadWidget.ts b/source/renderer/app/components/widgets/forms/ImageUploadWidget.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/ImageUploadWidget.ts rename to source/renderer/app/components/widgets/forms/ImageUploadWidget.tsx diff --git a/source/renderer/app/components/widgets/forms/InlineEditingDropdown.ts b/source/renderer/app/components/widgets/forms/InlineEditingDropdown.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/InlineEditingDropdown.ts rename to source/renderer/app/components/widgets/forms/InlineEditingDropdown.tsx diff --git a/source/renderer/app/components/widgets/forms/InlineEditingInput.ts b/source/renderer/app/components/widgets/forms/InlineEditingInput.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/InlineEditingInput.ts rename to source/renderer/app/components/widgets/forms/InlineEditingInput.tsx diff --git a/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.ts b/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/InlineEditingSmallInput.ts rename to source/renderer/app/components/widgets/forms/InlineEditingSmallInput.tsx diff --git a/source/renderer/app/components/widgets/forms/ItemDropdownOption.ts b/source/renderer/app/components/widgets/forms/ItemDropdownOption.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/ItemDropdownOption.ts rename to source/renderer/app/components/widgets/forms/ItemDropdownOption.tsx diff --git a/source/renderer/app/components/widgets/forms/ItemsDropdown.ts b/source/renderer/app/components/widgets/forms/ItemsDropdown.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/ItemsDropdown.ts rename to source/renderer/app/components/widgets/forms/ItemsDropdown.tsx diff --git a/source/renderer/app/components/widgets/forms/MnemonicInputWidget.ts b/source/renderer/app/components/widgets/forms/MnemonicInputWidget.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/MnemonicInputWidget.ts rename to source/renderer/app/components/widgets/forms/MnemonicInputWidget.tsx diff --git a/source/renderer/app/components/widgets/forms/NormalSwitch.ts b/source/renderer/app/components/widgets/forms/NormalSwitch.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/NormalSwitch.ts rename to source/renderer/app/components/widgets/forms/NormalSwitch.tsx diff --git a/source/renderer/app/components/widgets/forms/PasswordInput.ts b/source/renderer/app/components/widgets/forms/PasswordInput.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/PasswordInput.ts rename to source/renderer/app/components/widgets/forms/PasswordInput.tsx diff --git a/source/renderer/app/components/widgets/forms/PinCode.ts b/source/renderer/app/components/widgets/forms/PinCode.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/PinCode.ts rename to source/renderer/app/components/widgets/forms/PinCode.tsx diff --git a/source/renderer/app/components/widgets/forms/ProfileSettingsForm.ts b/source/renderer/app/components/widgets/forms/ProfileSettingsForm.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/ProfileSettingsForm.ts rename to source/renderer/app/components/widgets/forms/ProfileSettingsForm.tsx diff --git a/source/renderer/app/components/widgets/forms/ReadOnlyInput.ts b/source/renderer/app/components/widgets/forms/ReadOnlyInput.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/ReadOnlyInput.ts rename to source/renderer/app/components/widgets/forms/ReadOnlyInput.tsx diff --git a/source/renderer/app/components/widgets/forms/TinyButton.ts b/source/renderer/app/components/widgets/forms/TinyButton.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyButton.ts rename to source/renderer/app/components/widgets/forms/TinyButton.tsx diff --git a/source/renderer/app/components/widgets/forms/TinyCheckbox.ts b/source/renderer/app/components/widgets/forms/TinyCheckbox.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyCheckbox.ts rename to source/renderer/app/components/widgets/forms/TinyCheckbox.tsx diff --git a/source/renderer/app/components/widgets/forms/TinyDatePicker.ts b/source/renderer/app/components/widgets/forms/TinyDatePicker.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyDatePicker.ts rename to source/renderer/app/components/widgets/forms/TinyDatePicker.tsx diff --git a/source/renderer/app/components/widgets/forms/TinyInput.ts b/source/renderer/app/components/widgets/forms/TinyInput.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/TinyInput.ts rename to source/renderer/app/components/widgets/forms/TinyInput.tsx diff --git a/source/renderer/app/components/widgets/forms/TinySelect.ts b/source/renderer/app/components/widgets/forms/TinySelect.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/TinySelect.ts rename to source/renderer/app/components/widgets/forms/TinySelect.tsx diff --git a/source/renderer/app/components/widgets/forms/TinySwitch.ts b/source/renderer/app/components/widgets/forms/TinySwitch.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/TinySwitch.ts rename to source/renderer/app/components/widgets/forms/TinySwitch.tsx diff --git a/source/renderer/app/components/widgets/forms/WalletsDropdown.ts b/source/renderer/app/components/widgets/forms/WalletsDropdown.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/WalletsDropdown.ts rename to source/renderer/app/components/widgets/forms/WalletsDropdown.tsx diff --git a/source/renderer/app/components/widgets/forms/WalletsDropdownLabel.ts b/source/renderer/app/components/widgets/forms/WalletsDropdownLabel.tsx similarity index 100% rename from source/renderer/app/components/widgets/forms/WalletsDropdownLabel.ts rename to source/renderer/app/components/widgets/forms/WalletsDropdownLabel.tsx diff --git a/source/renderer/app/components/widgets/notification-dot/NotificationDot.ts b/source/renderer/app/components/widgets/notification-dot/NotificationDot.tsx similarity index 100% rename from source/renderer/app/components/widgets/notification-dot/NotificationDot.ts rename to source/renderer/app/components/widgets/notification-dot/NotificationDot.tsx diff --git a/source/renderer/app/components/widgets/splash/Splash.ts b/source/renderer/app/components/widgets/splash/Splash.tsx similarity index 100% rename from source/renderer/app/components/widgets/splash/Splash.ts rename to source/renderer/app/components/widgets/splash/Splash.tsx diff --git a/source/renderer/app/containers/MainLayout.ts b/source/renderer/app/containers/MainLayout.tsx similarity index 100% rename from source/renderer/app/containers/MainLayout.ts rename to source/renderer/app/containers/MainLayout.tsx diff --git a/source/renderer/app/containers/Root.ts b/source/renderer/app/containers/Root.tsx similarity index 100% rename from source/renderer/app/containers/Root.ts rename to source/renderer/app/containers/Root.tsx diff --git a/source/renderer/app/containers/TopBarContainer.ts b/source/renderer/app/containers/TopBarContainer.tsx similarity index 100% rename from source/renderer/app/containers/TopBarContainer.ts rename to source/renderer/app/containers/TopBarContainer.tsx diff --git a/source/renderer/app/containers/appUpdate/AppUpdateContainer.ts b/source/renderer/app/containers/appUpdate/AppUpdateContainer.tsx similarity index 100% rename from source/renderer/app/containers/appUpdate/AppUpdateContainer.ts rename to source/renderer/app/containers/appUpdate/AppUpdateContainer.tsx diff --git a/source/renderer/app/containers/assets/AssetSettingsDialogContainer.ts b/source/renderer/app/containers/assets/AssetSettingsDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/assets/AssetSettingsDialogContainer.ts rename to source/renderer/app/containers/assets/AssetSettingsDialogContainer.tsx diff --git a/source/renderer/app/containers/loading/LoadingPage.ts b/source/renderer/app/containers/loading/LoadingPage.tsx similarity index 100% rename from source/renderer/app/containers/loading/LoadingPage.ts rename to source/renderer/app/containers/loading/LoadingPage.tsx diff --git a/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.ts b/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.tsx similarity index 100% rename from source/renderer/app/containers/loading/NoDiskSpaceErrorPage.ts rename to source/renderer/app/containers/loading/NoDiskSpaceErrorPage.tsx diff --git a/source/renderer/app/containers/loading/SyncingConnectingPage.ts b/source/renderer/app/containers/loading/SyncingConnectingPage.tsx similarity index 100% rename from source/renderer/app/containers/loading/SyncingConnectingPage.ts rename to source/renderer/app/containers/loading/SyncingConnectingPage.tsx diff --git a/source/renderer/app/containers/loading/SystemTimeErrorPage.ts b/source/renderer/app/containers/loading/SystemTimeErrorPage.tsx similarity index 100% rename from source/renderer/app/containers/loading/SystemTimeErrorPage.ts rename to source/renderer/app/containers/loading/SystemTimeErrorPage.tsx diff --git a/source/renderer/app/containers/news/NewsFeedContainer.ts b/source/renderer/app/containers/news/NewsFeedContainer.tsx similarity index 100% rename from source/renderer/app/containers/news/NewsFeedContainer.ts rename to source/renderer/app/containers/news/NewsFeedContainer.tsx diff --git a/source/renderer/app/containers/news/NewsOverlayContainer.ts b/source/renderer/app/containers/news/NewsOverlayContainer.tsx similarity index 100% rename from source/renderer/app/containers/news/NewsOverlayContainer.ts rename to source/renderer/app/containers/news/NewsOverlayContainer.tsx diff --git a/source/renderer/app/containers/notifications/NotificationsContainer.ts b/source/renderer/app/containers/notifications/NotificationsContainer.tsx similarity index 100% rename from source/renderer/app/containers/notifications/NotificationsContainer.ts rename to source/renderer/app/containers/notifications/NotificationsContainer.tsx diff --git a/source/renderer/app/containers/profile/DataLayerMigrationPage.ts b/source/renderer/app/containers/profile/DataLayerMigrationPage.tsx similarity index 100% rename from source/renderer/app/containers/profile/DataLayerMigrationPage.ts rename to source/renderer/app/containers/profile/DataLayerMigrationPage.tsx diff --git a/source/renderer/app/containers/profile/InitialSettingsPage.ts b/source/renderer/app/containers/profile/InitialSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/profile/InitialSettingsPage.ts rename to source/renderer/app/containers/profile/InitialSettingsPage.tsx diff --git a/source/renderer/app/containers/profile/TermsOfUsePage.ts b/source/renderer/app/containers/profile/TermsOfUsePage.tsx similarity index 100% rename from source/renderer/app/containers/profile/TermsOfUsePage.ts rename to source/renderer/app/containers/profile/TermsOfUsePage.tsx diff --git a/source/renderer/app/containers/settings/Settings.ts b/source/renderer/app/containers/settings/Settings.tsx similarity index 100% rename from source/renderer/app/containers/settings/Settings.ts rename to source/renderer/app/containers/settings/Settings.tsx diff --git a/source/renderer/app/containers/settings/categories/DisplaySettingsPage.ts b/source/renderer/app/containers/settings/categories/DisplaySettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/DisplaySettingsPage.ts rename to source/renderer/app/containers/settings/categories/DisplaySettingsPage.tsx diff --git a/source/renderer/app/containers/settings/categories/GeneralSettingsPage.ts b/source/renderer/app/containers/settings/categories/GeneralSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/GeneralSettingsPage.ts rename to source/renderer/app/containers/settings/categories/GeneralSettingsPage.tsx diff --git a/source/renderer/app/containers/settings/categories/SecuritySettingsPage.ts b/source/renderer/app/containers/settings/categories/SecuritySettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/SecuritySettingsPage.ts rename to source/renderer/app/containers/settings/categories/SecuritySettingsPage.tsx diff --git a/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.ts b/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.ts rename to source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.tsx diff --git a/source/renderer/app/containers/settings/categories/SupportSettingsPage.ts b/source/renderer/app/containers/settings/categories/SupportSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/SupportSettingsPage.ts rename to source/renderer/app/containers/settings/categories/SupportSettingsPage.tsx diff --git a/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.ts b/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.ts rename to source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.tsx diff --git a/source/renderer/app/containers/settings/categories/WalletsSettingsPage.ts b/source/renderer/app/containers/settings/categories/WalletsSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/settings/categories/WalletsSettingsPage.ts rename to source/renderer/app/containers/settings/categories/WalletsSettingsPage.tsx diff --git a/source/renderer/app/containers/splash/SplashNetworkPage.ts b/source/renderer/app/containers/splash/SplashNetworkPage.tsx similarity index 100% rename from source/renderer/app/containers/splash/SplashNetworkPage.ts rename to source/renderer/app/containers/splash/SplashNetworkPage.tsx diff --git a/source/renderer/app/containers/staking/DelegationCenterPage.ts b/source/renderer/app/containers/staking/DelegationCenterPage.tsx similarity index 100% rename from source/renderer/app/containers/staking/DelegationCenterPage.ts rename to source/renderer/app/containers/staking/DelegationCenterPage.tsx diff --git a/source/renderer/app/containers/staking/RedeemItnRewardsContainer.ts b/source/renderer/app/containers/staking/RedeemItnRewardsContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/RedeemItnRewardsContainer.ts rename to source/renderer/app/containers/staking/RedeemItnRewardsContainer.tsx diff --git a/source/renderer/app/containers/staking/StakePoolsListPage.ts b/source/renderer/app/containers/staking/StakePoolsListPage.tsx similarity index 100% rename from source/renderer/app/containers/staking/StakePoolsListPage.ts rename to source/renderer/app/containers/staking/StakePoolsListPage.tsx diff --git a/source/renderer/app/containers/staking/Staking.ts b/source/renderer/app/containers/staking/Staking.tsx similarity index 100% rename from source/renderer/app/containers/staking/Staking.ts rename to source/renderer/app/containers/staking/Staking.tsx diff --git a/source/renderer/app/containers/staking/StakingCountdownPage.ts b/source/renderer/app/containers/staking/StakingCountdownPage.tsx similarity index 100% rename from source/renderer/app/containers/staking/StakingCountdownPage.ts rename to source/renderer/app/containers/staking/StakingCountdownPage.tsx diff --git a/source/renderer/app/containers/staking/StakingEpochsPage.ts b/source/renderer/app/containers/staking/StakingEpochsPage.tsx similarity index 100% rename from source/renderer/app/containers/staking/StakingEpochsPage.ts rename to source/renderer/app/containers/staking/StakingEpochsPage.tsx diff --git a/source/renderer/app/containers/staking/StakingInfoPage.ts b/source/renderer/app/containers/staking/StakingInfoPage.tsx similarity index 100% rename from source/renderer/app/containers/staking/StakingInfoPage.ts rename to source/renderer/app/containers/staking/StakingInfoPage.tsx diff --git a/source/renderer/app/containers/staking/StakingRewardsPage.ts b/source/renderer/app/containers/staking/StakingRewardsPage.tsx similarity index 100% rename from source/renderer/app/containers/staking/StakingRewardsPage.ts rename to source/renderer/app/containers/staking/StakingRewardsPage.tsx diff --git a/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.ts b/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.ts rename to source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.tsx diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.ts b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.ts rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.tsx diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.ts b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.ts rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.tsx diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.ts b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.ts rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.tsx diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.ts b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.ts rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.tsx diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.ts b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.tsx similarity index 100% rename from source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.ts rename to source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.tsx diff --git a/source/renderer/app/containers/static/AboutDialog.ts b/source/renderer/app/containers/static/AboutDialog.tsx similarity index 100% rename from source/renderer/app/containers/static/AboutDialog.ts rename to source/renderer/app/containers/static/AboutDialog.tsx diff --git a/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.ts b/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.tsx similarity index 100% rename from source/renderer/app/containers/status/DaedalusDiagnosticsDialog.ts rename to source/renderer/app/containers/status/DaedalusDiagnosticsDialog.tsx diff --git a/source/renderer/app/containers/voting/VotingRegistrationPage.ts b/source/renderer/app/containers/voting/VotingRegistrationPage.tsx similarity index 100% rename from source/renderer/app/containers/voting/VotingRegistrationPage.ts rename to source/renderer/app/containers/voting/VotingRegistrationPage.tsx diff --git a/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.ts b/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.ts rename to source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.ts b/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.ts rename to source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.tsx diff --git a/source/renderer/app/containers/wallet/TransferFundsPage.ts b/source/renderer/app/containers/wallet/TransferFundsPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/TransferFundsPage.ts rename to source/renderer/app/containers/wallet/TransferFundsPage.tsx diff --git a/source/renderer/app/containers/wallet/Wallet.ts b/source/renderer/app/containers/wallet/Wallet.tsx similarity index 100% rename from source/renderer/app/containers/wallet/Wallet.ts rename to source/renderer/app/containers/wallet/Wallet.tsx diff --git a/source/renderer/app/containers/wallet/WalletAddPage.ts b/source/renderer/app/containers/wallet/WalletAddPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletAddPage.ts rename to source/renderer/app/containers/wallet/WalletAddPage.tsx diff --git a/source/renderer/app/containers/wallet/WalletReceivePage.ts b/source/renderer/app/containers/wallet/WalletReceivePage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletReceivePage.ts rename to source/renderer/app/containers/wallet/WalletReceivePage.tsx diff --git a/source/renderer/app/containers/wallet/WalletSendPage.ts b/source/renderer/app/containers/wallet/WalletSendPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletSendPage.ts rename to source/renderer/app/containers/wallet/WalletSendPage.tsx diff --git a/source/renderer/app/containers/wallet/WalletSettingsPage.ts b/source/renderer/app/containers/wallet/WalletSettingsPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletSettingsPage.ts rename to source/renderer/app/containers/wallet/WalletSettingsPage.tsx diff --git a/source/renderer/app/containers/wallet/WalletSummaryPage.ts b/source/renderer/app/containers/wallet/WalletSummaryPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletSummaryPage.ts rename to source/renderer/app/containers/wallet/WalletSummaryPage.tsx diff --git a/source/renderer/app/containers/wallet/WalletTokensPage.ts b/source/renderer/app/containers/wallet/WalletTokensPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletTokensPage.ts rename to source/renderer/app/containers/wallet/WalletTokensPage.tsx diff --git a/source/renderer/app/containers/wallet/WalletTransactionsPage.ts b/source/renderer/app/containers/wallet/WalletTransactionsPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletTransactionsPage.ts rename to source/renderer/app/containers/wallet/WalletTransactionsPage.tsx diff --git a/source/renderer/app/containers/wallet/WalletUtxoPage.ts b/source/renderer/app/containers/wallet/WalletUtxoPage.tsx similarity index 100% rename from source/renderer/app/containers/wallet/WalletUtxoPage.ts rename to source/renderer/app/containers/wallet/WalletUtxoPage.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.ts b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.ts rename to source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.ts b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.ts rename to source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/CompletionDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/DeleteWalletDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.ts b/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.ts rename to source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.ts b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.ts rename to source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.ts b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.ts rename to source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.tsx diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.ts b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.tsx similarity index 100% rename from source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.ts rename to source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.tsx diff --git a/source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.ts b/source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.ts rename to source/renderer/app/features/discreet-mode/__mocks__/react-svg-inline.tsx diff --git a/source/renderer/app/features/discreet-mode/context.ts b/source/renderer/app/features/discreet-mode/context.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/context.ts rename to source/renderer/app/features/discreet-mode/context.tsx diff --git a/source/renderer/app/features/discreet-mode/integration-tests.spec.ts b/source/renderer/app/features/discreet-mode/integration-tests.spec.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/integration-tests.spec.ts rename to source/renderer/app/features/discreet-mode/integration-tests.spec.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.ts b/source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.ts rename to source/renderer/app/features/discreet-mode/ui/DiscreetTokenWalletAmount.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.ts b/source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.ts rename to source/renderer/app/features/discreet-mode/ui/DiscreetValue.story.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetValue.ts b/source/renderer/app/features/discreet-mode/ui/DiscreetValue.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetValue.ts rename to source/renderer/app/features/discreet-mode/ui/DiscreetValue.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.ts b/source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.ts rename to source/renderer/app/features/discreet-mode/ui/DiscreetWalletAmount.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.ts b/source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.ts rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle-top-bar/DiscreetToggleTopBar.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.ts b/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.ts rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.story.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.ts b/source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.ts rename to source/renderer/app/features/discreet-mode/ui/discreet-toggle/DiscreetModeToggle.tsx diff --git a/source/renderer/app/features/discreet-mode/ui/withDiscreetMode.ts b/source/renderer/app/features/discreet-mode/ui/withDiscreetMode.tsx similarity index 100% rename from source/renderer/app/features/discreet-mode/ui/withDiscreetMode.ts rename to source/renderer/app/features/discreet-mode/ui/withDiscreetMode.tsx diff --git a/source/renderer/app/features/local-storage/context.ts b/source/renderer/app/features/local-storage/context.tsx similarity index 100% rename from source/renderer/app/features/local-storage/context.ts rename to source/renderer/app/features/local-storage/context.tsx diff --git a/source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.ts b/source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.tsx similarity index 100% rename from source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.ts rename to source/renderer/app/features/local-storage/ui/BrowserLocalStorageBridge.tsx diff --git a/source/renderer/app/index.ts b/source/renderer/app/index.tsx similarity index 100% rename from source/renderer/app/index.ts rename to source/renderer/app/index.tsx diff --git a/source/renderer/app/utils/transaction.ts b/source/renderer/app/utils/transaction.tsx similarity index 100% rename from source/renderer/app/utils/transaction.ts rename to source/renderer/app/utils/transaction.tsx diff --git a/storybook/addons/DaedalusMenu/DaedalusMenu.ts b/storybook/addons/DaedalusMenu/DaedalusMenu.tsx similarity index 100% rename from storybook/addons/DaedalusMenu/DaedalusMenu.ts rename to storybook/addons/DaedalusMenu/DaedalusMenu.tsx diff --git a/storybook/addons/DaedalusMenu/register.ts b/storybook/addons/DaedalusMenu/register.tsx similarity index 100% rename from storybook/addons/DaedalusMenu/register.ts rename to storybook/addons/DaedalusMenu/register.tsx diff --git a/storybook/config.ts b/storybook/config.tsx similarity index 100% rename from storybook/config.ts rename to storybook/config.tsx diff --git a/storybook/stories/_support/StoryDecorator.ts b/storybook/stories/_support/StoryDecorator.tsx similarity index 100% rename from storybook/stories/_support/StoryDecorator.ts rename to storybook/stories/_support/StoryDecorator.tsx diff --git a/storybook/stories/_support/StoryLayout.ts b/storybook/stories/_support/StoryLayout.tsx similarity index 100% rename from storybook/stories/_support/StoryLayout.ts rename to storybook/stories/_support/StoryLayout.tsx diff --git a/storybook/stories/_support/StoryProvider.ts b/storybook/stories/_support/StoryProvider.tsx similarity index 100% rename from storybook/stories/_support/StoryProvider.ts rename to storybook/stories/_support/StoryProvider.tsx diff --git a/storybook/stories/_support/StoryWrapper.ts b/storybook/stories/_support/StoryWrapper.tsx similarity index 100% rename from storybook/stories/_support/StoryWrapper.ts rename to storybook/stories/_support/StoryWrapper.tsx diff --git a/storybook/stories/assets/Asset.stories.ts b/storybook/stories/assets/Asset.stories.tsx similarity index 100% rename from storybook/stories/assets/Asset.stories.ts rename to storybook/stories/assets/Asset.stories.tsx diff --git a/storybook/stories/assets/AssetSettingsDialog.stories.ts b/storybook/stories/assets/AssetSettingsDialog.stories.tsx similarity index 100% rename from storybook/stories/assets/AssetSettingsDialog.stories.ts rename to storybook/stories/assets/AssetSettingsDialog.stories.tsx diff --git a/storybook/stories/common/ItemsDropdown.stories.ts b/storybook/stories/common/ItemsDropdown.stories.tsx similarity index 100% rename from storybook/stories/common/ItemsDropdown.stories.ts rename to storybook/stories/common/ItemsDropdown.stories.tsx diff --git a/storybook/stories/common/Widgets.stories.ts b/storybook/stories/common/Widgets.stories.tsx similarity index 100% rename from storybook/stories/common/Widgets.stories.ts rename to storybook/stories/common/Widgets.stories.tsx diff --git a/storybook/stories/dapps/TransactionRequest.stories.ts b/storybook/stories/dapps/TransactionRequest.stories.tsx similarity index 100% rename from storybook/stories/dapps/TransactionRequest.stories.ts rename to storybook/stories/dapps/TransactionRequest.stories.tsx diff --git a/storybook/stories/navigation/Sidebar.stories.ts b/storybook/stories/navigation/Sidebar.stories.tsx similarity index 100% rename from storybook/stories/navigation/Sidebar.stories.ts rename to storybook/stories/navigation/Sidebar.stories.tsx diff --git a/storybook/stories/navigation/SidebarCategory.stories.ts b/storybook/stories/navigation/SidebarCategory.stories.tsx similarity index 100% rename from storybook/stories/navigation/SidebarCategory.stories.ts rename to storybook/stories/navigation/SidebarCategory.stories.tsx diff --git a/storybook/stories/navigation/SidebarWalletsMenu.stories.ts b/storybook/stories/navigation/SidebarWalletsMenu.stories.tsx similarity index 100% rename from storybook/stories/navigation/SidebarWalletsMenu.stories.ts rename to storybook/stories/navigation/SidebarWalletsMenu.stories.tsx diff --git a/storybook/stories/news/AlertsOverlay.stories.ts b/storybook/stories/news/AlertsOverlay.stories.tsx similarity index 100% rename from storybook/stories/news/AlertsOverlay.stories.ts rename to storybook/stories/news/AlertsOverlay.stories.tsx diff --git a/storybook/stories/news/AppUpdateOverlay.stories.ts b/storybook/stories/news/AppUpdateOverlay.stories.tsx similarity index 100% rename from storybook/stories/news/AppUpdateOverlay.stories.ts rename to storybook/stories/news/AppUpdateOverlay.stories.tsx diff --git a/storybook/stories/news/IncidentOverlay.stories.ts b/storybook/stories/news/IncidentOverlay.stories.tsx similarity index 100% rename from storybook/stories/news/IncidentOverlay.stories.ts rename to storybook/stories/news/IncidentOverlay.stories.tsx diff --git a/storybook/stories/news/NewsFeed.stories.ts b/storybook/stories/news/NewsFeed.stories.tsx similarity index 100% rename from storybook/stories/news/NewsFeed.stories.ts rename to storybook/stories/news/NewsFeed.stories.tsx diff --git a/storybook/stories/nodes/about/About.stories.ts b/storybook/stories/nodes/about/About.stories.tsx similarity index 100% rename from storybook/stories/nodes/about/About.stories.ts rename to storybook/stories/nodes/about/About.stories.tsx diff --git a/storybook/stories/nodes/environment/TopBarEnvironment.stories.ts b/storybook/stories/nodes/environment/TopBarEnvironment.stories.tsx similarity index 100% rename from storybook/stories/nodes/environment/TopBarEnvironment.stories.ts rename to storybook/stories/nodes/environment/TopBarEnvironment.stories.tsx diff --git a/storybook/stories/nodes/errors/Errors.stories.ts b/storybook/stories/nodes/errors/Errors.stories.tsx similarity index 100% rename from storybook/stories/nodes/errors/Errors.stories.ts rename to storybook/stories/nodes/errors/Errors.stories.tsx diff --git a/storybook/stories/nodes/errors/NoDiskSpaceError.stories.ts b/storybook/stories/nodes/errors/NoDiskSpaceError.stories.tsx similarity index 100% rename from storybook/stories/nodes/errors/NoDiskSpaceError.stories.ts rename to storybook/stories/nodes/errors/NoDiskSpaceError.stories.tsx diff --git a/storybook/stories/nodes/errors/SystemTimeError.stories.ts b/storybook/stories/nodes/errors/SystemTimeError.stories.tsx similarity index 100% rename from storybook/stories/nodes/errors/SystemTimeError.stories.ts rename to storybook/stories/nodes/errors/SystemTimeError.stories.tsx diff --git a/storybook/stories/nodes/splash/Splash.stories.ts b/storybook/stories/nodes/splash/Splash.stories.tsx similarity index 100% rename from storybook/stories/nodes/splash/Splash.stories.ts rename to storybook/stories/nodes/splash/Splash.stories.tsx diff --git a/storybook/stories/nodes/status/Diagnostics.stories.ts b/storybook/stories/nodes/status/Diagnostics.stories.tsx similarity index 100% rename from storybook/stories/nodes/status/Diagnostics.stories.ts rename to storybook/stories/nodes/status/Diagnostics.stories.tsx diff --git a/storybook/stories/nodes/syncing/Syncing.stories.ts b/storybook/stories/nodes/syncing/Syncing.stories.tsx similarity index 100% rename from storybook/stories/nodes/syncing/Syncing.stories.ts rename to storybook/stories/nodes/syncing/Syncing.stories.tsx diff --git a/storybook/stories/nodes/syncing/SyncingConnecting.stories.ts b/storybook/stories/nodes/syncing/SyncingConnecting.stories.tsx similarity index 100% rename from storybook/stories/nodes/syncing/SyncingConnecting.stories.ts rename to storybook/stories/nodes/syncing/SyncingConnecting.stories.tsx diff --git a/storybook/stories/nodes/updates/DataLayerMigration.stories.ts b/storybook/stories/nodes/updates/DataLayerMigration.stories.tsx similarity index 100% rename from storybook/stories/nodes/updates/DataLayerMigration.stories.ts rename to storybook/stories/nodes/updates/DataLayerMigration.stories.tsx diff --git a/storybook/stories/nodes/updates/Updates.stories.ts b/storybook/stories/nodes/updates/Updates.stories.tsx similarity index 100% rename from storybook/stories/nodes/updates/Updates.stories.ts rename to storybook/stories/nodes/updates/Updates.stories.tsx diff --git a/storybook/stories/notifications/Notifications.stories.ts b/storybook/stories/notifications/Notifications.stories.tsx similarity index 100% rename from storybook/stories/notifications/Notifications.stories.ts rename to storybook/stories/notifications/Notifications.stories.tsx diff --git a/storybook/stories/settings/general/General.stories.ts b/storybook/stories/settings/general/General.stories.tsx similarity index 100% rename from storybook/stories/settings/general/General.stories.ts rename to storybook/stories/settings/general/General.stories.tsx diff --git a/storybook/stories/settings/language/Language.stories.ts b/storybook/stories/settings/language/Language.stories.tsx similarity index 100% rename from storybook/stories/settings/language/Language.stories.ts rename to storybook/stories/settings/language/Language.stories.tsx diff --git a/storybook/stories/settings/utils/SettingsWrapper.ts b/storybook/stories/settings/utils/SettingsWrapper.tsx similarity index 100% rename from storybook/stories/settings/utils/SettingsWrapper.ts rename to storybook/stories/settings/utils/SettingsWrapper.tsx diff --git a/storybook/stories/staking/CountdownParty.stories.ts b/storybook/stories/staking/CountdownParty.stories.tsx similarity index 100% rename from storybook/stories/staking/CountdownParty.stories.ts rename to storybook/stories/staking/CountdownParty.stories.tsx diff --git a/storybook/stories/staking/DelegationCenter.stories.ts b/storybook/stories/staking/DelegationCenter.stories.tsx similarity index 100% rename from storybook/stories/staking/DelegationCenter.stories.ts rename to storybook/stories/staking/DelegationCenter.stories.tsx diff --git a/storybook/stories/staking/DelegationSteps.stories.ts b/storybook/stories/staking/DelegationSteps.stories.tsx similarity index 100% rename from storybook/stories/staking/DelegationSteps.stories.ts rename to storybook/stories/staking/DelegationSteps.stories.tsx diff --git a/storybook/stories/staking/Epochs.stories.ts b/storybook/stories/staking/Epochs.stories.tsx similarity index 100% rename from storybook/stories/staking/Epochs.stories.ts rename to storybook/stories/staking/Epochs.stories.tsx diff --git a/storybook/stories/staking/Legacy.stories.ts b/storybook/stories/staking/Legacy.stories.tsx similarity index 100% rename from storybook/stories/staking/Legacy.stories.ts rename to storybook/stories/staking/Legacy.stories.tsx diff --git a/storybook/stories/staking/RedeemItnWallets.stories.ts b/storybook/stories/staking/RedeemItnWallets.stories.tsx similarity index 100% rename from storybook/stories/staking/RedeemItnWallets.stories.ts rename to storybook/stories/staking/RedeemItnWallets.stories.tsx diff --git a/storybook/stories/staking/Rewards.stories.ts b/storybook/stories/staking/Rewards.stories.tsx similarity index 100% rename from storybook/stories/staking/Rewards.stories.ts rename to storybook/stories/staking/Rewards.stories.tsx diff --git a/storybook/stories/staking/StakePools.stories.ts b/storybook/stories/staking/StakePools.stories.tsx similarity index 100% rename from storybook/stories/staking/StakePools.stories.ts rename to storybook/stories/staking/StakePools.stories.tsx diff --git a/storybook/stories/staking/StakePoolsTable.stories.ts b/storybook/stories/staking/StakePoolsTable.stories.tsx similarity index 100% rename from storybook/stories/staking/StakePoolsTable.stories.ts rename to storybook/stories/staking/StakePoolsTable.stories.tsx diff --git a/storybook/stories/staking/Staking.stories.ts b/storybook/stories/staking/Staking.stories.tsx similarity index 100% rename from storybook/stories/staking/Staking.stories.ts rename to storybook/stories/staking/Staking.stories.tsx diff --git a/storybook/stories/staking/StakingWrapper.ts b/storybook/stories/staking/StakingWrapper.tsx similarity index 100% rename from storybook/stories/staking/StakingWrapper.ts rename to storybook/stories/staking/StakingWrapper.tsx diff --git a/storybook/stories/staking/Undelegate.stories.ts b/storybook/stories/staking/Undelegate.stories.tsx similarity index 100% rename from storybook/stories/staking/Undelegate.stories.ts rename to storybook/stories/staking/Undelegate.stories.tsx diff --git a/storybook/stories/voting/Voting.stories.ts b/storybook/stories/voting/Voting.stories.tsx similarity index 100% rename from storybook/stories/voting/Voting.stories.ts rename to storybook/stories/voting/Voting.stories.tsx diff --git a/storybook/stories/wallets/_utils/CreateWalletScreens.ts b/storybook/stories/wallets/_utils/CreateWalletScreens.tsx similarity index 100% rename from storybook/stories/wallets/_utils/CreateWalletScreens.ts rename to storybook/stories/wallets/_utils/CreateWalletScreens.tsx diff --git a/storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.ts b/storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.tsx similarity index 100% rename from storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.ts rename to storybook/stories/wallets/_utils/HardwareWalletWithNavigationLayout.tsx diff --git a/storybook/stories/wallets/_utils/HardwareWalletsWrapper.ts b/storybook/stories/wallets/_utils/HardwareWalletsWrapper.tsx similarity index 100% rename from storybook/stories/wallets/_utils/HardwareWalletsWrapper.ts rename to storybook/stories/wallets/_utils/HardwareWalletsWrapper.tsx diff --git a/storybook/stories/wallets/_utils/WalletWithNavigationLayout.ts b/storybook/stories/wallets/_utils/WalletWithNavigationLayout.tsx similarity index 100% rename from storybook/stories/wallets/_utils/WalletWithNavigationLayout.ts rename to storybook/stories/wallets/_utils/WalletWithNavigationLayout.tsx diff --git a/storybook/stories/wallets/_utils/WalletsWrapper.ts b/storybook/stories/wallets/_utils/WalletsWrapper.tsx similarity index 100% rename from storybook/stories/wallets/_utils/WalletsWrapper.ts rename to storybook/stories/wallets/_utils/WalletsWrapper.tsx diff --git a/storybook/stories/wallets/_utils/defaultWalletProps.ts b/storybook/stories/wallets/_utils/defaultWalletProps.tsx similarity index 100% rename from storybook/stories/wallets/_utils/defaultWalletProps.ts rename to storybook/stories/wallets/_utils/defaultWalletProps.tsx diff --git a/storybook/stories/wallets/addWallet/Add.stories.ts b/storybook/stories/wallets/addWallet/Add.stories.tsx similarity index 100% rename from storybook/stories/wallets/addWallet/Add.stories.ts rename to storybook/stories/wallets/addWallet/Add.stories.tsx diff --git a/storybook/stories/wallets/addWallet/Create.stories.ts b/storybook/stories/wallets/addWallet/Create.stories.tsx similarity index 100% rename from storybook/stories/wallets/addWallet/Create.stories.ts rename to storybook/stories/wallets/addWallet/Create.stories.tsx diff --git a/storybook/stories/wallets/addWallet/Import.stories.ts b/storybook/stories/wallets/addWallet/Import.stories.tsx similarity index 100% rename from storybook/stories/wallets/addWallet/Import.stories.ts rename to storybook/stories/wallets/addWallet/Import.stories.tsx diff --git a/storybook/stories/wallets/addWallet/Restore.stories.ts b/storybook/stories/wallets/addWallet/Restore.stories.tsx similarity index 100% rename from storybook/stories/wallets/addWallet/Restore.stories.ts rename to storybook/stories/wallets/addWallet/Restore.stories.tsx diff --git a/storybook/stories/wallets/addWallet/RestoreOld.stories.ts b/storybook/stories/wallets/addWallet/RestoreOld.stories.tsx similarity index 100% rename from storybook/stories/wallets/addWallet/RestoreOld.stories.ts rename to storybook/stories/wallets/addWallet/RestoreOld.stories.tsx diff --git a/storybook/stories/wallets/export/WalletExportToFile.stories.ts b/storybook/stories/wallets/export/WalletExportToFile.stories.tsx similarity index 100% rename from storybook/stories/wallets/export/WalletExportToFile.stories.ts rename to storybook/stories/wallets/export/WalletExportToFile.stories.tsx diff --git a/storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.ts b/storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.tsx similarity index 100% rename from storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.ts rename to storybook/stories/wallets/hardwareWallets/HardwareWallets.stories.tsx diff --git a/storybook/stories/wallets/import/WalletImportFile.stories.ts b/storybook/stories/wallets/import/WalletImportFile.stories.tsx similarity index 100% rename from storybook/stories/wallets/import/WalletImportFile.stories.ts rename to storybook/stories/wallets/import/WalletImportFile.stories.tsx diff --git a/storybook/stories/wallets/legacyWallets/LegacyNotification.stories.ts b/storybook/stories/wallets/legacyWallets/LegacyNotification.stories.tsx similarity index 100% rename from storybook/stories/wallets/legacyWallets/LegacyNotification.stories.ts rename to storybook/stories/wallets/legacyWallets/LegacyNotification.stories.tsx diff --git a/storybook/stories/wallets/legacyWallets/TransferFunds.stories.ts b/storybook/stories/wallets/legacyWallets/TransferFunds.stories.tsx similarity index 100% rename from storybook/stories/wallets/legacyWallets/TransferFunds.stories.ts rename to storybook/stories/wallets/legacyWallets/TransferFunds.stories.tsx diff --git a/storybook/stories/wallets/paperWallets/PaperWallets.stories.ts b/storybook/stories/wallets/paperWallets/PaperWallets.stories.tsx similarity index 100% rename from storybook/stories/wallets/paperWallets/PaperWallets.stories.ts rename to storybook/stories/wallets/paperWallets/PaperWallets.stories.tsx diff --git a/storybook/stories/wallets/receive/WalletReceive.stories.ts b/storybook/stories/wallets/receive/WalletReceive.stories.tsx similarity index 100% rename from storybook/stories/wallets/receive/WalletReceive.stories.ts rename to storybook/stories/wallets/receive/WalletReceive.stories.tsx diff --git a/storybook/stories/wallets/send/WalletSend.stories.ts b/storybook/stories/wallets/send/WalletSend.stories.tsx similarity index 100% rename from storybook/stories/wallets/send/WalletSend.stories.ts rename to storybook/stories/wallets/send/WalletSend.stories.tsx diff --git a/storybook/stories/wallets/setPassword/SetWalletPassword.stories.ts b/storybook/stories/wallets/setPassword/SetWalletPassword.stories.tsx similarity index 100% rename from storybook/stories/wallets/setPassword/SetWalletPassword.stories.ts rename to storybook/stories/wallets/setPassword/SetWalletPassword.stories.tsx diff --git a/storybook/stories/wallets/settings/PublicKeyQRCode.stories.ts b/storybook/stories/wallets/settings/PublicKeyQRCode.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/PublicKeyQRCode.stories.ts rename to storybook/stories/wallets/settings/PublicKeyQRCode.stories.tsx diff --git a/storybook/stories/wallets/settings/WalletDelete.stories.ts b/storybook/stories/wallets/settings/WalletDelete.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/WalletDelete.stories.ts rename to storybook/stories/wallets/settings/WalletDelete.stories.tsx diff --git a/storybook/stories/wallets/settings/WalletPublicKey.stories.ts b/storybook/stories/wallets/settings/WalletPublicKey.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/WalletPublicKey.stories.ts rename to storybook/stories/wallets/settings/WalletPublicKey.stories.tsx diff --git a/storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.ts b/storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.ts rename to storybook/stories/wallets/settings/WalletRecoveryPhraseVerification.stories.tsx diff --git a/storybook/stories/wallets/settings/WalletSettings.stories.ts b/storybook/stories/wallets/settings/WalletSettings.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/WalletSettings.stories.ts rename to storybook/stories/wallets/settings/WalletSettings.stories.tsx diff --git a/storybook/stories/wallets/settings/WalletSettingsScreen.stories.ts b/storybook/stories/wallets/settings/WalletSettingsScreen.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/WalletSettingsScreen.stories.ts rename to storybook/stories/wallets/settings/WalletSettingsScreen.stories.tsx diff --git a/storybook/stories/wallets/settings/WalletUnpair.stories.ts b/storybook/stories/wallets/settings/WalletUnpair.stories.tsx similarity index 100% rename from storybook/stories/wallets/settings/WalletUnpair.stories.ts rename to storybook/stories/wallets/settings/WalletUnpair.stories.tsx diff --git a/storybook/stories/wallets/summary/WalletSummary.stories.ts b/storybook/stories/wallets/summary/WalletSummary.stories.tsx similarity index 100% rename from storybook/stories/wallets/summary/WalletSummary.stories.ts rename to storybook/stories/wallets/summary/WalletSummary.stories.tsx diff --git a/storybook/stories/wallets/tokens/WalletTokens.stories.ts b/storybook/stories/wallets/tokens/WalletTokens.stories.tsx similarity index 100% rename from storybook/stories/wallets/tokens/WalletTokens.stories.ts rename to storybook/stories/wallets/tokens/WalletTokens.stories.tsx diff --git a/storybook/stories/wallets/tokens/WalletTokensList.stories.ts b/storybook/stories/wallets/tokens/WalletTokensList.stories.tsx similarity index 100% rename from storybook/stories/wallets/tokens/WalletTokensList.stories.ts rename to storybook/stories/wallets/tokens/WalletTokensList.stories.tsx diff --git a/storybook/stories/wallets/transactions/Transaction.stories.ts b/storybook/stories/wallets/transactions/Transaction.stories.tsx similarity index 100% rename from storybook/stories/wallets/transactions/Transaction.stories.ts rename to storybook/stories/wallets/transactions/Transaction.stories.tsx diff --git a/storybook/stories/wallets/transactions/TransactionMetadata.stories.ts b/storybook/stories/wallets/transactions/TransactionMetadata.stories.tsx similarity index 100% rename from storybook/stories/wallets/transactions/TransactionMetadata.stories.ts rename to storybook/stories/wallets/transactions/TransactionMetadata.stories.tsx diff --git a/storybook/stories/wallets/transactions/TransactionsList.stories.ts b/storybook/stories/wallets/transactions/TransactionsList.stories.tsx similarity index 100% rename from storybook/stories/wallets/transactions/TransactionsList.stories.ts rename to storybook/stories/wallets/transactions/TransactionsList.stories.tsx diff --git a/storybook/stories/wallets/transactions/Utxo.stories.ts b/storybook/stories/wallets/transactions/Utxo.stories.tsx similarity index 100% rename from storybook/stories/wallets/transactions/Utxo.stories.ts rename to storybook/stories/wallets/transactions/Utxo.stories.tsx diff --git a/tests/_utils/TestDecorator.ts b/tests/_utils/TestDecorator.tsx similarity index 100% rename from tests/_utils/TestDecorator.ts rename to tests/_utils/TestDecorator.tsx From 97fbbf1d80576765b4c458c0658d3b23bd7a7730 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:34:11 +0000 Subject: [PATCH 028/204] [DDW-773] removed flowRemoveTypes references from gulpfile --- gulpfile.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 77074fcb78..cff93cabb3 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -3,7 +3,6 @@ const webpack = require('webpack'); const webpackStream = require('webpack-stream'); const shell = require('gulp-shell'); const electronConnect = require('electron-connect'); -const flowRemoveTypes = require('gulp-flow-remove-types'); const mainWebpackConfig = require('./source/main/webpack.config'); const rendererWebpackConfig = require('./source/renderer/webpack.config'); @@ -134,7 +133,6 @@ gulp.task('prepare:themes:utils', () => 'source/renderer/app/themes/utils/updateThemesCLI.js', 'source/renderer/app/themes/utils/writeThemeUpdate.js', ]) - .pipe(flowRemoveTypes()) .pipe(gulp.dest('dist/utils')) ); @@ -152,7 +150,6 @@ gulp.task('prepare:themes:daedalus', () => 'source/renderer/app/themes/daedalus/white.js', 'source/renderer/app/themes/daedalus/yellow.js', ]) - .pipe(flowRemoveTypes()) .pipe(gulp.dest('dist/daedalus')) ); @@ -162,7 +159,6 @@ gulp.task('prepare:themes:scripts', () => 'source/renderer/app/themes/scripts/check.js', 'source/renderer/app/themes/scripts/update.js', ]) - .pipe(flowRemoveTypes()) .pipe(gulp.dest('dist/scripts')) ); From 0ba371860da576fb2002cc4b14f0cd4eef08716a Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:34:38 +0000 Subject: [PATCH 029/204] [DDW-773] updated gulpfile with ts references --- gulpfile.js | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index cff93cabb3..fa790a3775 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -9,8 +9,8 @@ const rendererWebpackConfig = require('./source/renderer/webpack.config'); // Setup electron-connect server to start the app in development mode let electronServer; // Gulp input sources for main and renderer compilation -const mainInputSource = () => gulp.src('source/main/index.js'); -const rendererInputSource = () => gulp.src('source/renderer/index.js'); +const mainInputSource = () => gulp.src('source/main/index.ts'); +const rendererInputSource = () => gulp.src('source/renderer/index.ts'); // Webpack watch configs const mainWebpackWatchConfig = Object.assign({}, mainWebpackConfig, { watch: true, @@ -124,14 +124,14 @@ gulp.task('build', gulp.series('clean:dist', 'build:main', 'build:renderer')); gulp.task('prepare:themes:utils', () => gulp .src([ - 'source/renderer/app/themes/utils/checkCreateTheme.js', - 'source/renderer/app/themes/utils/constants.js', - 'source/renderer/app/themes/utils/createShades.js', - 'source/renderer/app/themes/utils/createTheme.js', - 'source/renderer/app/themes/utils/findUpdates.js', - 'source/renderer/app/themes/utils/updateThemes.js', - 'source/renderer/app/themes/utils/updateThemesCLI.js', - 'source/renderer/app/themes/utils/writeThemeUpdate.js', + 'source/renderer/app/themes/utils/checkCreateTheme.ts', + 'source/renderer/app/themes/utils/constants.ts', + 'source/renderer/app/themes/utils/createShades.ts', + 'source/renderer/app/themes/utils/createTheme.ts', + 'source/renderer/app/themes/utils/findUpdates.ts', + 'source/renderer/app/themes/utils/updateThemes.ts', + 'source/renderer/app/themes/utils/updateThemesCLI.ts', + 'source/renderer/app/themes/utils/writeThemeUpdate.ts', ]) .pipe(gulp.dest('dist/utils')) ); @@ -139,16 +139,16 @@ gulp.task('prepare:themes:utils', () => gulp.task('prepare:themes:daedalus', () => gulp .src([ - 'source/renderer/app/themes/daedalus/cardano.js', - 'source/renderer/app/themes/daedalus/dark-blue.js', - 'source/renderer/app/themes/daedalus/dark-cardano.js', - 'source/renderer/app/themes/daedalus/flight-candidate.js', - 'source/renderer/app/themes/daedalus/incentivized-testnet.js', - 'source/renderer/app/themes/daedalus/index.js', - 'source/renderer/app/themes/daedalus/light-blue.js', - 'source/renderer/app/themes/daedalus/shelley-testnet.js', - 'source/renderer/app/themes/daedalus/white.js', - 'source/renderer/app/themes/daedalus/yellow.js', + 'source/renderer/app/themes/daedalus/cardano.ts', + 'source/renderer/app/themes/daedalus/dark-blue.ts', + 'source/renderer/app/themes/daedalus/dark-cardano.ts', + 'source/renderer/app/themes/daedalus/flight-candidate.ts', + 'source/renderer/app/themes/daedalus/incentivized-testnet.ts', + 'source/renderer/app/themes/daedalus/index.ts', + 'source/renderer/app/themes/daedalus/light-blue.ts', + 'source/renderer/app/themes/daedalus/shelley-testnet.ts', + 'source/renderer/app/themes/daedalus/white.ts', + 'source/renderer/app/themes/daedalus/yellow.ts', ]) .pipe(gulp.dest('dist/daedalus')) ); @@ -156,8 +156,8 @@ gulp.task('prepare:themes:daedalus', () => gulp.task('prepare:themes:scripts', () => gulp .src([ - 'source/renderer/app/themes/scripts/check.js', - 'source/renderer/app/themes/scripts/update.js', + 'source/renderer/app/themes/scripts/check.ts', + 'source/renderer/app/themes/scripts/update.ts', ]) .pipe(gulp.dest('dist/scripts')) ); From cc10424029c1700aa0a15ee07c2ab2ccedfd9f9d Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:35:11 +0000 Subject: [PATCH 030/204] [DDW-773] updated App.tsx with typescript file references --- source/renderer/app/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/renderer/app/App.tsx b/source/renderer/app/App.tsx index 211f523247..c0f627d837 100755 --- a/source/renderer/app/App.tsx +++ b/source/renderer/app/App.tsx @@ -40,7 +40,7 @@ export default class App extends Component<{ const locale = stores.profile.currentLocale; const mobxDevTools = global.environment.mobxDevTools ? : null; const { currentTheme } = stores.profile; - const themeVars = require(`./themes/daedalus/${currentTheme}.js`).default; + const themeVars = require(`./themes/daedalus/${currentTheme}.ts`).default; const { ABOUT, DAEDALUS_DIAGNOSTICS } = DIALOGS; const canShowNews = From 9d405c97083212b9ef599662b5a5e8da97bd4542 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:35:50 +0000 Subject: [PATCH 031/204] [DDW-773] updated theming references to use typescript file extension --- source/renderer/app/themes/daedalus/index.ts | 18 +++++----- source/renderer/app/themes/types.ts | 16 ++++----- source/renderer/app/themes/utils/constants.ts | 36 +++++++++---------- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/source/renderer/app/themes/daedalus/index.ts b/source/renderer/app/themes/daedalus/index.ts index 20a8112ed2..7955f874ff 100644 --- a/source/renderer/app/themes/daedalus/index.ts +++ b/source/renderer/app/themes/daedalus/index.ts @@ -10,15 +10,15 @@ import { WHITE_THEME_OUTPUT } from './white'; import { YELLOW_THEME_OUTPUT } from './yellow'; export const EXISTING_THEME_OUTPUTS = [ - ['cardano.js', CARDANO_THEME_OUTPUT], - ['dark-blue.js', DARK_BLUE_THEME_OUTPUT], - ['dark-cardano.js', DARK_CARDANO_THEME_OUTPUT], - ['flight-candidate.js', FLIGHT_CANDIDATE_THEME_OUTPUT], - ['incentivized-testnet.js', INCENTIVIZED_TESTNET_THEME_OUTPUT], - ['light-blue.js', LIGHT_BLUE_THEME_OUTPUT], - ['shelley-testnet.js', SHELLEY_TESTNET_THEME_OUTPUT], - ['white.js', WHITE_THEME_OUTPUT], - ['yellow.js', YELLOW_THEME_OUTPUT], + ['cardano.ts', CARDANO_THEME_OUTPUT], + ['dark-blue.ts', DARK_BLUE_THEME_OUTPUT], + ['dark-cardano.ts', DARK_CARDANO_THEME_OUTPUT], + ['flight-candidate.ts', FLIGHT_CANDIDATE_THEME_OUTPUT], + ['incentivized-testnet.ts', INCENTIVIZED_TESTNET_THEME_OUTPUT], + ['light-blue.ts', LIGHT_BLUE_THEME_OUTPUT], + ['shelley-testnet.ts', SHELLEY_TESTNET_THEME_OUTPUT], + ['white.ts', WHITE_THEME_OUTPUT], + ['yellow.ts', YELLOW_THEME_OUTPUT], ]; export const EXISTING_THEME_OUTPUTS_OBJ = EXISTING_THEME_OUTPUTS.reduce( diff --git a/source/renderer/app/themes/types.ts b/source/renderer/app/themes/types.ts index 792fa29ec5..f54881e2ea 100644 --- a/source/renderer/app/themes/types.ts +++ b/source/renderer/app/themes/types.ts @@ -3,14 +3,14 @@ export type BackgroundShades = Object; export type ErrorShades = Object; export type PendingThemesUpdates = { - 'cardano.js'?: Object, - 'dark-blue.js'?: Object, - 'dark-cardano.js'?: Object, - 'flight-candidate.js'?: Object, - 'light-blue.js'?: Object, - 'shelley-testnet.js'?: Object, - 'white.js'?: Object, - 'yellow.js'?: Object, + 'cardano.ts'?: Object, + 'dark-blue.ts'?: Object, + 'dark-cardano.ts'?: Object, + 'flight-candidate.ts'?: Object, + 'light-blue.ts'?: Object, + 'shelley-testnet.ts'?: Object, + 'white.ts'?: Object, + 'yellow.ts'?: Object, }; export type CreateThemeParams = { diff --git a/source/renderer/app/themes/utils/constants.ts b/source/renderer/app/themes/utils/constants.ts index 5a5b9a592c..23eda584db 100644 --- a/source/renderer/app/themes/utils/constants.ts +++ b/source/renderer/app/themes/utils/constants.ts @@ -21,15 +21,15 @@ export const DEFAULT_FONTS = { }; export const THEME_LOGGING_COLORS = { - 'cardano.js': '#2cbb69', - 'dark-blue.js': '#2874a6', - 'dark-cardano.js': '#1fc1c3', - 'flight-candidate.js': '#ffb923', - 'incentivized-testnet.js': '#f69ab2', - 'light-blue.js': '#33c4ff', - 'shelley-testnet.js': '#898ee6', - 'white.js': '#29b595', - 'yellow.js': '#fdcd68', + 'cardano.ts': '#2cbb69', + 'dark-blue.ts': '#2874a6', + 'dark-cardano.ts': '#1fc1c3', + 'flight-candidate.ts': '#ffb923', + 'incentivized-testnet.ts': '#f69ab2', + 'light-blue.ts': '#33c4ff', + 'shelley-testnet.ts': '#898ee6', + 'white.ts': '#29b595', + 'yellow.ts': '#fdcd68', }; const CREATE_THEME_MOCK_PARAMS: PartialThemeParts = { @@ -203,15 +203,15 @@ const CREATE_YELLOW_THEME_PARAMS: CreateThemeParams = { }; export const CREATE_THEME_PARAMS = [ - ['cardano.js', CREATE_CARDANO_THEME_PARAMS], - ['dark-blue.js', CREATE_DARK_BLUE_THEME_PARAMS], - ['dark-cardano.js', CREATE_DARK_CARDANO_THEME_PARAMS], - ['flight-candidate.js', CREATE_FLIGHT_CANDIDATE_THEME_PARAMS], - ['incentivized-testnet.js', CREATE_INCENTIVIZED_TESTNET_THEME_PARAMS], - ['light-blue.js', CREATE_LIGHT_BLUE_THEME_PARAMS], - ['shelley-testnet.js', CREATE_SHELLEY_TESTNET_THEME_PARAMS], - ['white.js', CREATE_WHITE_THEME_PARAMS], - ['yellow.js', CREATE_YELLOW_THEME_PARAMS], + ['cardano.ts', CREATE_CARDANO_THEME_PARAMS], + ['dark-blue.ts', CREATE_DARK_BLUE_THEME_PARAMS], + ['dark-cardano.ts', CREATE_DARK_CARDANO_THEME_PARAMS], + ['flight-candidate.ts', CREATE_FLIGHT_CANDIDATE_THEME_PARAMS], + ['incentivized-testnet.ts', CREATE_INCENTIVIZED_TESTNET_THEME_PARAMS], + ['light-blue.ts', CREATE_LIGHT_BLUE_THEME_PARAMS], + ['shelley-testnet.ts', CREATE_SHELLEY_TESTNET_THEME_PARAMS], + ['white.ts', CREATE_WHITE_THEME_PARAMS], + ['yellow.ts', CREATE_YELLOW_THEME_PARAMS], ]; export const CREATE_THEME_OBJ = { From a87d90c84ec7e477ab470aa11834268ebd789b21 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:36:23 +0000 Subject: [PATCH 032/204] [DDW-773] removed storybook menu import --- storybook/addons.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storybook/addons.ts b/storybook/addons.ts index 8d6b378085..be38d16067 100644 --- a/storybook/addons.ts +++ b/storybook/addons.ts @@ -1,4 +1,4 @@ import '@storybook/addon-knobs/register'; import '@storybook/addon-actions/register'; import '@storybook/addon-links/register'; -import './addons/DaedalusMenu/register'; +//import './addons/DaedalusMenu/register'; From e22a8095467ad471c51bff711caa374ac9560e50 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:39:20 +0000 Subject: [PATCH 033/204] [DDW-773] updated api-importer mnemonics export --- utils/api-importer/mnemonics.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/api-importer/mnemonics.ts b/utils/api-importer/mnemonics.ts index d5acb0db0a..7dd5cca916 100644 --- a/utils/api-importer/mnemonics.ts +++ b/utils/api-importer/mnemonics.ts @@ -82,7 +82,7 @@ const itnShelleyMnemonics = [ ['awkward', 'electric', 'strong', 'early', 'rose', 'abuse', 'mutual', 'limit', 'ketchup', 'child', 'limb', 'exist', 'hurry', 'business', 'whisper'], ]; -module.exports = { +export { byronMnemonics, shelleyMnemonics, maryMnemonics, From 4cc29666cce499cbc54ed7ff678e2925f429bf3e Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:41:08 +0000 Subject: [PATCH 034/204] [DDW-773] updated react internationalization type in delegationStepsConfirmationDialog --- .../DelegationStepsConfirmationDialog.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx index b7c2e04b0b..a3aa064514 100644 --- a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx +++ b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx @@ -29,8 +29,9 @@ import { OversaturationText } from './OversaturationText'; import type { DelegationCalculateFeeResponse } from '../../../api/staking/types'; import type { HwDeviceStatus } from '../../../domains/Wallet'; +import { ReactIntlMessage } from '../../../types/i18nTypes'; -const messages = { +const messages: Record = { ...getMessages(), fieldIsRequired: globalMessages.fieldIsRequired, }; From ada33d4d66b181e2495b62a892441671e3ea2a4b Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:43:15 +0000 Subject: [PATCH 035/204] [DDW-773] made global replacements in all folders - lifted annotations for class exports - changed require statements to imports - modified "$FlowFixMe" comments to "@ts-ignore" --- source/main/cardano/utils.ts | 2 +- source/main/ipc/getHardwareWalletChannel.ts | 26 +++++++++---------- source/main/preload.ts | 2 +- source/main/utils/config.ts | 2 +- source/main/utils/restoreKeystore.ts | 2 +- source/renderer/app/App.tsx | 4 ++- source/renderer/app/api/utils/requestV0.ts | 2 +- .../components/appUpdate/AppUpdateOverlay.tsx | 4 ++- .../renderer/app/components/assets/Asset.tsx | 4 ++- .../components/assets/AssetSettingsDialog.tsx | 4 ++- .../hardware-wallet/HardwareWalletStatus.tsx | 4 ++- .../app/components/layout/CenteredLayout.tsx | 4 ++- .../app/components/layout/SidebarLayout.tsx | 4 ++- .../renderer/app/components/layout/TopBar.tsx | 4 ++- .../app/components/layout/TopBarLayout.tsx | 4 ++- .../no-disk-space-error/NoDiskSpaceError.tsx | 4 ++- .../syncing-connecting/SyncingConnecting.tsx | 4 ++- .../SyncingConnectingBackground.tsx | 4 ++- .../system-time-error/SystemTimeError.tsx | 4 ++- .../app/components/navigation/NavButton.tsx | 4 ++- .../app/components/navigation/NavDropdown.tsx | 4 ++- .../app/components/navigation/Navigation.tsx | 4 ++- .../app/components/news/AlertsOverlay.tsx | 4 ++- .../app/components/news/IncidentOverlay.tsx | 4 ++- .../renderer/app/components/news/NewsFeed.tsx | 4 ++- .../renderer/app/components/news/NewsItem.tsx | 4 ++- .../app/components/news/UpdateItem.tsx | 4 ++- .../components/notifications/LegacyBadge.tsx | 4 ++- .../notifications/LegacyNotification.tsx | 4 ++- .../notifications/RestoreNotification.tsx | 4 ++- .../DataLayerMigrationForm.tsx | 4 ++- .../initial-settings/InitialSettings.tsx | 4 ++- .../profile/terms-of-use/TermsOfUseForm.tsx | 4 ++- .../profile/terms-of-use/TermsOfUseText.tsx | 4 ++- .../components/settings/SettingsLayout.tsx | 4 ++- .../settings/categories/DisplaySettings.tsx | 4 ++- .../settings/categories/GeneralSettings.tsx | 4 ++- .../categories/StakePoolsSettings.tsx | 4 ++- .../settings/categories/SupportSettings.tsx | 4 ++- .../categories/TermsOfUseSettings.tsx | 4 ++- .../settings/categories/WalletsSettings.tsx | 4 ++- .../settings/menu/SettingsMenuItem.tsx | 4 ++- .../components/sidebar/SidebarCategory.tsx | 4 ++- .../app/components/sidebar/SidebarMenu.tsx | 4 ++- .../sidebar/wallets/SidebarWalletMenuItem.tsx | 4 ++- .../sidebar/wallets/SidebarWalletsMenu.tsx | 4 ++- .../components/staking/StakingUnavailable.tsx | 4 ++- .../staking/countdown/StakingCountdown.tsx | 4 ++- .../delegation-center/DelegationCenter.tsx | 4 ++- .../DelegationCenterBody.tsx | 4 ++- .../DelegationCenterHeader.tsx | 4 ++- .../staking/delegation-center/DonutRing.tsx | 4 ++- .../delegation-center/DropdownMenu.tsx | 4 ++- .../staking/delegation-center/WalletRow.tsx | 4 ++- .../DelegationSetupWizardDialog.tsx | 4 ++- .../DelegationStepsConfirmationDialog.tsx | 4 ++- .../DelegationStepsSuccessDialog.tsx | 4 ++- .../staking/epochs/StakingEpochs.tsx | 4 ++- .../epochs/StakingEpochsCurrentEpochData.tsx | 4 ++- .../staking/epochs/StakingEpochsDataTable.tsx | 4 ++- .../staking/epochs/StakingEpochsNoData.tsx | 4 ++- .../epochs/StakingEpochsPreviousEpochData.tsx | 4 ++- .../components/staking/info/StakingInfo.tsx | 4 ++- .../staking/info/StakingInfoCountdown.tsx | 4 ++- .../staking/layouts/StakingWithNavigation.tsx | 4 ++- .../staking/legacy/BlockGenerationInfo.tsx | 4 ++- .../app/components/staking/legacy/Staking.tsx | 4 ++- .../staking/legacy/StakingChart.tsx | 4 ++- .../staking/legacy/StakingChartTooltip.tsx | 4 ++- .../legacy/StakingChartTooltipItem.tsx | 4 ++- .../staking/legacy/StakingSwitch.tsx | 4 ++- .../staking/legacy/StakingSystemState.tsx | 4 ++- .../legacy/StakingSystemStateElement.tsx | 4 ++- .../staking/navigation/StakingNavigation.tsx | 4 ++- .../redeem-itn-rewards/NoWalletsDialog.tsx | 4 ++- .../RedemptionUnavailableDialog.tsx | 4 ++- .../Step1ConfigurationDialog.tsx | 4 ++- .../Step2ConfirmationDialog.tsx | 4 ++- .../redeem-itn-rewards/Step3FailureDialog.tsx | 4 ++- .../redeem-itn-rewards/Step3SuccessDialog.tsx | 4 ++- .../staking/rewards/StakingRewards.tsx | 4 ++- .../staking/stake-pools/StakePools.tsx | 4 ++- .../stake-pools/StakePoolsRankingLoader.tsx | 4 ++- .../staking/stake-pools/StakePoolsTable.tsx | 4 ++- .../stake-pools/StakePoolsTableBody.tsx | 4 ++- .../stake-pools/StakePoolsTableHeader.tsx | 4 ++- .../staking/widgets/ThumbPoolContent.tsx | 4 ++- .../staking/widgets/ThumbSelectedPool.tsx | 4 ++- .../staking/widgets/TooltipPool.tsx | 4 ++- .../components/status/DaedalusDiagnostics.tsx | 4 ++- .../voting/VotingRegistrationDialogWizard.tsx | 4 ++- .../VotingRegistrationStepsConfirm.tsx | 4 ++- .../VotingRegistrationStepsEnterPinCode.tsx | 4 ++- .../VotingRegistrationStepsQrCode.tsx | 4 ++- .../VotingRegistrationStepsRegister.tsx | 4 ++- .../widgets/ConfirmationDialog.tsx | 4 ++- .../widgets/VotingRegistrationDialog.tsx | 4 ++- .../app/components/wallet/WalletAdd.tsx | 4 ++- .../components/wallet/WalletBackupDialog.tsx | 4 ++- .../components/wallet/WalletConnectDialog.tsx | 4 ++- .../components/wallet/WalletCreateDialog.tsx | 4 ++- .../components/wallet/WalletRestoreDialog.tsx | 4 ++- .../components/wallet/WalletSendForm.spec.tsx | 2 +- .../app/components/wallet/WalletSendForm.tsx | 4 ++- .../WalletBackupPrivacyWarningDialog.tsx | 4 ++- .../WalletRecoveryInstructions.tsx | 4 ++- .../WalletRecoveryPhraseDisplayDialog.tsx | 4 ++- .../WalletRecoveryPhraseEntryDialog.tsx | 4 ++- .../WalletRecoveryPhraseMnemonic.tsx | 4 ++- .../file-import/WalletFileImportDialog.tsx | 4 ++- .../wallet/layouts/WalletWithNavigation.tsx | 4 ++- .../wallet/navigation/WalletNavigation.tsx | 4 ++- .../CompletionDialog.tsx | 4 ++- .../ConfirmationDialog.tsx | 4 ++- .../InstructionsDialog.tsx | 4 ++- .../paper-wallet-certificate/PrintDialog.tsx | 4 ++- .../SecuringPasswordDialog.tsx | 4 ++- .../VerificationDialog.tsx | 4 ++- .../wallet/receive/AddressActions.tsx | 4 ++- .../wallet/receive/AddressRandom.tsx | 4 ++- .../wallet/receive/AddressSequential.tsx | 4 ++- .../wallet/receive/VirtualAddressesList.tsx | 4 ++- .../wallet/receive/WalletReceiveDialog.tsx | 4 ++- .../wallet/receive/WalletReceiveRandom.tsx | 4 ++- .../receive/WalletReceiveSequential.tsx | 4 ++- .../wallet/send-form/AssetInput.tsx | 4 ++- .../WalletSendAssetsConfirmationDialog.tsx | 4 ++- .../WalletSendConfirmationDialog.tsx | 4 ++- .../settings/ChangeSpendingPasswordDialog.tsx | 4 ++- .../settings/ExportWalletToFileDialog.tsx | 4 ++- .../wallet/settings/ICOPublicKeyDialog.tsx | 4 ++- .../wallet/settings/SetWalletPassword.tsx | 4 ++- .../UndelegateWalletConfirmationDialog.tsx | 4 ++- .../UndelegateWalletSuccessDialog.tsx | 4 ++- .../wallet/settings/WalletPublicKeyDialog.tsx | 4 ++- .../WalletRecoveryPhraseStep1Dialog.tsx | 4 ++- .../WalletRecoveryPhraseStep2Dialog.tsx | 4 ++- .../WalletRecoveryPhraseStep3Dialog.tsx | 4 ++- .../WalletRecoveryPhraseStep4Dialog.tsx | 4 ++- ...WalletRecoveryPhraseVerificationWidget.tsx | 4 ++- .../wallet/settings/WalletSettings.tsx | 4 ++- .../wallet/summary/WalletSummary.tsx | 4 ++- .../wallet/summary/WalletSummaryCurrency.tsx | 4 ++- .../wallet/summary/WalletSummaryHeader.tsx | 4 ++- .../wallet-no-tokens/WalletNoTokens.tsx | 4 ++- .../CancelTransactionConfirmationDialog.tsx | 4 ++- .../wallet/transactions/FilterButton.tsx | 4 ++- .../wallet/transactions/FilterResultInfo.tsx | 4 ++- .../transactions/WalletNoTransactions.tsx | 4 ++- .../transactions/WalletTransactions.tsx | 4 ++- .../transactions/WalletTransactionsHeader.tsx | 4 ++- .../transactions/WalletTransactionsList.tsx | 4 ++- .../transactions/WalletTransactionsSearch.tsx | 4 ++- .../SimpleTransactionList.tsx | 4 ++- .../VirtualTransactionList.tsx | 4 ++- .../TransferFundsStep2Dialog.tsx | 4 ++- .../wallet/utxo/WalletUtxoCursor.tsx | 4 ++- .../components/wallet/utxo/WalletUtxoTick.tsx | 4 ++- .../wallet/utxo/WalletUtxoTooltip.tsx | 4 ++- .../wallet-import/WalletImportFileDialog.tsx | 4 ++- .../WalletSelectImportDialog.tsx | 4 ++- .../wallet-restore/ConfigurationDialog.tsx | 4 ++- .../wallet/wallet-restore/MnemonicsDialog.tsx | 4 ++- .../widgets/ConfirmationDialog.tsx | 4 ++- .../app/components/widgets/BorderedBox.tsx | 4 ++- .../components/widgets/CountdownWidget.tsx | 4 ++- .../widgets/FullyDecentralizedEffect.tsx | 4 ++- .../app/components/widgets/ProgressBar.tsx | 4 ++- .../components/widgets/ProgressBarLarge.tsx | 4 ++- .../app/components/widgets/RadioSet.tsx | 4 ++- .../widgets/forms/FileUploadWidget.tsx | 4 ++- .../widgets/forms/ImageUploadWidget.tsx | 4 ++- .../widgets/forms/InlineEditingDropdown.tsx | 4 ++- .../widgets/forms/InlineEditingInput.tsx | 4 ++- .../widgets/forms/InlineEditingSmallInput.tsx | 4 ++- .../widgets/forms/MnemonicInputWidget.tsx | 4 ++- .../widgets/forms/ProfileSettingsForm.tsx | 4 ++- .../widgets/forms/ReadOnlyInput.tsx | 4 ++- .../app/config/generateStakePoolFakeData.ts | 2 +- source/renderer/app/containers/MainLayout.tsx | 4 ++- source/renderer/app/containers/Root.tsx | 4 ++- .../appUpdate/AppUpdateContainer.tsx | 4 ++- .../assets/AssetSettingsDialogContainer.tsx | 4 ++- .../app/containers/loading/LoadingPage.tsx | 4 ++- .../loading/NoDiskSpaceErrorPage.tsx | 4 ++- .../loading/SyncingConnectingPage.tsx | 4 ++- .../loading/SystemTimeErrorPage.tsx | 4 ++- .../app/containers/news/NewsFeedContainer.tsx | 4 ++- .../containers/news/NewsOverlayContainer.tsx | 4 ++- .../notifications/NotificationsContainer.tsx | 4 ++- .../profile/DataLayerMigrationPage.tsx | 4 ++- .../profile/InitialSettingsPage.tsx | 4 ++- .../app/containers/profile/TermsOfUsePage.tsx | 4 ++- .../app/containers/settings/Settings.tsx | 4 ++- .../categories/DisplaySettingsPage.tsx | 4 ++- .../categories/GeneralSettingsPage.tsx | 4 ++- .../categories/StakePoolsSettingsPage.tsx | 4 ++- .../categories/SupportSettingsPage.tsx | 4 ++- .../categories/TermsOfUseSettingsPage.tsx | 4 ++- .../categories/WalletsSettingsPage.tsx | 4 ++- .../containers/splash/SplashNetworkPage.tsx | 4 ++- .../staking/DelegationCenterPage.tsx | 4 ++- .../staking/RedeemItnRewardsContainer.tsx | 4 ++- .../containers/staking/StakePoolsListPage.tsx | 4 ++- .../app/containers/staking/Staking.tsx | 4 ++- .../staking/StakingCountdownPage.tsx | 4 ++- .../containers/staking/StakingEpochsPage.tsx | 4 ++- .../containers/staking/StakingInfoPage.tsx | 4 ++- .../containers/staking/StakingRewardsPage.tsx | 4 ++- .../DelegationSetupWizardDialogContainer.tsx | 4 ++- .../redeem-itn-rewards/NoWalletsContainer.tsx | 4 ++- .../RedemptionUnavailableContainer.tsx | 4 ++- .../Step1ConfigurationContainer.tsx | 4 ++- .../Step2ConfirmationContainer.tsx | 4 ++- .../Step3ResultContainer.tsx | 4 ++- .../app/containers/static/AboutDialog.tsx | 4 ++- .../status/DaedalusDiagnosticsDialog.tsx | 4 ++- .../voting/VotingRegistrationPage.tsx | 4 ++- .../VotingRegistrationDialogContainer.tsx | 4 ++- .../PaperWalletCreateCertificatePage.tsx | 4 ++- .../containers/wallet/TransferFundsPage.tsx | 4 ++- .../renderer/app/containers/wallet/Wallet.tsx | 4 ++- .../app/containers/wallet/WalletAddPage.tsx | 4 ++- .../containers/wallet/WalletReceivePage.tsx | 4 ++- .../app/containers/wallet/WalletSendPage.tsx | 4 ++- .../containers/wallet/WalletSettingsPage.tsx | 4 ++- .../containers/wallet/WalletSummaryPage.tsx | 4 ++- .../wallet/WalletTransactionsPage.tsx | 4 ++- .../app/containers/wallet/WalletUtxoPage.tsx | 4 ++- .../dialogs/WalletBackupDialogContainer.tsx | 4 ++- .../dialogs/WalletConnectDialogContainer.tsx | 4 ++- .../dialogs/WalletCreateDialogContainer.tsx | 4 ++- .../WalletCreateDialogContainerOld.tsx | 4 ++- .../dialogs/WalletImportDialogContainer.tsx | 4 ++- .../dialogs/WalletRestoreDialogContainer.tsx | 4 ++- .../WalletRestoreDialogContainerOld.tsx | 4 ++- .../WalletSendConfirmationDialogContainer.tsx | 4 ++- .../CompletionDialogContainer.tsx | 4 ++- .../InstructionsDialogContainer.tsx | 4 ++- .../PrintDialogContainer.tsx | 4 ++- .../SecuringPasswordDialogContainer.tsx | 4 ++- .../VerificationDialogContainer.tsx | 4 ++- .../ChangeSpendingPasswordDialogContainer.tsx | 4 ++- .../settings/DeleteWalletDialogContainer.tsx | 4 ++- .../ExportWalletToFileDialogContainer.tsx | 4 ++- .../settings/PublicKeyDialogContainer.tsx | 4 ++- .../PublicKeyQRCodeDialogContainer.tsx | 6 +++-- .../UndelegateWalletDialogContainer.tsx | 4 ++- .../settings/UnpairWalletDialogContainer.tsx | 4 ++- .../WalletRecoveryPhraseContainer.tsx | 4 ++- .../TransferFundsStep1Container.tsx | 4 ++- .../TransferFundsStep2Container.tsx | 4 ++- .../wallet-create/ConfigDialogContainer.tsx | 4 ++- .../wallet-create/HashDialogContainer.tsx | 4 ++- .../InstructionsDialogContainer.tsx | 4 ++- .../MnemonicsDialogContainer.tsx | 4 ++- .../wallet-create/TemplateDialogContainer.tsx | 4 ++- .../wallet-create/ValidateDialogContainer.tsx | 4 ++- .../WalletFileImportStepContainer.tsx | 4 ++- .../WalletSelectImportStepContainer.tsx | 4 ++- .../StepConfigurationContainer.tsx | 4 ++- .../wallet-restore/StepMnemonicsContainer.tsx | 4 ++- .../wallet-restore/StepSuccessContainer.tsx | 4 ++- .../StepWalletTypeContainer.tsx | 4 ++- source/renderer/app/stores/AddressesStore.ts | 2 +- .../app/stores/HardwareWalletsStore.ts | 4 +-- .../renderer/app/stores/NetworkStatusStore.ts | 2 +- source/renderer/app/stores/WalletsStore.ts | 2 +- source/renderer/app/stores/lib/Request.ts | 2 +- .../app/themes/utils/writeThemeUpdate.ts | 2 +- source/renderer/app/utils/shelleyLedger.ts | 2 +- source/renderer/app/utils/transaction.tsx | 4 +-- source/renderer/app/utils/walletUtils.ts | 2 +- storybook/stories/_support/StoryDecorator.tsx | 4 ++- storybook/stories/_support/StoryLayout.tsx | 4 ++- storybook/stories/_support/StoryProvider.tsx | 4 ++- .../import/WalletImportFile.stories.tsx | 2 +- .../wallets/send/WalletSend.stories.tsx | 4 +-- tests/addresses/e2e/steps/addresses.ts | 2 -- tests/app/e2e/steps/about-dialog.ts | 2 -- tests/app/e2e/steps/app-version-difference.ts | 2 -- tests/app/e2e/steps/daedalus-process.ts | 2 -- tests/app/e2e/steps/data-layer-migration.ts | 2 -- tests/app/e2e/steps/helpers.ts | 2 -- tests/app/e2e/steps/inject-fault.ts | 2 -- tests/app/e2e/steps/local-time-difference.ts | 2 -- tests/app/e2e/steps/no-disk-space.ts | 1 - tests/app/e2e/steps/node-restart.ts | 2 -- .../steps/trouble-connecting-notification.ts | 2 -- .../e2e/steps/trouble-syncing-notification.ts | 2 -- .../e2e/steps/delegation-pending.ts | 4 +-- tests/delegation/e2e/steps/delegation.ts | 2 -- tests/delegation/e2e/steps/helpers.ts | 2 -- tests/delegation/e2e/steps/rewards.ts | 2 -- tests/delegation/e2e/steps/stake-pools.ts | 2 -- tests/navigation/e2e/steps/helpers.ts | 2 -- tests/navigation/e2e/steps/sidebar.ts | 2 -- .../e2e/steps/paper-wallets-certificate.ts | 2 -- tests/settings/e2e/steps/custom-formats.ts | 2 -- tests/settings/e2e/steps/helpers.ts | 2 -- tests/settings/e2e/steps/select-language.ts | 2 -- tests/settings/e2e/steps/settings.ts | 2 -- tests/settings/e2e/steps/terms-of-use.ts | 2 -- tests/setup-e2e.ts | 2 -- tests/transactions/e2e/steps/transactions.ts | 2 -- tests/transactions/e2e/steps/utxos.ts | 2 -- .../e2e/steps/balance-wallets-notification.ts | 2 -- tests/wallets/e2e/steps/create-wallet.ts | 2 -- tests/wallets/e2e/steps/delete-wallet.ts | 2 -- tests/wallets/e2e/steps/helpers.ts | 2 -- .../e2e/steps/import-and-migrate-wallets.ts | 2 -- tests/wallets/e2e/steps/restore-wallet.ts | 2 -- .../e2e/steps/transfer-funds-wizard.ts | 2 -- .../e2e/steps/wallet-not-responding.ts | 2 -- tests/wallets/e2e/steps/wallets-limit.ts | 2 -- tests/wallets/e2e/steps/wallets-ordering.ts | 2 -- tests/wallets/e2e/steps/wallets.ts | 2 -- 317 files changed, 813 insertions(+), 372 deletions(-) diff --git a/source/main/cardano/utils.ts b/source/main/cardano/utils.ts index 8d4898aaaa..b75c10473a 100644 --- a/source/main/cardano/utils.ts +++ b/source/main/cardano/utils.ts @@ -240,7 +240,7 @@ export const exportWallets = async ( let errors = ''; try { const legacySecretKeyFile = fs.readFileSync(legacySecretKeyPath); - // $FlowFixMe + // @ts-ignore const rawWallets = await decodeKeystore(legacySecretKeyFile); wallets = rawWallets.map((w) => ({ name: null, diff --git a/source/main/ipc/getHardwareWalletChannel.ts b/source/main/ipc/getHardwareWalletChannel.ts index ac1ba71aac..3ab71a57a8 100644 --- a/source/main/ipc/getHardwareWalletChannel.ts +++ b/source/main/ipc/getHardwareWalletChannel.ts @@ -10,7 +10,7 @@ import TrezorConnect, { TRANSPORT_EVENT, UI, UI_EVENT, - // $FlowFixMe + // @ts-ignore } from 'trezor-connect'; import { find, get, includes, last, omit } from 'lodash'; import { derivePublic as deriveChildXpub } from 'cardano-crypto.js'; @@ -137,7 +137,7 @@ let devicesMemo = {}; class EventObserver { constructor(props) { - // $FlowFixMe + // @ts-ignore this.mainWindow = props; } @@ -162,7 +162,7 @@ class EventObserver { if (!devicesMemo[device.path]) { logger.info('[HW-DEBUG] CONSTRUCTOR ADD'); try { - // $FlowFixMe + // @ts-ignore const transport = await TransportNodeHid.open(device.path); const AdaConnection = new AppAda(transport); devicesMemo[device.path] = { @@ -179,7 +179,7 @@ class EventObserver { deviceName: deviceModel.productName, // e.g. Test Name path: device.path, }, - // $FlowFixMe + // @ts-ignore this.mainWindow ); } catch (e) { @@ -198,7 +198,7 @@ class EventObserver { deviceName: deviceModel.productName, // e.g. Test Name path: device.path, }, - // $FlowFixMe + // @ts-ignore this.mainWindow ); } @@ -251,7 +251,7 @@ export const handleHardwareWalletRequests = async ( payload: event.payload, }, }, - // $FlowFixMe + // @ts-ignore mainWindow ); } @@ -279,7 +279,7 @@ export const handleHardwareWalletRequests = async ( path: event.payload.path, eventType: event.type, }, - // $FlowFixMe + // @ts-ignore mainWindow ); } @@ -337,7 +337,7 @@ export const handleHardwareWalletRequests = async ( )}` ); - // $FlowFixMe + // @ts-ignore if (transportList && !transportList.length) { // Establish connection with last device try { @@ -361,7 +361,7 @@ export const handleHardwareWalletRequests = async ( const device = find(deviceList, ['path', lastConnectedPath]); logger.info('[HW-DEBUG] INIT NEW transport - DONE'); - // $FlowFixMe + // @ts-ignore deviceConnection = new AppAda(hw); devicesMemo[lastConnectedPath] = { device, @@ -375,7 +375,7 @@ export const handleHardwareWalletRequests = async ( } else if (!devicePath || !devicesMemo[devicePath]) { // Use first like native usb nodeHID logger.info('[HW-DEBUG] USE First'); - // $FlowFixMe + // @ts-ignore lastConnectedPath = transportList[0]; // eslint-disable-line if (devicesMemo[lastConnectedPath]) { hw = devicesMemo[lastConnectedPath].transport; @@ -389,7 +389,7 @@ export const handleHardwareWalletRequests = async ( deviceConnection = get(devicesMemo, [devicePath, 'AdaConnection']); } - // $FlowFixMe + // @ts-ignore const { deviceModel } = hw; if (deviceModel) { logger.info( @@ -619,7 +619,7 @@ export const handleHardwareWalletRequests = async ( isDeviceDisconnected, }); if (path && !isDeviceDisconnected && isDisconnectError) { - // $FlowFixMe + // @ts-ignore const oldPath = path; const deviceMemo = devicesMemo[oldPath]; const devicePaths = await TransportNodeHid.list(); @@ -642,7 +642,7 @@ export const handleHardwareWalletRequests = async ( const { device: oldDevice } = deviceMemo; - // $FlowFixMe + // @ts-ignore const newTransport = await TransportNodeHid.open(newPath); const newDeviceConnection = new AppAda(newTransport); diff --git a/source/main/preload.ts b/source/main/preload.ts index 70a7722ca1..7199b7207d 100644 --- a/source/main/preload.ts +++ b/source/main/preload.ts @@ -48,7 +48,7 @@ process.once('loaded', () => { // Expose require for Spectron! if (_process.env.NODE_ENV === 'test') { - // $FlowFixMe + // @ts-ignore global.spectronRequire = __non_webpack_require__; // eslint-disable-line } // ESLint will warn about any use of eval(), even this one diff --git a/source/main/utils/config.ts b/source/main/utils/config.ts index 096eae5e6a..a7c0113797 100644 --- a/source/main/utils/config.ts +++ b/source/main/utils/config.ts @@ -52,6 +52,6 @@ export const readLauncherConfig = (configPath: ?string): LauncherConfig => { if (finalYaml === null || finalYaml === []) { throw new Error('Daedalus requires a valid launcher config file to work'); } - // $FlowFixMe + // @ts-ignore return finalYaml; }; diff --git a/source/main/utils/restoreKeystore.ts b/source/main/utils/restoreKeystore.ts index 57dad82f94..4236dfc1ce 100644 --- a/source/main/utils/restoreKeystore.ts +++ b/source/main/utils/restoreKeystore.ts @@ -76,7 +76,7 @@ const $isEmptyPassphrase = (pwd: Buffer): boolean => { const cborEmptyBytes = Buffer.from('40', 'hex'); const [logN, r, p, salt, hashA] = pwd.toString('utf8').split('|'); const opts = { N: 2 ** Number(logN), r: Number(r), p: Number(p) }; - // $FlowFixMe + // @ts-ignore const hashB = crypto .scryptSync(cborEmptyBytes, Buffer.from(salt, 'base64'), 32, opts) .toString('base64'); diff --git a/source/renderer/app/App.tsx b/source/renderer/app/App.tsx index c0f627d837..d1aee3e866 100755 --- a/source/renderer/app/App.tsx +++ b/source/renderer/app/App.tsx @@ -22,7 +22,7 @@ import type { ActionsMap } from './actions/index'; import NewsFeedContainer from './containers/news/NewsFeedContainer'; @observer -export default class App extends Component<{ +class App extends Component<{ stores: StoresMap, actions: ActionsMap, history: Object, @@ -89,3 +89,5 @@ export default class App extends Component<{ ); } } + +export default App \ No newline at end of file diff --git a/source/renderer/app/api/utils/requestV0.ts b/source/renderer/app/api/utils/requestV0.ts index d37c7108d4..458ff4e047 100644 --- a/source/renderer/app/api/utils/requestV0.ts +++ b/source/renderer/app/api/utils/requestV0.ts @@ -63,7 +63,7 @@ function typedRequest( }; } - // $FlowFixMe + // @ts-ignore const httpsRequest = https.request(options); if (hasRequestBody) { httpsRequest.write(requestBody); diff --git a/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx b/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx index 39f8c65b5e..844d9d2606 100644 --- a/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx +++ b/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx @@ -141,7 +141,7 @@ type State = { }; @observer -export default class AppUpdateOverlay extends Component { +class AppUpdateOverlay extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -385,3 +385,5 @@ export default class AppUpdateOverlay extends Component { ); } } + +export default AppUpdateOverlay \ No newline at end of file diff --git a/source/renderer/app/components/assets/Asset.tsx b/source/renderer/app/components/assets/Asset.tsx index 4e559668ff..3d060a2f5f 100644 --- a/source/renderer/app/components/assets/Asset.tsx +++ b/source/renderer/app/components/assets/Asset.tsx @@ -93,7 +93,7 @@ type State = { }; @observer -export default class Asset extends Component { +class Asset extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -331,3 +331,5 @@ export default class Asset extends Component { ); } } + +export default Asset \ No newline at end of file diff --git a/source/renderer/app/components/assets/AssetSettingsDialog.tsx b/source/renderer/app/components/assets/AssetSettingsDialog.tsx index 61ec2140fb..0016ffa3f5 100644 --- a/source/renderer/app/components/assets/AssetSettingsDialog.tsx +++ b/source/renderer/app/components/assets/AssetSettingsDialog.tsx @@ -81,7 +81,7 @@ type State = { }; @observer -export default class AssetSettingsDialog extends Component { +class AssetSettingsDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -225,3 +225,5 @@ export default class AssetSettingsDialog extends Component { ); } } + +export default AssetSettingsDialog \ No newline at end of file diff --git a/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.tsx b/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.tsx index 8d27dc4bc5..7aa2497fc9 100644 --- a/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.tsx +++ b/source/renderer/app/components/hardware-wallet/HardwareWalletStatus.tsx @@ -174,7 +174,7 @@ type State = { }; @observer -export default class HardwareWalletStatus extends Component { +class HardwareWalletStatus extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -321,3 +321,5 @@ export default class HardwareWalletStatus extends Component { ); } } + +export default HardwareWalletStatus \ No newline at end of file diff --git a/source/renderer/app/components/layout/CenteredLayout.tsx b/source/renderer/app/components/layout/CenteredLayout.tsx index 850545ee06..32a0ef556f 100644 --- a/source/renderer/app/components/layout/CenteredLayout.tsx +++ b/source/renderer/app/components/layout/CenteredLayout.tsx @@ -9,7 +9,7 @@ type Props = { }; @observer -export default class CenteredLayout extends Component { +class CenteredLayout extends Component { static defaultProps = { children: null, }; @@ -19,3 +19,5 @@ export default class CenteredLayout extends Component { return
{children}
; } } + +export default CenteredLayout \ No newline at end of file diff --git a/source/renderer/app/components/layout/SidebarLayout.tsx b/source/renderer/app/components/layout/SidebarLayout.tsx index 5ae82813be..e95ca9da1c 100644 --- a/source/renderer/app/components/layout/SidebarLayout.tsx +++ b/source/renderer/app/components/layout/SidebarLayout.tsx @@ -13,7 +13,7 @@ type Props = { }; @observer -export default class SidebarLayout extends Component { +class SidebarLayout extends Component { static defaultProps = { children: null, }; @@ -42,3 +42,5 @@ export default class SidebarLayout extends Component { ); } } + +export default SidebarLayout \ No newline at end of file diff --git a/source/renderer/app/components/layout/TopBar.tsx b/source/renderer/app/components/layout/TopBar.tsx index 5ef4a7d439..a445d0cb17 100644 --- a/source/renderer/app/components/layout/TopBar.tsx +++ b/source/renderer/app/components/layout/TopBar.tsx @@ -25,7 +25,7 @@ type Props = { }; @observer -export default class TopBar extends Component { +class TopBar extends Component { render() { const { onLeftIconClick, @@ -113,3 +113,5 @@ export default class TopBar extends Component { ); } } + +export default TopBar \ No newline at end of file diff --git a/source/renderer/app/components/layout/TopBarLayout.tsx b/source/renderer/app/components/layout/TopBarLayout.tsx index ee133637ca..4e4d53abc3 100644 --- a/source/renderer/app/components/layout/TopBarLayout.tsx +++ b/source/renderer/app/components/layout/TopBarLayout.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class TopBarLayout extends Component { +class TopBarLayout extends Component { render() { const { children, topbar, notification } = this.props; return ( @@ -23,3 +23,5 @@ export default class TopBarLayout extends Component { ); } } + +export default TopBarLayout \ No newline at end of file diff --git a/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.tsx b/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.tsx index f51292e4cb..4e3e10837b 100644 --- a/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.tsx +++ b/source/renderer/app/components/loading/no-disk-space-error/NoDiskSpaceError.tsx @@ -27,7 +27,7 @@ type Props = { }; @observer -export default class NoDiskSpaceError extends Component { +class NoDiskSpaceError extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -60,3 +60,5 @@ export default class NoDiskSpaceError extends Component { ); } } + +export default NoDiskSpaceError \ No newline at end of file diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.tsx b/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.tsx index 337089dd9d..77ecba20d1 100644 --- a/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.tsx +++ b/source/renderer/app/components/loading/syncing-connecting/SyncingConnecting.tsx @@ -51,7 +51,7 @@ type Props = { }; @observer -export default class SyncingConnecting extends Component { +class SyncingConnecting extends Component { state = { connectingTime: 0, }; @@ -221,3 +221,5 @@ export default class SyncingConnecting extends Component { ); } } + +export default SyncingConnecting \ No newline at end of file diff --git a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.tsx b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.tsx index f81e1790e3..9cea623884 100644 --- a/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.tsx +++ b/source/renderer/app/components/loading/syncing-connecting/SyncingConnectingBackground.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class SyncingConnectingBackground extends Component { +class SyncingConnectingBackground extends Component { render() { const { isConnecting, isSyncing, hasLoadedCurrentTheme } = this.props; const componentStyles = classNames([ @@ -23,3 +23,5 @@ export default class SyncingConnectingBackground extends Component { return
; } } + +export default SyncingConnectingBackground \ No newline at end of file diff --git a/source/renderer/app/components/loading/system-time-error/SystemTimeError.tsx b/source/renderer/app/components/loading/system-time-error/SystemTimeError.tsx index 314a52b1de..14e4321626 100644 --- a/source/renderer/app/components/loading/system-time-error/SystemTimeError.tsx +++ b/source/renderer/app/components/loading/system-time-error/SystemTimeError.tsx @@ -76,7 +76,7 @@ type Props = { }; @observer -export default class SystemTimeError extends Component { +class SystemTimeError extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -184,3 +184,5 @@ export default class SystemTimeError extends Component { ); } } + +export default SystemTimeError \ No newline at end of file diff --git a/source/renderer/app/components/navigation/NavButton.tsx b/source/renderer/app/components/navigation/NavButton.tsx index 186daac2f7..960ddc2220 100755 --- a/source/renderer/app/components/navigation/NavButton.tsx +++ b/source/renderer/app/components/navigation/NavButton.tsx @@ -15,7 +15,7 @@ type Props = { }; @observer -export default class NavButton extends Component { +class NavButton extends Component { render() { const { isActive, icon, onClick, className, hasNotification } = this.props; const componentClasses = classnames([ @@ -38,3 +38,5 @@ export default class NavButton extends Component { ); } } + +export default NavButton \ No newline at end of file diff --git a/source/renderer/app/components/navigation/NavDropdown.tsx b/source/renderer/app/components/navigation/NavDropdown.tsx index fab20f105a..dd8b77a766 100644 --- a/source/renderer/app/components/navigation/NavDropdown.tsx +++ b/source/renderer/app/components/navigation/NavDropdown.tsx @@ -20,7 +20,7 @@ type Props = { }; @observer -export default class NavDropdown extends Component { +class NavDropdown extends Component { render() { const { label, @@ -69,3 +69,5 @@ export default class NavDropdown extends Component { ); } } + +export default NavDropdown \ No newline at end of file diff --git a/source/renderer/app/components/navigation/Navigation.tsx b/source/renderer/app/components/navigation/Navigation.tsx index d0b153f24a..44dc4b71c0 100755 --- a/source/renderer/app/components/navigation/Navigation.tsx +++ b/source/renderer/app/components/navigation/Navigation.tsx @@ -28,7 +28,7 @@ type Props = { }; @observer -export default class Navigation extends Component { +class Navigation extends Component { isActiveNavItem = ( id: string, item: NavButtonProps | NavDropdownProps | {} @@ -78,3 +78,5 @@ export default class Navigation extends Component { ); } } + +export default Navigation \ No newline at end of file diff --git a/source/renderer/app/components/news/AlertsOverlay.tsx b/source/renderer/app/components/news/AlertsOverlay.tsx index c173829220..356c3c7f5f 100644 --- a/source/renderer/app/components/news/AlertsOverlay.tsx +++ b/source/renderer/app/components/news/AlertsOverlay.tsx @@ -27,7 +27,7 @@ type Props = { }; @observer -export default class AlertsOverlay extends Component { +class AlertsOverlay extends Component { constructor(props: Props) { super(props); this.state = { @@ -128,3 +128,5 @@ export default class AlertsOverlay extends Component { ); } } + +export default AlertsOverlay \ No newline at end of file diff --git a/source/renderer/app/components/news/IncidentOverlay.tsx b/source/renderer/app/components/news/IncidentOverlay.tsx index e0aad3ba93..21ab14e2f8 100644 --- a/source/renderer/app/components/news/IncidentOverlay.tsx +++ b/source/renderer/app/components/news/IncidentOverlay.tsx @@ -18,7 +18,7 @@ type Props = { }; @observer -export default class IncidentOverlay extends Component { +class IncidentOverlay extends Component { localizedDateFormat: 'MM/DD/YYYY'; componentDidMount() { @@ -82,3 +82,5 @@ export default class IncidentOverlay extends Component { ); } } + +export default IncidentOverlay \ No newline at end of file diff --git a/source/renderer/app/components/news/NewsFeed.tsx b/source/renderer/app/components/news/NewsFeed.tsx index 7775a5a57e..6fdfa1465c 100644 --- a/source/renderer/app/components/news/NewsFeed.tsx +++ b/source/renderer/app/components/news/NewsFeed.tsx @@ -54,7 +54,7 @@ type State = { const SCROLLABLE_DOM_ELEMENT_SELECTOR = '.NewsFeed_newsFeedList'; @observer -export default class NewsFeed extends Component { +class NewsFeed extends Component { static defaultProps = { onClose: null, openWithoutTransition: false, @@ -256,3 +256,5 @@ export default class NewsFeed extends Component { ); } } + +export default NewsFeed \ No newline at end of file diff --git a/source/renderer/app/components/news/NewsItem.tsx b/source/renderer/app/components/news/NewsItem.tsx index a155115512..1ca15df092 100644 --- a/source/renderer/app/components/news/NewsItem.tsx +++ b/source/renderer/app/components/news/NewsItem.tsx @@ -29,7 +29,7 @@ type State = { }; @observer -export default class NewsItem extends Component { +class NewsItem extends Component { static defaultProps = { onNewsItemActionClick: null, expandWithoutTransition: false, @@ -166,3 +166,5 @@ export default class NewsItem extends Component { ); } } + +export default NewsItem \ No newline at end of file diff --git a/source/renderer/app/components/news/UpdateItem.tsx b/source/renderer/app/components/news/UpdateItem.tsx index 77ab095ae2..023b436945 100644 --- a/source/renderer/app/components/news/UpdateItem.tsx +++ b/source/renderer/app/components/news/UpdateItem.tsx @@ -15,7 +15,7 @@ type Props = { }; @observer -export default class UpdateItem extends Component { +class UpdateItem extends Component { static defaultProps = { onupdateItemActionClick: null, expandWithoutTransition: false, @@ -76,3 +76,5 @@ export default class UpdateItem extends Component { ); } } + +export default UpdateItem \ No newline at end of file diff --git a/source/renderer/app/components/notifications/LegacyBadge.tsx b/source/renderer/app/components/notifications/LegacyBadge.tsx index 5ac8552ce5..428376c242 100644 --- a/source/renderer/app/components/notifications/LegacyBadge.tsx +++ b/source/renderer/app/components/notifications/LegacyBadge.tsx @@ -23,7 +23,7 @@ type Props = { }; @observer -export default class LegacyBadge extends Component { +class LegacyBadge extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -40,3 +40,5 @@ export default class LegacyBadge extends Component { return
{label}
; } } + +export default LegacyBadge \ No newline at end of file diff --git a/source/renderer/app/components/notifications/LegacyNotification.tsx b/source/renderer/app/components/notifications/LegacyNotification.tsx index cd7b33794d..d640615316 100644 --- a/source/renderer/app/components/notifications/LegacyNotification.tsx +++ b/source/renderer/app/components/notifications/LegacyNotification.tsx @@ -88,7 +88,7 @@ type Props = { }; @observer -export default class LegacyNotification extends Component { +class LegacyNotification extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -177,3 +177,5 @@ export default class LegacyNotification extends Component { ); } } + +export default LegacyNotification \ No newline at end of file diff --git a/source/renderer/app/components/notifications/RestoreNotification.tsx b/source/renderer/app/components/notifications/RestoreNotification.tsx index ab929cfc48..66a4cf3577 100644 --- a/source/renderer/app/components/notifications/RestoreNotification.tsx +++ b/source/renderer/app/components/notifications/RestoreNotification.tsx @@ -23,7 +23,7 @@ type Props = { }; @observer -export default class RestoreNotification extends Component { +class RestoreNotification extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -49,3 +49,5 @@ export default class RestoreNotification extends Component { ); } } + +export default RestoreNotification \ No newline at end of file diff --git a/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.tsx b/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.tsx index 9b45f49635..278840a8aa 100644 --- a/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.tsx +++ b/source/renderer/app/components/profile/data-layer-migration/DataLayerMigrationForm.tsx @@ -44,7 +44,7 @@ type Props = { }; @observer -export default class DataLayerMigrationForm extends Component { +class DataLayerMigrationForm extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -84,3 +84,5 @@ export default class DataLayerMigrationForm extends Component { ); } } + +export default DataLayerMigrationForm \ No newline at end of file diff --git a/source/renderer/app/components/profile/initial-settings/InitialSettings.tsx b/source/renderer/app/components/profile/initial-settings/InitialSettings.tsx index 742fddc577..43ae92cf67 100644 --- a/source/renderer/app/components/profile/initial-settings/InitialSettings.tsx +++ b/source/renderer/app/components/profile/initial-settings/InitialSettings.tsx @@ -6,7 +6,7 @@ import ProfileSettingsForm from '../../widgets/forms/ProfileSettingsForm'; import type { ProfileSettingsFormProps } from '../../widgets/forms/ProfileSettingsForm'; @observer -export default class InitialSettings extends Component { +class InitialSettings extends Component { static defaultProps = { error: null, }; @@ -38,3 +38,5 @@ export default class InitialSettings extends Component ); } } + +export default InitialSettings \ No newline at end of file diff --git a/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.tsx b/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.tsx index 1471496ba9..807af90d47 100644 --- a/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.tsx +++ b/source/renderer/app/components/profile/terms-of-use/TermsOfUseForm.tsx @@ -44,7 +44,7 @@ type State = { }; @observer -export default class TermsOfUseForm extends Component { +class TermsOfUseForm extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -108,3 +108,5 @@ export default class TermsOfUseForm extends Component { ); } } + +export default TermsOfUseForm \ No newline at end of file diff --git a/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.tsx b/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.tsx index eecb828c3a..c523c0e5d9 100644 --- a/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.tsx +++ b/source/renderer/app/components/profile/terms-of-use/TermsOfUseText.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class TermsOfUseText extends Component { +class TermsOfUseText extends Component { termsOfUseClickHandler = (event: SyntheticMouseEvent) => { const linkUrl = get(event, ['target', 'href']); if (linkUrl) { @@ -35,3 +35,5 @@ export default class TermsOfUseText extends Component { ); } } + +export default TermsOfUseText \ No newline at end of file diff --git a/source/renderer/app/components/settings/SettingsLayout.tsx b/source/renderer/app/components/settings/SettingsLayout.tsx index 1fcd988bef..c84e3a0ad3 100644 --- a/source/renderer/app/components/settings/SettingsLayout.tsx +++ b/source/renderer/app/components/settings/SettingsLayout.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class SettingsLayout extends Component { +class SettingsLayout extends Component { scrollableDomElement: ?HTMLElement = null; componentDidMount() { @@ -42,3 +42,5 @@ export default class SettingsLayout extends Component { ); } } + +export default SettingsLayout \ No newline at end of file diff --git a/source/renderer/app/components/settings/categories/DisplaySettings.tsx b/source/renderer/app/components/settings/categories/DisplaySettings.tsx index f8cd85b1f4..e76d033b88 100644 --- a/source/renderer/app/components/settings/categories/DisplaySettings.tsx +++ b/source/renderer/app/components/settings/categories/DisplaySettings.tsx @@ -79,7 +79,7 @@ type Props = { }; @observer -export default class DisplaySettings extends Component { +class DisplaySettings extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -272,3 +272,5 @@ export default class DisplaySettings extends Component { ); } } + +export default DisplaySettings \ No newline at end of file diff --git a/source/renderer/app/components/settings/categories/GeneralSettings.tsx b/source/renderer/app/components/settings/categories/GeneralSettings.tsx index 55d981f2ed..07fd4ae41c 100644 --- a/source/renderer/app/components/settings/categories/GeneralSettings.tsx +++ b/source/renderer/app/components/settings/categories/GeneralSettings.tsx @@ -5,7 +5,7 @@ import ProfileSettingsForm from '../../widgets/forms/ProfileSettingsForm'; import type { ProfileSettingsFormProps } from '../../widgets/forms/ProfileSettingsForm'; @observer -export default class GeneralSettings extends Component { +class GeneralSettings extends Component { render() { const { onChangeItem, @@ -27,3 +27,5 @@ export default class GeneralSettings extends Component ); } } + +export default GeneralSettings \ No newline at end of file diff --git a/source/renderer/app/components/settings/categories/StakePoolsSettings.tsx b/source/renderer/app/components/settings/categories/StakePoolsSettings.tsx index 1cfe9ca70f..0b5deb2a07 100644 --- a/source/renderer/app/components/settings/categories/StakePoolsSettings.tsx +++ b/source/renderer/app/components/settings/categories/StakePoolsSettings.tsx @@ -155,7 +155,7 @@ type State = { const { isSelfnode } = global.environment; @observer -export default class StakePoolsSettings extends Component { +class StakePoolsSettings extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -410,3 +410,5 @@ export default class StakePoolsSettings extends Component { ); } } + +export default StakePoolsSettings \ No newline at end of file diff --git a/source/renderer/app/components/settings/categories/SupportSettings.tsx b/source/renderer/app/components/settings/categories/SupportSettings.tsx index 4a55c5e2e6..0900f8daff 100644 --- a/source/renderer/app/components/settings/categories/SupportSettings.tsx +++ b/source/renderer/app/components/settings/categories/SupportSettings.tsx @@ -79,7 +79,7 @@ type Props = { }; @observer -export default class SupportSettings extends Component { +class SupportSettings extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -167,3 +167,5 @@ export default class SupportSettings extends Component { ); } } + +export default SupportSettings \ No newline at end of file diff --git a/source/renderer/app/components/settings/categories/TermsOfUseSettings.tsx b/source/renderer/app/components/settings/categories/TermsOfUseSettings.tsx index 9c55f5a288..0afe5a6974 100644 --- a/source/renderer/app/components/settings/categories/TermsOfUseSettings.tsx +++ b/source/renderer/app/components/settings/categories/TermsOfUseSettings.tsx @@ -10,7 +10,7 @@ type Props = { }; @observer -export default class TermsOfUseSettings extends Component { +class TermsOfUseSettings extends Component { render() { const { localizedTermsOfUse, onOpenExternalLink } = this.props; return ( @@ -23,3 +23,5 @@ export default class TermsOfUseSettings extends Component { ); } } + +export default TermsOfUseSettings \ No newline at end of file diff --git a/source/renderer/app/components/settings/categories/WalletsSettings.tsx b/source/renderer/app/components/settings/categories/WalletsSettings.tsx index 36c12a2631..9b88776466 100644 --- a/source/renderer/app/components/settings/categories/WalletsSettings.tsx +++ b/source/renderer/app/components/settings/categories/WalletsSettings.tsx @@ -56,7 +56,7 @@ type Props = { }; @observer -export default class WalletSettings extends Component { +class WalletSettings extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -126,3 +126,5 @@ export default class WalletSettings extends Component { ); } } + +export default WalletSettings \ No newline at end of file diff --git a/source/renderer/app/components/settings/menu/SettingsMenuItem.tsx b/source/renderer/app/components/settings/menu/SettingsMenuItem.tsx index 6acbf8c3b2..d7c6f66aa2 100644 --- a/source/renderer/app/components/settings/menu/SettingsMenuItem.tsx +++ b/source/renderer/app/components/settings/menu/SettingsMenuItem.tsx @@ -13,7 +13,7 @@ type Props = { }; @observer -export default class SettingsMenuItem extends Component { +class SettingsMenuItem extends Component { render() { const { label, active, disabled, onClick, className } = this.props; let state = styles.enabled; @@ -30,3 +30,5 @@ export default class SettingsMenuItem extends Component { ); } } + +export default SettingsMenuItem \ No newline at end of file diff --git a/source/renderer/app/components/sidebar/SidebarCategory.tsx b/source/renderer/app/components/sidebar/SidebarCategory.tsx index e92fe0f923..32a9c41496 100644 --- a/source/renderer/app/components/sidebar/SidebarCategory.tsx +++ b/source/renderer/app/components/sidebar/SidebarCategory.tsx @@ -16,7 +16,7 @@ type Props = { }; @observer -export default class SidebarCategory extends Component { +class SidebarCategory extends Component { render() { const { category, isActive, onClick, content } = this.props; const { name, icon, route } = category; @@ -40,3 +40,5 @@ export default class SidebarCategory extends Component { ); } } + +export default SidebarCategory \ No newline at end of file diff --git a/source/renderer/app/components/sidebar/SidebarMenu.tsx b/source/renderer/app/components/sidebar/SidebarMenu.tsx index 68571f443b..aaa762146e 100644 --- a/source/renderer/app/components/sidebar/SidebarMenu.tsx +++ b/source/renderer/app/components/sidebar/SidebarMenu.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class SidebarMenu extends Component { +class SidebarMenu extends Component { render() { const { children, visible } = this.props; const componentStyles = classNames([ @@ -21,3 +21,5 @@ export default class SidebarMenu extends Component { return
{children}
; } } + +export default SidebarMenu \ No newline at end of file diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.tsx b/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.tsx index 6ff98fc89b..10c88f2dc3 100644 --- a/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.tsx +++ b/source/renderer/app/components/sidebar/wallets/SidebarWalletMenuItem.tsx @@ -31,7 +31,7 @@ type Props = { }; @observer -export default class SidebarWalletMenuItem extends Component { +class SidebarWalletMenuItem extends Component { render() { const { title, @@ -115,3 +115,5 @@ export default class SidebarWalletMenuItem extends Component { ); } } + +export default SidebarWalletMenuItem \ No newline at end of file diff --git a/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.tsx b/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.tsx index c82cdcfb3e..b7c53da67c 100644 --- a/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.tsx +++ b/source/renderer/app/components/sidebar/wallets/SidebarWalletsMenu.tsx @@ -78,7 +78,7 @@ type Props = { }; @observer -export default class SidebarWalletsMenu extends Component { +class SidebarWalletsMenu extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -219,3 +219,5 @@ export default class SidebarWalletsMenu extends Component { ); } } + +export default SidebarWalletsMenu \ No newline at end of file diff --git a/source/renderer/app/components/staking/StakingUnavailable.tsx b/source/renderer/app/components/staking/StakingUnavailable.tsx index 8639057389..a1066e7739 100644 --- a/source/renderer/app/components/staking/StakingUnavailable.tsx +++ b/source/renderer/app/components/staking/StakingUnavailable.tsx @@ -12,7 +12,7 @@ type Props = { }; @observer -export default class StakingUnavailable extends Component { +class StakingUnavailable extends Component { render() { const { syncPercentage } = this.props; @@ -31,3 +31,5 @@ export default class StakingUnavailable extends Component { ); } } + +export default StakingUnavailable \ No newline at end of file diff --git a/source/renderer/app/components/staking/countdown/StakingCountdown.tsx b/source/renderer/app/components/staking/countdown/StakingCountdown.tsx index 2811ec46cc..6623228e4d 100644 --- a/source/renderer/app/components/staking/countdown/StakingCountdown.tsx +++ b/source/renderer/app/components/staking/countdown/StakingCountdown.tsx @@ -38,7 +38,7 @@ type Props = { }; @observer -export default class StakingCountdown extends Component { +class StakingCountdown extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -81,3 +81,5 @@ export default class StakingCountdown extends Component { ); } } + +export default StakingCountdown \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenter.tsx b/source/renderer/app/components/staking/delegation-center/DelegationCenter.tsx index 1b3b87e7b2..452e699aa2 100644 --- a/source/renderer/app/components/staking/delegation-center/DelegationCenter.tsx +++ b/source/renderer/app/components/staking/delegation-center/DelegationCenter.tsx @@ -33,7 +33,7 @@ type Props = { }; @observer -export default class DelegationCenter extends Component { +class DelegationCenter extends Component { render() { const { wallets, @@ -89,3 +89,5 @@ export default class DelegationCenter extends Component { ); } } + +export default DelegationCenter \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.tsx b/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.tsx index 2c282ea5cd..3f28774c2e 100644 --- a/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.tsx +++ b/source/renderer/app/components/staking/delegation-center/DelegationCenterBody.tsx @@ -48,7 +48,7 @@ type Props = { }; @observer -export default class DelegationCenterBody extends Component { +class DelegationCenterBody extends Component { loadingSpinner: ?LoadingSpinner; static contextTypes = { @@ -145,3 +145,5 @@ export default class DelegationCenterBody extends Component { ); } } + +export default DelegationCenterBody \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.tsx b/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.tsx index 113c1707c5..d2d647496d 100644 --- a/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.tsx +++ b/source/renderer/app/components/staking/delegation-center/DelegationCenterHeader.tsx @@ -58,7 +58,7 @@ type Props = { type State = { timeUntilFutureEpoch: number }; @observer -export default class DelegationCenterHeader extends Component { +class DelegationCenterHeader extends Component { intervalHandler: ?IntervalID = null; state = { timeUntilFutureEpoch: 0 }; @@ -179,3 +179,5 @@ export default class DelegationCenterHeader extends Component { ); } } + +export default DelegationCenterHeader \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-center/DonutRing.tsx b/source/renderer/app/components/staking/delegation-center/DonutRing.tsx index 212489166d..8aeaeb9103 100644 --- a/source/renderer/app/components/staking/delegation-center/DonutRing.tsx +++ b/source/renderer/app/components/staking/delegation-center/DonutRing.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class DonutRing extends Component { +class DonutRing extends Component { static defaultProps = { showText: false, }; @@ -64,3 +64,5 @@ export default class DonutRing extends Component { ); } } + +export default DonutRing \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-center/DropdownMenu.tsx b/source/renderer/app/components/staking/delegation-center/DropdownMenu.tsx index 7606fae977..f9a485bdb9 100644 --- a/source/renderer/app/components/staking/delegation-center/DropdownMenu.tsx +++ b/source/renderer/app/components/staking/delegation-center/DropdownMenu.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class DropdownMenu extends Component { +class DropdownMenu extends Component { optionRenderer = (option: any) => ( {option.label} ); @@ -38,3 +38,5 @@ export default class DropdownMenu extends Component { ); } } + +export default DropdownMenu \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-center/WalletRow.tsx b/source/renderer/app/components/staking/delegation-center/WalletRow.tsx index 98927a2cd3..cb62553cc3 100644 --- a/source/renderer/app/components/staking/delegation-center/WalletRow.tsx +++ b/source/renderer/app/components/staking/delegation-center/WalletRow.tsx @@ -101,7 +101,7 @@ const initialWalletRowState = { highlightedPoolId: false, }; @observer -export default class WalletRow extends Component { +class WalletRow extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -486,3 +486,5 @@ export default class WalletRow extends Component { ); } } + +export default WalletRow \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.tsx b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.tsx index 3f1cbf4c8a..3539aadd07 100644 --- a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.tsx +++ b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationSetupWizardDialog.tsx @@ -66,7 +66,7 @@ const getOversaturationPercentage = ( }; @observer -export default class DelegationSetupWizardDialog extends Component { +class DelegationSetupWizardDialog extends Component { componentDidUpdate(prevProps: Props) { // On confirm delegation step, wait for API stake pool "join" endpoint response // and redirect to "Ta-Da" step @@ -209,3 +209,5 @@ export default class DelegationSetupWizardDialog extends Component { return content; } } + +export default DelegationSetupWizardDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx index a3aa064514..43d48f8786 100644 --- a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx +++ b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsConfirmationDialog.tsx @@ -53,7 +53,7 @@ type Props = { }; @observer -export default class DelegationStepsConfirmationDialog extends Component { +class DelegationStepsConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -296,3 +296,5 @@ export default class DelegationStepsConfirmationDialog extends Component ); } } + +export default DelegationStepsConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.tsx b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.tsx index 34ab7fe49c..c4a5929692 100644 --- a/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.tsx +++ b/source/renderer/app/components/staking/delegation-setup-wizard/DelegationStepsSuccessDialog.tsx @@ -55,7 +55,7 @@ type Props = { type State = { timeUntilNextEpochStart: number }; @observer -export default class DelegationStepsSuccessDialog extends Component< +class DelegationStepsSuccessDialog extends Component< Props, State > { @@ -157,3 +157,5 @@ export default class DelegationStepsSuccessDialog extends Component< ); } } + +export default DelegationStepsSuccessDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/epochs/StakingEpochs.tsx b/source/renderer/app/components/staking/epochs/StakingEpochs.tsx index be191db1e1..6dd35f2e24 100644 --- a/source/renderer/app/components/staking/epochs/StakingEpochs.tsx +++ b/source/renderer/app/components/staking/epochs/StakingEpochs.tsx @@ -43,7 +43,7 @@ type State = { const { CURRENT_EPOCH, PREVIOUS_EPOCH } = SELECTED_EPOCH_OPTIONS; @observer -export default class StakingEpochs extends Component { +class StakingEpochs extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -158,3 +158,5 @@ export default class StakingEpochs extends Component { ); } } + +export default StakingEpochs \ No newline at end of file diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.tsx b/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.tsx index 919c7c70b7..2c2c73ad88 100644 --- a/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.tsx +++ b/source/renderer/app/components/staking/epochs/StakingEpochsCurrentEpochData.tsx @@ -38,7 +38,7 @@ type State = { }; @observer -export default class StakingEpochsCurrentEpochData extends Component< +class StakingEpochsCurrentEpochData extends Component< Props, State > { @@ -133,3 +133,5 @@ export default class StakingEpochsCurrentEpochData extends Component< ); } } + +export default StakingEpochsCurrentEpochData \ No newline at end of file diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.tsx b/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.tsx index b3ee7a2bd6..b9c19e151b 100644 --- a/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.tsx +++ b/source/renderer/app/components/staking/epochs/StakingEpochsDataTable.tsx @@ -22,7 +22,7 @@ type Props = { }; @observer -export default class StakingEpochsDataTable extends Component { +class StakingEpochsDataTable extends Component { render() { const { tableHeaders, @@ -61,3 +61,5 @@ export default class StakingEpochsDataTable extends Component { ); } } + +export default StakingEpochsDataTable \ No newline at end of file diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsNoData.tsx b/source/renderer/app/components/staking/epochs/StakingEpochsNoData.tsx index 7de422c8b6..75813b3825 100644 --- a/source/renderer/app/components/staking/epochs/StakingEpochsNoData.tsx +++ b/source/renderer/app/components/staking/epochs/StakingEpochsNoData.tsx @@ -13,7 +13,7 @@ const messages = defineMessages({ }); @observer -export default class StakingEpochsNoData extends Component { +class StakingEpochsNoData extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -28,3 +28,5 @@ export default class StakingEpochsNoData extends Component { ); } } + +export default StakingEpochsNoData \ No newline at end of file diff --git a/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.tsx b/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.tsx index b8c58272cf..6c4e87315b 100644 --- a/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.tsx +++ b/source/renderer/app/components/staking/epochs/StakingEpochsPreviousEpochData.tsx @@ -59,7 +59,7 @@ type State = { }; @observer -export default class StakingEpochsPreviousEpochData extends Component< +class StakingEpochsPreviousEpochData extends Component< Props, State > { @@ -179,3 +179,5 @@ export default class StakingEpochsPreviousEpochData extends Component< ); } } + +export default StakingEpochsPreviousEpochData \ No newline at end of file diff --git a/source/renderer/app/components/staking/info/StakingInfo.tsx b/source/renderer/app/components/staking/info/StakingInfo.tsx index f24ba5e6fd..ec924eb0c8 100644 --- a/source/renderer/app/components/staking/info/StakingInfo.tsx +++ b/source/renderer/app/components/staking/info/StakingInfo.tsx @@ -45,7 +45,7 @@ type Props = { type State = { progressLabelClassName: string }; @observer -export default class StakingInfo extends Component { +class StakingInfo extends Component { static defaultProps = { percentage: 0, }; @@ -134,3 +134,5 @@ export default class StakingInfo extends Component { ); } } + +export default StakingInfo \ No newline at end of file diff --git a/source/renderer/app/components/staking/info/StakingInfoCountdown.tsx b/source/renderer/app/components/staking/info/StakingInfoCountdown.tsx index 737423a201..1989064b21 100644 --- a/source/renderer/app/components/staking/info/StakingInfoCountdown.tsx +++ b/source/renderer/app/components/staking/info/StakingInfoCountdown.tsx @@ -53,7 +53,7 @@ type Props = { }; @observer -export default class StakingInfoCountdown extends Component { +class StakingInfoCountdown extends Component { static defaultProps = { percentage: 0, }; @@ -122,3 +122,5 @@ export default class StakingInfoCountdown extends Component { ); } } + +export default StakingInfoCountdown \ No newline at end of file diff --git a/source/renderer/app/components/staking/layouts/StakingWithNavigation.tsx b/source/renderer/app/components/staking/layouts/StakingWithNavigation.tsx index d4258e0d21..14b90cacc4 100644 --- a/source/renderer/app/components/staking/layouts/StakingWithNavigation.tsx +++ b/source/renderer/app/components/staking/layouts/StakingWithNavigation.tsx @@ -23,7 +23,7 @@ export const StakingPageScrollContext = React.createContext({ }); @observer -export default class StakingWithNavigation extends Component { +class StakingWithNavigation extends Component { stakingPageRef = createRef<*>(); render() { @@ -62,3 +62,5 @@ export default class StakingWithNavigation extends Component { ); } } + +export default StakingWithNavigation \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/BlockGenerationInfo.tsx b/source/renderer/app/components/staking/legacy/BlockGenerationInfo.tsx index 07e8db453d..9b97a6ab41 100644 --- a/source/renderer/app/components/staking/legacy/BlockGenerationInfo.tsx +++ b/source/renderer/app/components/staking/legacy/BlockGenerationInfo.tsx @@ -4,7 +4,7 @@ import { observer } from 'mobx-react'; import styles from './BlockGenerationInfo.scss'; @observer -export default class BlockGenerationInfo extends Component { +class BlockGenerationInfo extends Component { render() { return (
@@ -20,3 +20,5 @@ export default class BlockGenerationInfo extends Component { ); } } + +export default BlockGenerationInfo \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/Staking.tsx b/source/renderer/app/components/staking/legacy/Staking.tsx index 3a9525091b..9378727802 100644 --- a/source/renderer/app/components/staking/legacy/Staking.tsx +++ b/source/renderer/app/components/staking/legacy/Staking.tsx @@ -7,7 +7,7 @@ import StakingSystemState from './StakingSystemState'; import styles from './Staking.scss'; @observer -export default class Settings extends Component { +class Settings extends Component { render() { return (
@@ -24,3 +24,5 @@ export default class Settings extends Component { ); } } + +export default Settings \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/StakingChart.tsx b/source/renderer/app/components/staking/legacy/StakingChart.tsx index 80fa38fede..b37bf69954 100644 --- a/source/renderer/app/components/staking/legacy/StakingChart.tsx +++ b/source/renderer/app/components/staking/legacy/StakingChart.tsx @@ -33,7 +33,7 @@ type State = { }; @observer -export default class StakingChart extends Component { +class StakingChart extends Component { state = { isHovered: false, hoveredBarData: null, @@ -129,3 +129,5 @@ export default class StakingChart extends Component { ); } } + +export default StakingChart \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/StakingChartTooltip.tsx b/source/renderer/app/components/staking/legacy/StakingChartTooltip.tsx index eebf5959b3..f60ce43fee 100644 --- a/source/renderer/app/components/staking/legacy/StakingChartTooltip.tsx +++ b/source/renderer/app/components/staking/legacy/StakingChartTooltip.tsx @@ -53,7 +53,7 @@ type Props = { }; @observer -export default class StakingChartTooltip extends Component { +class StakingChartTooltip extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -106,3 +106,5 @@ export default class StakingChartTooltip extends Component { ); } } + +export default StakingChartTooltip \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.tsx b/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.tsx index 64e0d49df1..899c66a8fb 100644 --- a/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.tsx +++ b/source/renderer/app/components/staking/legacy/StakingChartTooltipItem.tsx @@ -9,7 +9,7 @@ type Props = { }; @observer -export default class StakingChartTooltipItem extends Component { +class StakingChartTooltipItem extends Component { render() { const { value, label } = this.props; return ( @@ -19,3 +19,5 @@ export default class StakingChartTooltipItem extends Component { ); } } + +export default StakingChartTooltipItem \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/StakingSwitch.tsx b/source/renderer/app/components/staking/legacy/StakingSwitch.tsx index 873d0c04ff..a628e5f8d0 100644 --- a/source/renderer/app/components/staking/legacy/StakingSwitch.tsx +++ b/source/renderer/app/components/staking/legacy/StakingSwitch.tsx @@ -11,7 +11,7 @@ type Props = { }; @observer -export default class StakingSwitch extends Component { +class StakingSwitch extends Component { handleChange = () => {}; render() { @@ -29,3 +29,5 @@ export default class StakingSwitch extends Component { ); } } + +export default StakingSwitch \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/StakingSystemState.tsx b/source/renderer/app/components/staking/legacy/StakingSystemState.tsx index bb61edec7f..04cc4ec473 100644 --- a/source/renderer/app/components/staking/legacy/StakingSystemState.tsx +++ b/source/renderer/app/components/staking/legacy/StakingSystemState.tsx @@ -5,7 +5,7 @@ import StakingSystemStateElement from './StakingSystemStateElement'; import styles from './StakingSystemState.scss'; @observer -export default class StakingSystemState extends Component { +class StakingSystemState extends Component { render() { return (
@@ -21,3 +21,5 @@ export default class StakingSystemState extends Component { ); } } + +export default StakingSystemState \ No newline at end of file diff --git a/source/renderer/app/components/staking/legacy/StakingSystemStateElement.tsx b/source/renderer/app/components/staking/legacy/StakingSystemStateElement.tsx index 03fceedf47..c56f87c140 100644 --- a/source/renderer/app/components/staking/legacy/StakingSystemStateElement.tsx +++ b/source/renderer/app/components/staking/legacy/StakingSystemStateElement.tsx @@ -9,7 +9,7 @@ type Props = { }; @observer -export default class StakingSystemState extends Component { +class StakingSystemState extends Component { render() { const { value, label } = this.props; return ( @@ -19,3 +19,5 @@ export default class StakingSystemState extends Component { ); } } + +export default StakingSystemState \ No newline at end of file diff --git a/source/renderer/app/components/staking/navigation/StakingNavigation.tsx b/source/renderer/app/components/staking/navigation/StakingNavigation.tsx index ea2cd882a1..9521704bb9 100644 --- a/source/renderer/app/components/staking/navigation/StakingNavigation.tsx +++ b/source/renderer/app/components/staking/navigation/StakingNavigation.tsx @@ -42,7 +42,7 @@ type Props = { }; @observer -export default class StakingNavigation extends Component { +class StakingNavigation extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -91,3 +91,5 @@ export default class StakingNavigation extends Component { ); } } + +export default StakingNavigation \ No newline at end of file diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.tsx b/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.tsx index 53f7a0374e..c1bc75a2de 100644 --- a/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.tsx +++ b/source/renderer/app/components/staking/redeem-itn-rewards/NoWalletsDialog.tsx @@ -30,7 +30,7 @@ type Props = { }; @observer -export default class NoWalletsDialog extends Component { +class NoWalletsDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -71,3 +71,5 @@ export default class NoWalletsDialog extends Component { ); } } + +export default NoWalletsDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.tsx b/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.tsx index 6505c353cd..4a625531eb 100644 --- a/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.tsx +++ b/source/renderer/app/components/staking/redeem-itn-rewards/RedemptionUnavailableDialog.tsx @@ -31,7 +31,7 @@ type Props = { }; @observer -export default class RedemptionUnavailableDialog extends Component { +class RedemptionUnavailableDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -78,3 +78,5 @@ export default class RedemptionUnavailableDialog extends Component { ); } } + +export default RedemptionUnavailableDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.tsx b/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.tsx index db1e682053..693cf09fd8 100644 --- a/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.tsx +++ b/source/renderer/app/components/staking/redeem-itn-rewards/Step1ConfigurationDialog.tsx @@ -144,7 +144,7 @@ type Props = { }; @observer -export default class Step1ConfigurationDialog extends Component { +class Step1ConfigurationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -402,3 +402,5 @@ export default class Step1ConfigurationDialog extends Component { ); } } + +export default Step1ConfigurationDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.tsx b/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.tsx index 71b08a05bb..0e07a37c17 100644 --- a/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.tsx +++ b/source/renderer/app/components/staking/redeem-itn-rewards/Step2ConfirmationDialog.tsx @@ -78,7 +78,7 @@ type Props = { }; @observer -export default class Step2ConfirmationDialog extends Component { +class Step2ConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -238,3 +238,5 @@ export default class Step2ConfirmationDialog extends Component { ); } } + +export default Step2ConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.tsx b/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.tsx index c117aa45ce..84ad5056f4 100644 --- a/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.tsx +++ b/source/renderer/app/components/staking/redeem-itn-rewards/Step3FailureDialog.tsx @@ -47,7 +47,7 @@ type Props = { }; @observer -export default class Step3FailureDialog extends Component { +class Step3FailureDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -99,3 +99,5 @@ export default class Step3FailureDialog extends Component { ); } } + +export default Step3FailureDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.tsx b/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.tsx index 99aee44b0f..f325788133 100644 --- a/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.tsx +++ b/source/renderer/app/components/staking/redeem-itn-rewards/Step3SuccessDialog.tsx @@ -46,7 +46,7 @@ type Props = { }; @observer -export default class Step3SuccessDialog extends Component { +class Step3SuccessDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -111,3 +111,5 @@ export default class Step3SuccessDialog extends Component { ); } } + +export default Step3SuccessDialog \ No newline at end of file diff --git a/source/renderer/app/components/staking/rewards/StakingRewards.tsx b/source/renderer/app/components/staking/rewards/StakingRewards.tsx index 737bf62958..359eb8a140 100644 --- a/source/renderer/app/components/staking/rewards/StakingRewards.tsx +++ b/source/renderer/app/components/staking/rewards/StakingRewards.tsx @@ -118,7 +118,7 @@ type State = { }; @observer -export default class StakingRewards extends Component { +class StakingRewards extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -454,3 +454,5 @@ export default class StakingRewards extends Component { }); }; } + +export default StakingRewards \ No newline at end of file diff --git a/source/renderer/app/components/staking/stake-pools/StakePools.tsx b/source/renderer/app/components/staking/stake-pools/StakePools.tsx index ddd82c0b36..9bfa2adb97 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePools.tsx +++ b/source/renderer/app/components/staking/stake-pools/StakePools.tsx @@ -110,7 +110,7 @@ const initialState = { }; @observer -export default class StakePools extends Component { +class StakePools extends Component { loadingSpinner: ?LoadingSpinner; static contextTypes = { @@ -383,3 +383,5 @@ export default class StakePools extends Component { ); } } + +export default StakePools \ No newline at end of file diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.tsx b/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.tsx index f81a331d40..0d3400fd89 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.tsx +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsRankingLoader.tsx @@ -5,7 +5,7 @@ import LoadingSpinner from '../../widgets/LoadingSpinner'; import styles from './StakePoolsRankingLoader.scss'; @observer -export default class StakePoolsRankingLoader extends Component { +class StakePoolsRankingLoader extends Component { render() { return (
@@ -14,3 +14,5 @@ export default class StakePoolsRankingLoader extends Component { ); } } + +export default StakePoolsRankingLoader \ No newline at end of file diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTable.tsx b/source/renderer/app/components/staking/stake-pools/StakePoolsTable.tsx index 231d9b119f..8e3eae2279 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsTable.tsx +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsTable.tsx @@ -166,7 +166,7 @@ const initialState = { }; @observer -export class StakePoolsTable extends Component { +class StakePoolsTable extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -422,3 +422,5 @@ export class StakePoolsTable extends Component { ); } } + +export { StakePoolsTable } \ No newline at end of file diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.tsx b/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.tsx index a535c78aa4..511cd2abc9 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.tsx +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsTableBody.tsx @@ -27,7 +27,7 @@ type TableBodyProps = { }; @observer -export class StakePoolsTableBody extends Component { +class StakePoolsTableBody extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -129,3 +129,5 @@ export class StakePoolsTableBody extends Component { }); } } + +export { StakePoolsTableBody } \ No newline at end of file diff --git a/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.tsx b/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.tsx index e17cb40909..6c4ff65b31 100644 --- a/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.tsx +++ b/source/renderer/app/components/staking/stake-pools/StakePoolsTableHeader.tsx @@ -16,7 +16,7 @@ type TableHeaderProps = { }; @observer -export class StakePoolsTableHeader extends Component { +class StakePoolsTableHeader extends Component { render() { const { availableTableHeaders, @@ -48,3 +48,5 @@ export class StakePoolsTableHeader extends Component { }); } } + +export { StakePoolsTableHeader } \ No newline at end of file diff --git a/source/renderer/app/components/staking/widgets/ThumbPoolContent.tsx b/source/renderer/app/components/staking/widgets/ThumbPoolContent.tsx index 1d28df556f..fee5327fd6 100644 --- a/source/renderer/app/components/staking/widgets/ThumbPoolContent.tsx +++ b/source/renderer/app/components/staking/widgets/ThumbPoolContent.tsx @@ -23,7 +23,7 @@ type Props = { }; @observer -export default class ThumbPoolContent extends Component { +class ThumbPoolContent extends Component { formattedRewards = (potentialRewards: BigNumber) => { const potentialRewardsAsString = formattedWalletAmount(potentialRewards); let targetLength = 4; @@ -126,3 +126,5 @@ export default class ThumbPoolContent extends Component { ); } } + +export default ThumbPoolContent \ No newline at end of file diff --git a/source/renderer/app/components/staking/widgets/ThumbSelectedPool.tsx b/source/renderer/app/components/staking/widgets/ThumbSelectedPool.tsx index ecc244acbd..c92fd192ad 100644 --- a/source/renderer/app/components/staking/widgets/ThumbSelectedPool.tsx +++ b/source/renderer/app/components/staking/widgets/ThumbSelectedPool.tsx @@ -18,7 +18,7 @@ type Props = { }; @observer -export default class ThumbSelectedPool extends Component { +class ThumbSelectedPool extends Component { render() { const { stakePool, @@ -62,3 +62,5 @@ export default class ThumbSelectedPool extends Component { ); } } + +export default ThumbSelectedPool \ No newline at end of file diff --git a/source/renderer/app/components/staking/widgets/TooltipPool.tsx b/source/renderer/app/components/staking/widgets/TooltipPool.tsx index 8553f74521..6ed9b7814e 100644 --- a/source/renderer/app/components/staking/widgets/TooltipPool.tsx +++ b/source/renderer/app/components/staking/widgets/TooltipPool.tsx @@ -172,7 +172,7 @@ type State = { }; @observer -export default class TooltipPool extends Component { +class TooltipPool extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -523,3 +523,5 @@ export default class TooltipPool extends Component { ); } } + +export default TooltipPool \ No newline at end of file diff --git a/source/renderer/app/components/status/DaedalusDiagnostics.tsx b/source/renderer/app/components/status/DaedalusDiagnostics.tsx index 3035c79ee8..67e8cd02dc 100644 --- a/source/renderer/app/components/status/DaedalusDiagnostics.tsx +++ b/source/renderer/app/components/status/DaedalusDiagnostics.tsx @@ -379,7 +379,7 @@ const FINAL_CARDANO_NODE_STATES = [ ]; @observer -export default class DaedalusDiagnostics extends Component { +class DaedalusDiagnostics extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -828,3 +828,5 @@ export default class DaedalusDiagnostics extends Component { this.restoreDialogCloseOnEscKey(); }; } + +export default DaedalusDiagnostics \ No newline at end of file diff --git a/source/renderer/app/components/voting/VotingRegistrationDialogWizard.tsx b/source/renderer/app/components/voting/VotingRegistrationDialogWizard.tsx index 4b789380a4..7d92868f66 100644 --- a/source/renderer/app/components/voting/VotingRegistrationDialogWizard.tsx +++ b/source/renderer/app/components/voting/VotingRegistrationDialogWizard.tsx @@ -46,7 +46,7 @@ type Props = { }; @observer -export default class VotingRegistrationDialogWizard extends Component { +class VotingRegistrationDialogWizard extends Component { render() { const { stepsList, @@ -161,3 +161,5 @@ export default class VotingRegistrationDialogWizard extends Component { return content; } } + +export default VotingRegistrationDialogWizard \ No newline at end of file diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.tsx b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.tsx index 31817cf169..8bf76a0d1a 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.tsx +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsConfirm.tsx @@ -81,7 +81,7 @@ type Props = { }; @observer -export default class VotingRegistrationStepsConfirm extends Component { +class VotingRegistrationStepsConfirm extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -189,3 +189,5 @@ export default class VotingRegistrationStepsConfirm extends Component { ); } } + +export default VotingRegistrationStepsConfirm \ No newline at end of file diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.tsx b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.tsx index c86222e6c9..e75bfb126a 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.tsx +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsEnterPinCode.tsx @@ -70,7 +70,7 @@ type Props = { }; @observer -export default class VotingRegistrationStepsEnterPinCode extends Component { +class VotingRegistrationStepsEnterPinCode extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -198,3 +198,5 @@ export default class VotingRegistrationStepsEnterPinCode extends Component { @@ -190,3 +190,5 @@ export default class VotingRegistrationStepsQrCode extends Component< ); } } + +export default VotingRegistrationStepsQrCode \ No newline at end of file diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.tsx b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.tsx index 3295628f43..b83ec6e8f5 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.tsx +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/VotingRegistrationStepsRegister.tsx @@ -90,7 +90,7 @@ type Props = { }; @observer -export default class VotingRegistrationStepsRegister extends Component { +class VotingRegistrationStepsRegister extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -256,3 +256,5 @@ export default class VotingRegistrationStepsRegister extends Component { ); } } + +export default VotingRegistrationStepsRegister \ No newline at end of file diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.tsx b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.tsx index b01a702d70..da5e14c949 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.tsx +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/ConfirmationDialog.tsx @@ -43,7 +43,7 @@ type Props = { }; @observer -export default class ConfirmationDialog extends Component { +class ConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -93,3 +93,5 @@ export default class ConfirmationDialog extends Component { ); } } + +export default ConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.tsx b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.tsx index 46af397359..0a2fcf808d 100644 --- a/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.tsx +++ b/source/renderer/app/components/voting/voting-registration-wizard-steps/widgets/VotingRegistrationDialog.tsx @@ -40,7 +40,7 @@ type Props = { }; @observer -export default class VotingRegistrationDialog extends Component { +class VotingRegistrationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -103,3 +103,5 @@ export default class VotingRegistrationDialog extends Component { ); } } + +export default VotingRegistrationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/WalletAdd.tsx b/source/renderer/app/components/wallet/WalletAdd.tsx index ddff841ed7..83b70b78ba 100644 --- a/source/renderer/app/components/wallet/WalletAdd.tsx +++ b/source/renderer/app/components/wallet/WalletAdd.tsx @@ -108,7 +108,7 @@ type Props = { }; @observer -export default class WalletAdd extends Component { +class WalletAdd extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -197,3 +197,5 @@ export default class WalletAdd extends Component { ); } } + +export default WalletAdd \ No newline at end of file diff --git a/source/renderer/app/components/wallet/WalletBackupDialog.tsx b/source/renderer/app/components/wallet/WalletBackupDialog.tsx index 2a57175056..9886770f71 100644 --- a/source/renderer/app/components/wallet/WalletBackupDialog.tsx +++ b/source/renderer/app/components/wallet/WalletBackupDialog.tsx @@ -31,7 +31,7 @@ type Props = { }; @observer -export default class WalletBackupDialog extends Component { +class WalletBackupDialog extends Component { render() { const { currentStep, @@ -99,3 +99,5 @@ export default class WalletBackupDialog extends Component { return null; } } + +export default WalletBackupDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/WalletConnectDialog.tsx b/source/renderer/app/components/wallet/WalletConnectDialog.tsx index d4cd61d0fa..7bad1c9a75 100644 --- a/source/renderer/app/components/wallet/WalletConnectDialog.tsx +++ b/source/renderer/app/components/wallet/WalletConnectDialog.tsx @@ -87,7 +87,7 @@ type Props = { }; @observer -export default class WalletConnectDialog extends Component { +class WalletConnectDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -226,3 +226,5 @@ export default class WalletConnectDialog extends Component { ); } } + +export default WalletConnectDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/WalletCreateDialog.tsx b/source/renderer/app/components/wallet/WalletCreateDialog.tsx index 1b9e6f03f4..51838e4ac3 100644 --- a/source/renderer/app/components/wallet/WalletCreateDialog.tsx +++ b/source/renderer/app/components/wallet/WalletCreateDialog.tsx @@ -98,7 +98,7 @@ type State = { }; @observer -export default class WalletCreateDialog extends Component { +class WalletCreateDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -299,3 +299,5 @@ export default class WalletCreateDialog extends Component { ); } } + +export default WalletCreateDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/WalletRestoreDialog.tsx b/source/renderer/app/components/wallet/WalletRestoreDialog.tsx index a9d7a8c90c..e231448b3e 100644 --- a/source/renderer/app/components/wallet/WalletRestoreDialog.tsx +++ b/source/renderer/app/components/wallet/WalletRestoreDialog.tsx @@ -212,7 +212,7 @@ type State = { }; @observer -export default class WalletRestoreDialog extends Component { +class WalletRestoreDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -679,3 +679,5 @@ export default class WalletRestoreDialog extends Component { if (onChoiceChange) onChoiceChange(); }; } + +export default WalletRestoreDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/WalletSendForm.spec.tsx b/source/renderer/app/components/wallet/WalletSendForm.spec.tsx index 5950c7a9e3..08506b5662 100644 --- a/source/renderer/app/components/wallet/WalletSendForm.spec.tsx +++ b/source/renderer/app/components/wallet/WalletSendForm.spec.tsx @@ -168,7 +168,7 @@ describe('wallet/Wallet Send Form', () => { }); Array.from({ length: times }).forEach(() => { - // $FlowFixMe + // @ts-ignore mock.mockResolvedValueOnce({ fee: new BigNumber(1), minimumAda: new BigNumber(minimumAda), diff --git a/source/renderer/app/components/wallet/WalletSendForm.tsx b/source/renderer/app/components/wallet/WalletSendForm.tsx index 4811c2cbe9..b474d66f48 100755 --- a/source/renderer/app/components/wallet/WalletSendForm.tsx +++ b/source/renderer/app/components/wallet/WalletSendForm.tsx @@ -105,7 +105,7 @@ type State = { }; @observer -export default class WalletSendForm extends Component { +class WalletSendForm extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -1189,3 +1189,5 @@ export default class WalletSendForm extends Component { ); } } + +export default WalletSendForm \ No newline at end of file diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.tsx b/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.tsx index c4b155bfea..63a219e44f 100644 --- a/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.tsx +++ b/source/renderer/app/components/wallet/backup-recovery/WalletBackupPrivacyWarningDialog.tsx @@ -58,7 +58,7 @@ type Props = { }; @observer -export default class WalletBackupPrivacyWarningDialog extends Component { +class WalletBackupPrivacyWarningDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -129,3 +129,5 @@ export default class WalletBackupPrivacyWarningDialog extends Component { ); } } + +export default WalletBackupPrivacyWarningDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.tsx b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.tsx index 1a5f34b64a..a1338edc7c 100644 --- a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.tsx +++ b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryInstructions.tsx @@ -9,9 +9,11 @@ type Props = { }; @observer -export default class WalletRecoveryInstructions extends Component { +class WalletRecoveryInstructions extends Component { render() { const { instructionsText } = this.props; return
{instructionsText}
; } } + +export default WalletRecoveryInstructions \ No newline at end of file diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.tsx b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.tsx index 32eea1ff14..81aec2debb 100644 --- a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.tsx +++ b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseDisplayDialog.tsx @@ -37,7 +37,7 @@ type Props = { }; @observer -export default class WalletRecoveryPhraseDisplayDialog extends Component { +class WalletRecoveryPhraseDisplayDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -93,3 +93,5 @@ export default class WalletRecoveryPhraseDisplayDialog extends Component ); } } + +export default WalletRecoveryPhraseDisplayDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.tsx b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.tsx index a987f90f7f..ceefc65ff3 100644 --- a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.tsx +++ b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseEntryDialog.tsx @@ -102,7 +102,7 @@ type Props = { }; @observer -export default class WalletRecoveryPhraseEntryDialog extends Component { +class WalletRecoveryPhraseEntryDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -257,3 +257,5 @@ export default class WalletRecoveryPhraseEntryDialog extends Component { ); } } + +export default WalletRecoveryPhraseEntryDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.tsx b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.tsx index d9447fee2c..14cb5f4af9 100644 --- a/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.tsx +++ b/source/renderer/app/components/wallet/backup-recovery/WalletRecoveryPhraseMnemonic.tsx @@ -8,9 +8,11 @@ type Props = { }; @observer -export default class WalletRecoveryPhraseMnemonic extends Component { +class WalletRecoveryPhraseMnemonic extends Component { render() { const { phrase } = this.props; return
{phrase}
; } } + +export default WalletRecoveryPhraseMnemonic \ No newline at end of file diff --git a/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.tsx b/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.tsx index 7dd1585481..80417e8779 100644 --- a/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.tsx +++ b/source/renderer/app/components/wallet/file-import/WalletFileImportDialog.tsx @@ -83,7 +83,7 @@ type Props = { }; @observer -export default class WalletFileImportDialog extends Component { +class WalletFileImportDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -268,3 +268,5 @@ export default class WalletFileImportDialog extends Component { ); } } + +export default WalletFileImportDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx b/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx index 75a8f4612b..ff06ca47b7 100644 --- a/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx +++ b/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx @@ -25,7 +25,7 @@ type Props = { }; @observer -export default class WalletWithNavigation extends Component { +class WalletWithNavigation extends Component { render() { const { children, @@ -77,3 +77,5 @@ export default class WalletWithNavigation extends Component { ); } } + +export default WalletWithNavigation \ No newline at end of file diff --git a/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx b/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx index c849308fa4..8e0999ebc1 100755 --- a/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx +++ b/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx @@ -68,7 +68,7 @@ type Props = { }; @observer -export default class WalletNavigation extends Component { +class WalletNavigation extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -134,3 +134,5 @@ export default class WalletNavigation extends Component { ); } } + +export default WalletNavigation \ No newline at end of file diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx index 7cdfa1f465..59dc07943d 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx @@ -82,7 +82,7 @@ type State = { }; @observer -export default class CompletionDialog extends Component { +class CompletionDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -207,3 +207,5 @@ export default class CompletionDialog extends Component { ); } } + +export default CompletionDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx index abc09a7369..5a9f8f49cb 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx @@ -47,7 +47,7 @@ type Props = { }; @observer -export default class ConfirmationDialog extends Component { +class ConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -94,3 +94,5 @@ export default class ConfirmationDialog extends Component { ); } } + +export default ConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx index c706db794c..d67791a087 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx @@ -117,7 +117,7 @@ type Props = { }; @observer -export default class InstructionsDialog extends Component { +class InstructionsDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -228,3 +228,5 @@ export default class InstructionsDialog extends Component { ); } } + +export default InstructionsDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx index 0d54a4bcd1..34cc9a9b32 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx @@ -71,7 +71,7 @@ type Props = { }; @observer -export default class PrintDialog extends Component { +class PrintDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -184,3 +184,5 @@ export default class PrintDialog extends Component { ); } } + +export default PrintDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx index 876e45f615..85e46e4c3e 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx @@ -54,7 +54,7 @@ type Props = { }; @observer -export default class SecuringPasswordDialog extends Component { +class SecuringPasswordDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -130,3 +130,5 @@ export default class SecuringPasswordDialog extends Component { ); } } + +export default SecuringPasswordDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx index 8a5ef770ed..f57ffa25cb 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx @@ -103,7 +103,7 @@ type Props = { }; @observer -export default class VerificationDialog extends Component { +class VerificationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -325,3 +325,5 @@ export default class VerificationDialog extends Component { ); } } + +export default VerificationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/AddressActions.tsx b/source/renderer/app/components/wallet/receive/AddressActions.tsx index 76b266e328..ed24daa511 100644 --- a/source/renderer/app/components/wallet/receive/AddressActions.tsx +++ b/source/renderer/app/components/wallet/receive/AddressActions.tsx @@ -53,7 +53,7 @@ type Props = { }; @observer -export default class AddressActions extends Component { +class AddressActions extends Component { static defaultProps = { type: 'copy', }; @@ -105,3 +105,5 @@ export default class AddressActions extends Component { ); } } + +export default AddressActions \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/AddressRandom.tsx b/source/renderer/app/components/wallet/receive/AddressRandom.tsx index 64798e6a94..a1768ad412 100644 --- a/source/renderer/app/components/wallet/receive/AddressRandom.tsx +++ b/source/renderer/app/components/wallet/receive/AddressRandom.tsx @@ -14,7 +14,7 @@ type Props = { }; @observer -export default class AddressRandom extends Component { +class AddressRandom extends Component { render() { const { address, onCopyAddress, onShareAddress, index } = this.props; const addressClasses = classnames([ @@ -37,3 +37,5 @@ export default class AddressRandom extends Component { ); } } + +export default AddressRandom \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/AddressSequential.tsx b/source/renderer/app/components/wallet/receive/AddressSequential.tsx index db463c18a5..b1e134fc1b 100644 --- a/source/renderer/app/components/wallet/receive/AddressSequential.tsx +++ b/source/renderer/app/components/wallet/receive/AddressSequential.tsx @@ -16,7 +16,7 @@ type Props = { }; @observer -export default class AddressSequential extends Component { +class AddressSequential extends Component { addressElement: ?HTMLElement; addressContainerElement: ?HTMLElement; @@ -91,3 +91,5 @@ export default class AddressSequential extends Component { ); } } + +export default AddressSequential \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx b/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx index e2f39e705f..2926c8e874 100644 --- a/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx +++ b/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx @@ -27,7 +27,7 @@ const ADDRESS_LINE_PADDING = 21; const ADDRESS_SELECTOR = '.Address'; @observer -export class VirtualAddressesList extends Component { +class VirtualAddressesList extends Component { list: List; listWidth: number = 0; addressHeight: number = 0; @@ -120,3 +120,5 @@ export class VirtualAddressesList extends Component { ); } } + +export { VirtualAddressesList } \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx b/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx index b60b7f6672..0b07755e14 100644 --- a/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx +++ b/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx @@ -162,7 +162,7 @@ type State = { }; @observer -export default class WalletReceiveDialog extends Component { +class WalletReceiveDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -527,3 +527,5 @@ export default class WalletReceiveDialog extends Component { ); } } + +export default WalletReceiveDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx b/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx index 04dc8a20ed..0d3d20b412 100644 --- a/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx +++ b/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx @@ -85,7 +85,7 @@ type Props = { }; @observer -export default class WalletReceiveRandom extends Component { +class WalletReceiveRandom extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -317,3 +317,5 @@ export default class WalletReceiveRandom extends Component { ); } } + +export default WalletReceiveRandom \ No newline at end of file diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx b/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx index efc9b5aaf1..342606baf6 100644 --- a/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx +++ b/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx @@ -60,7 +60,7 @@ type State = { }; @observer -export default class WalletReceiveSequential extends Component { +class WalletReceiveSequential extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -199,3 +199,5 @@ export default class WalletReceiveSequential extends Component { ); } } + +export default WalletReceiveSequential \ No newline at end of file diff --git a/source/renderer/app/components/wallet/send-form/AssetInput.tsx b/source/renderer/app/components/wallet/send-form/AssetInput.tsx index b541e783c4..629c2ad97e 100644 --- a/source/renderer/app/components/wallet/send-form/AssetInput.tsx +++ b/source/renderer/app/components/wallet/send-form/AssetInput.tsx @@ -34,7 +34,7 @@ type Props = { const INPUT_FIELD_PADDING_DELTA = 10; @observer -export default class AssetInput extends Component { +class AssetInput extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -190,3 +190,5 @@ export default class AssetInput extends Component { ); } } + +export default AssetInput \ No newline at end of file diff --git a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx index 27a0ea97ed..3295956e57 100644 --- a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx @@ -67,7 +67,7 @@ type State = { const messages = getMessages(); @observer -export default class WalletSendAssetsConfirmationDialog extends Component< +class WalletSendAssetsConfirmationDialog extends Component< Props, State > { @@ -477,3 +477,5 @@ export default class WalletSendAssetsConfirmationDialog extends Component< ); } } + +export default WalletSendAssetsConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx index f2d5474d22..3df1a2d0a0 100644 --- a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx @@ -53,7 +53,7 @@ type State = { const messages = getMessages(); @observer -export default class WalletSendConfirmationDialog extends Component< +class WalletSendConfirmationDialog extends Component< Props, State > { @@ -319,3 +319,5 @@ export default class WalletSendConfirmationDialog extends Component< ); } } + +export default WalletSendConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx b/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx index dabce99569..a5d21492b9 100644 --- a/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx @@ -100,7 +100,7 @@ type Props = { }; @observer -export default class ChangeSpendingPasswordDialog extends Component { +class ChangeSpendingPasswordDialog extends Component { static defaultProps = { currentPasswordValue: '', newPasswordValue: '', @@ -338,3 +338,5 @@ export default class ChangeSpendingPasswordDialog extends Component { ); } } + +export default ChangeSpendingPasswordDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx b/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx index da020a477f..4dacc668a1 100644 --- a/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx @@ -71,7 +71,7 @@ type State = { }; @observer -export default class ExportWalletToFileDialog extends Component { +class ExportWalletToFileDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -208,3 +208,5 @@ export default class ExportWalletToFileDialog extends Component { ); } } + +export default ExportWalletToFileDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx b/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx index 658d7c2d46..088a79240e 100644 --- a/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx @@ -43,7 +43,7 @@ type Props = { }; @observer -export default class ICOPublicKeyDialog extends Component { +class ICOPublicKeyDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -142,3 +142,5 @@ export default class ICOPublicKeyDialog extends Component { ); } } + +export default ICOPublicKeyDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx b/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx index daf3cb5c6e..65b136dcea 100644 --- a/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx +++ b/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx @@ -35,7 +35,7 @@ type Props = { }; @observer -export default class SetWalletPassword extends Component { +class SetWalletPassword extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -76,3 +76,5 @@ export default class SetWalletPassword extends Component { ); } } + +export default SetWalletPassword \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx b/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx index 5f0b9bec5a..43172b6f88 100644 --- a/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx @@ -119,7 +119,7 @@ type Props = { }; @observer -export default class UndelegateWalletConfirmationDialog extends Component { +class UndelegateWalletConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -406,3 +406,5 @@ export default class UndelegateWalletConfirmationDialog extends Component ); } } + +export default UndelegateWalletConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx b/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx index 5c5e6952cd..221a4d5544 100644 --- a/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx +++ b/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx @@ -40,7 +40,7 @@ type Props = { type State = { timeUntilNextEpochStart: number }; @observer -export default class UndelegateWalletSuccessDialog extends Component< +class UndelegateWalletSuccessDialog extends Component< Props, State > { @@ -125,3 +125,5 @@ export default class UndelegateWalletSuccessDialog extends Component< ); } } + +export default UndelegateWalletSuccessDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx b/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx index 45f7dc55ce..03de1e0eb9 100644 --- a/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx @@ -42,7 +42,7 @@ type Props = { }; @observer -export default class WalletPublicKeyDialog extends Component { +class WalletPublicKeyDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -141,3 +141,5 @@ export default class WalletPublicKeyDialog extends Component { ); } } + +export default WalletPublicKeyDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx index 2939ea0a07..1c3c5dc552 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx @@ -46,7 +46,7 @@ type State = { }; @observer -export default class WalletRecoveryPhraseStep1Dialog extends Component< +class WalletRecoveryPhraseStep1Dialog extends Component< Props, State > { @@ -104,3 +104,5 @@ export default class WalletRecoveryPhraseStep1Dialog extends Component< ); } } + +export default WalletRecoveryPhraseStep1Dialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.tsx index 7c813c079d..dd5e602d15 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep2Dialog.tsx @@ -73,7 +73,7 @@ type State = { }; @observer -export default class WalletRecoveryPhraseStep2Dialog extends Component< +class WalletRecoveryPhraseStep2Dialog extends Component< Props, State > { @@ -195,3 +195,5 @@ export default class WalletRecoveryPhraseStep2Dialog extends Component< ); } } + +export default WalletRecoveryPhraseStep2Dialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.tsx index cbbfe8b4fa..308e822669 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep3Dialog.tsx @@ -46,7 +46,7 @@ type State = { }; @observer -export default class WalletRecoveryPhraseStep3Dialog extends Component< +class WalletRecoveryPhraseStep3Dialog extends Component< Props, State > { @@ -104,3 +104,5 @@ export default class WalletRecoveryPhraseStep3Dialog extends Component< ); } } + +export default WalletRecoveryPhraseStep3Dialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.tsx index 426e140c97..f60b1ad8d5 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep4Dialog.tsx @@ -57,7 +57,7 @@ type Props = { }; @observer -export default class WalletRecoveryPhraseStep4Dialog extends Component { +class WalletRecoveryPhraseStep4Dialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -107,3 +107,5 @@ export default class WalletRecoveryPhraseStep4Dialog extends Component { ); } } + +export default WalletRecoveryPhraseStep4Dialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx index a2d0da52b0..08ba087dae 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx @@ -134,7 +134,7 @@ export type Props = { }; @observer -export default class WalletRecoveryPhraseVerificationWidget extends Component { +class WalletRecoveryPhraseVerificationWidget extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -294,3 +294,5 @@ export default class WalletRecoveryPhraseVerificationWidget extends Component { +class WalletSettings extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -410,3 +410,5 @@ export default class WalletSettings extends Component { ); } } + +export default WalletSettings \ No newline at end of file diff --git a/source/renderer/app/components/wallet/summary/WalletSummary.tsx b/source/renderer/app/components/wallet/summary/WalletSummary.tsx index a3eae25d17..bd55cbf1a3 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummary.tsx +++ b/source/renderer/app/components/wallet/summary/WalletSummary.tsx @@ -44,7 +44,7 @@ type Props = { }; @observer -export default class WalletSummary extends Component { +class WalletSummary extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -121,3 +121,5 @@ export default class WalletSummary extends Component { ); } } + +export default WalletSummary \ No newline at end of file diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.tsx b/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.tsx index 86217c1858..8cf0485156 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.tsx +++ b/source/renderer/app/components/wallet/summary/WalletSummaryCurrency.tsx @@ -43,7 +43,7 @@ type Props = { }; @observer -export default class WalletSummaryCurrency extends Component { +class WalletSummaryCurrency extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -122,3 +122,5 @@ export default class WalletSummaryCurrency extends Component { ); } } + +export default WalletSummaryCurrency \ No newline at end of file diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryHeader.tsx b/source/renderer/app/components/wallet/summary/WalletSummaryHeader.tsx index 1776007af6..8985193196 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummaryHeader.tsx +++ b/source/renderer/app/components/wallet/summary/WalletSummaryHeader.tsx @@ -35,7 +35,7 @@ type Props = { }; @observer -export default class WalletSummaryHeader extends Component { +class WalletSummaryHeader extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -111,3 +111,5 @@ export default class WalletSummaryHeader extends Component { ); } } + +export default WalletSummaryHeader \ No newline at end of file diff --git a/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.tsx b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.tsx index 4ec76e11fd..1933cbcb2a 100644 --- a/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.tsx +++ b/source/renderer/app/components/wallet/tokens/wallet-no-tokens/WalletNoTokens.tsx @@ -44,7 +44,7 @@ type Props = { }; @observer -export default class WalletSummaryNoTokens extends Component { +class WalletSummaryNoTokens extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -82,3 +82,5 @@ export default class WalletSummaryNoTokens extends Component { ); } } + +export default WalletSummaryNoTokens \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.tsx b/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.tsx index 02bc5e5a5e..aad0511a12 100644 --- a/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.tsx @@ -48,7 +48,7 @@ type Props = { }; @observer -export default class CancelTransactionConfirmationDialog extends Component { +class CancelTransactionConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -98,3 +98,5 @@ export default class CancelTransactionConfirmationDialog extends Component { +class FilterButton extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -52,3 +52,5 @@ export default class FilterButton extends Component { ); } } + +export default FilterButton \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/FilterResultInfo.tsx b/source/renderer/app/components/wallet/transactions/FilterResultInfo.tsx index 07b3e478dc..ae5d4b3228 100644 --- a/source/renderer/app/components/wallet/transactions/FilterResultInfo.tsx +++ b/source/renderer/app/components/wallet/transactions/FilterResultInfo.tsx @@ -19,7 +19,7 @@ type Props = { }; @observer -export default class FilterResultInfo extends Component { +class FilterResultInfo extends Component { render() { const { filtered, total } = this.props; const resultInfo = ( @@ -34,3 +34,5 @@ export default class FilterResultInfo extends Component { return
{resultInfo}
; } } + +export default FilterResultInfo \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/WalletNoTransactions.tsx b/source/renderer/app/components/wallet/transactions/WalletNoTransactions.tsx index fdda1b3301..d7726872f7 100644 --- a/source/renderer/app/components/wallet/transactions/WalletNoTransactions.tsx +++ b/source/renderer/app/components/wallet/transactions/WalletNoTransactions.tsx @@ -6,7 +6,7 @@ import styles from './WalletNoTransactions.scss'; type Props = { label: string }; @observer -export default class WalletNoTransactions extends Component { +class WalletNoTransactions extends Component { render() { const { label } = this.props; @@ -17,3 +17,5 @@ export default class WalletNoTransactions extends Component { ); } } + +export default WalletNoTransactions \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactions.tsx b/source/renderer/app/components/wallet/transactions/WalletTransactions.tsx index d7056cbb44..0f1eadd00e 100644 --- a/source/renderer/app/components/wallet/transactions/WalletTransactions.tsx +++ b/source/renderer/app/components/wallet/transactions/WalletTransactions.tsx @@ -54,7 +54,7 @@ type State = { }; @observer -export default class WalletTransactions extends Component { +class WalletTransactions extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -171,3 +171,5 @@ export default class WalletTransactions extends Component { ); } } + +export default WalletTransactions \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.tsx b/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.tsx index 066a1a8b19..95e0205791 100644 --- a/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.tsx +++ b/source/renderer/app/components/wallet/transactions/WalletTransactionsHeader.tsx @@ -34,7 +34,7 @@ type Props = { }; @observer -export default class WalletTransactionsHeader extends Component { +class WalletTransactionsHeader extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -104,3 +104,5 @@ export default class WalletTransactionsHeader extends Component { ); } } + +export default WalletTransactionsHeader \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsList.tsx b/source/renderer/app/components/wallet/transactions/WalletTransactionsList.tsx index 7ae231b5fd..785a00386b 100644 --- a/source/renderer/app/components/wallet/transactions/WalletTransactionsList.tsx +++ b/source/renderer/app/components/wallet/transactions/WalletTransactionsList.tsx @@ -79,7 +79,7 @@ type State = { const DATE_FORMAT = 'YYYY-MM-DD'; @observer -export default class WalletTransactionsList extends Component { +class WalletTransactionsList extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -378,3 +378,5 @@ export default class WalletTransactionsList extends Component { ); } } + +export default WalletTransactionsList \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.tsx b/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.tsx index 149143f57f..0ca71355fa 100644 --- a/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.tsx +++ b/source/renderer/app/components/wallet/transactions/WalletTransactionsSearch.tsx @@ -20,7 +20,7 @@ type Props = { }; @observer -export default class WalletTransactionsSearch extends Component { +class WalletTransactionsSearch extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -42,3 +42,5 @@ export default class WalletTransactionsSearch extends Component { ); } } + +export default WalletTransactionsSearch \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.tsx b/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.tsx index 2a4f791b67..b3c5b45d69 100644 --- a/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.tsx +++ b/source/renderer/app/components/wallet/transactions/render-strategies/SimpleTransactionList.tsx @@ -13,7 +13,7 @@ type Props = { }; @observer -export class SimpleTransactionList extends Component { +class SimpleTransactionList extends Component { static defaultProps = { onOpenExternalLink: () => {}, }; @@ -51,3 +51,5 @@ export class SimpleTransactionList extends Component { ); } } + +export { SimpleTransactionList } \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.tsx b/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.tsx index 33982a19ed..d7fd944505 100644 --- a/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.tsx +++ b/source/renderer/app/components/wallet/transactions/render-strategies/VirtualTransactionList.tsx @@ -31,7 +31,7 @@ const TX_ADDRESS_SELECTOR = '.Transaction_address'; const TX_ID_SELECTOR = '.Transaction_transactionId'; @observer -export class VirtualTransactionList extends Component { +class VirtualTransactionList extends Component { list: List; rowHeights: RowHeight[] = []; txAddressHeight: number = 0; @@ -346,3 +346,5 @@ export class VirtualTransactionList extends Component { ); } } + +export { VirtualTransactionList } \ No newline at end of file diff --git a/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.tsx b/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.tsx index 48476ca773..6b544ffc22 100644 --- a/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.tsx +++ b/source/renderer/app/components/wallet/transfer-funds/TransferFundsStep2Dialog.tsx @@ -97,7 +97,7 @@ type Props = { }; @observer -export default class TransferFundsStep2Dialog extends Component { +class TransferFundsStep2Dialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -273,3 +273,5 @@ export default class TransferFundsStep2Dialog extends Component { ); } } + +export default TransferFundsStep2Dialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.tsx b/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.tsx index 218297359d..bc23533bca 100644 --- a/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.tsx +++ b/source/renderer/app/components/wallet/utxo/WalletUtxoCursor.tsx @@ -14,7 +14,7 @@ const OFFSET_TOP = 20; const OFFSET_BOTTOM = 60; @observer -export default class WalletUtxoCursor extends Component { +class WalletUtxoCursor extends Component { render() { let { x, width, height } = this.props; const { offsetWidth } = this.props; @@ -41,3 +41,5 @@ export default class WalletUtxoCursor extends Component { ); } } + +export default WalletUtxoCursor \ No newline at end of file diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoTick.tsx b/source/renderer/app/components/wallet/utxo/WalletUtxoTick.tsx index 15348c81ca..372f05cd9f 100644 --- a/source/renderer/app/components/wallet/utxo/WalletUtxoTick.tsx +++ b/source/renderer/app/components/wallet/utxo/WalletUtxoTick.tsx @@ -15,7 +15,7 @@ export type TickProps = { }; @observer -export default class WalletUtxoTick extends Component { +class WalletUtxoTick extends Component { render() { const { x, @@ -35,3 +35,5 @@ export default class WalletUtxoTick extends Component { ); } } + +export default WalletUtxoTick \ No newline at end of file diff --git a/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.tsx b/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.tsx index 547c68e6da..1086b7a371 100644 --- a/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.tsx +++ b/source/renderer/app/components/wallet/utxo/WalletUtxoTooltip.tsx @@ -37,7 +37,7 @@ type Props = { }; @observer -export default class WalletUtxoTooltip extends Component { +class WalletUtxoTooltip extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -74,3 +74,5 @@ export default class WalletUtxoTooltip extends Component { ); } } + +export default WalletUtxoTooltip \ No newline at end of file diff --git a/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.tsx b/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.tsx index b419ba34de..ec8d6a8727 100644 --- a/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-import/WalletImportFileDialog.tsx @@ -109,7 +109,7 @@ type State = { }; @observer -export default class WalletImportFileDialog extends Component { +class WalletImportFileDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -290,3 +290,5 @@ export default class WalletImportFileDialog extends Component { ); } } + +export default WalletImportFileDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.tsx b/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.tsx index 9c11f2004e..16e55d47c2 100644 --- a/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-import/WalletSelectImportDialog.tsx @@ -129,7 +129,7 @@ type Props = { }; @observer -export default class WalletSelectImportDialog extends Component { +class WalletSelectImportDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -490,3 +490,5 @@ export default class WalletSelectImportDialog extends Component { ); } } + +export default WalletSelectImportDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx index b77b11d7ba..e97689abdb 100644 --- a/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx @@ -94,7 +94,7 @@ type Props = { }; @observer -export default class ConfigurationDialog extends Component { +class ConfigurationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -307,3 +307,5 @@ export default class ConfigurationDialog extends Component { ); } } + +export default ConfigurationDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx index ec39377d94..b9d2891d43 100644 --- a/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx @@ -67,7 +67,7 @@ type Props = { }; @observer -export default class MnemonicsDialog extends Component { +class MnemonicsDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -173,3 +173,5 @@ export default class MnemonicsDialog extends Component { ); } } + +export default MnemonicsDialog \ No newline at end of file diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx index 7d49bd5ce8..eaf7878923 100644 --- a/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx @@ -40,7 +40,7 @@ type Props = { }; @observer -export default class ConfirmationDialog extends Component { +class ConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -84,3 +84,5 @@ export default class ConfirmationDialog extends Component { ); } } + +export default ConfirmationDialog \ No newline at end of file diff --git a/source/renderer/app/components/widgets/BorderedBox.tsx b/source/renderer/app/components/widgets/BorderedBox.tsx index 81ac081ee5..2e48a5ba55 100644 --- a/source/renderer/app/components/widgets/BorderedBox.tsx +++ b/source/renderer/app/components/widgets/BorderedBox.tsx @@ -14,7 +14,7 @@ type Props = { }; @observer -export default class BorderedBox extends Component { +class BorderedBox extends Component { render() { const { children, @@ -40,3 +40,5 @@ export default class BorderedBox extends Component { ); } } + +export default BorderedBox \ No newline at end of file diff --git a/source/renderer/app/components/widgets/CountdownWidget.tsx b/source/renderer/app/components/widgets/CountdownWidget.tsx index 9eb048d9a0..90e2951627 100644 --- a/source/renderer/app/components/widgets/CountdownWidget.tsx +++ b/source/renderer/app/components/widgets/CountdownWidget.tsx @@ -41,7 +41,7 @@ type Props = { type State = { timeLeft: ?number }; @observer -export default class CountdownWidget extends Component { +class CountdownWidget extends Component { intervalHandler: ?IntervalID = null; state = { timeLeft: null }; @@ -190,3 +190,5 @@ export default class CountdownWidget extends Component { ); } } + +export default CountdownWidget \ No newline at end of file diff --git a/source/renderer/app/components/widgets/FullyDecentralizedEffect.tsx b/source/renderer/app/components/widgets/FullyDecentralizedEffect.tsx index 86d4c6a557..d5b6e34523 100644 --- a/source/renderer/app/components/widgets/FullyDecentralizedEffect.tsx +++ b/source/renderer/app/components/widgets/FullyDecentralizedEffect.tsx @@ -12,7 +12,7 @@ type Props = { }; @observer -export default class FullyDecentralizedEffect extends Component { +class FullyDecentralizedEffect extends Component { constructor(props: Props) { super(props); this.container = createRef(); @@ -68,3 +68,5 @@ export default class FullyDecentralizedEffect extends Component { return
; } } + +export default FullyDecentralizedEffect \ No newline at end of file diff --git a/source/renderer/app/components/widgets/ProgressBar.tsx b/source/renderer/app/components/widgets/ProgressBar.tsx index e274e09173..1e5db95771 100644 --- a/source/renderer/app/components/widgets/ProgressBar.tsx +++ b/source/renderer/app/components/widgets/ProgressBar.tsx @@ -8,7 +8,7 @@ type Props = { }; @observer -export default class ProgressBar extends Component { +class ProgressBar extends Component { static defaultProps = { progress: 0, }; @@ -22,3 +22,5 @@ export default class ProgressBar extends Component { ); } } + +export default ProgressBar \ No newline at end of file diff --git a/source/renderer/app/components/widgets/ProgressBarLarge.tsx b/source/renderer/app/components/widgets/ProgressBarLarge.tsx index 592032c9a7..961f18d602 100644 --- a/source/renderer/app/components/widgets/ProgressBarLarge.tsx +++ b/source/renderer/app/components/widgets/ProgressBarLarge.tsx @@ -15,7 +15,7 @@ type Props = { }; @observer -export default class ProgressBarLarge extends Component { +class ProgressBarLarge extends Component { static defaultProps = { progress: 0, }; @@ -66,3 +66,5 @@ export default class ProgressBarLarge extends Component { ); } } + +export default ProgressBarLarge \ No newline at end of file diff --git a/source/renderer/app/components/widgets/RadioSet.tsx b/source/renderer/app/components/widgets/RadioSet.tsx index f25733fa89..21b3daeea8 100644 --- a/source/renderer/app/components/widgets/RadioSet.tsx +++ b/source/renderer/app/components/widgets/RadioSet.tsx @@ -28,7 +28,7 @@ type RadioProps = $Exact<{ }>; @observer -export default class RadioSet extends Component { +class RadioSet extends Component { render() { const { label, items, verticallyAligned } = this.props; const radiosContainerStyles = classnames([ @@ -52,3 +52,5 @@ export default class RadioSet extends Component { ); } } + +export default RadioSet \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/FileUploadWidget.tsx b/source/renderer/app/components/widgets/forms/FileUploadWidget.tsx index 8f01807865..819bec7244 100644 --- a/source/renderer/app/components/widgets/forms/FileUploadWidget.tsx +++ b/source/renderer/app/components/widgets/forms/FileUploadWidget.tsx @@ -17,7 +17,7 @@ type Props = { }; @observer -export default class FileUploadWidget extends Component { +class FileUploadWidget extends Component { onOpen = async () => { const params: FileDialogRequestParams = { filters: [ @@ -78,3 +78,5 @@ export default class FileUploadWidget extends Component { ); } } + +export default FileUploadWidget \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/ImageUploadWidget.tsx b/source/renderer/app/components/widgets/forms/ImageUploadWidget.tsx index 6f80b99d18..2ab6f3d0d6 100644 --- a/source/renderer/app/components/widgets/forms/ImageUploadWidget.tsx +++ b/source/renderer/app/components/widgets/forms/ImageUploadWidget.tsx @@ -22,7 +22,7 @@ type Props = { }; @observer -export default class ImageUploadWidget extends Component { +class ImageUploadWidget extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -47,3 +47,5 @@ export default class ImageUploadWidget extends Component { ); } } + +export default ImageUploadWidget \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/InlineEditingDropdown.tsx b/source/renderer/app/components/widgets/forms/InlineEditingDropdown.tsx index 39ecb901a8..82434d096a 100644 --- a/source/renderer/app/components/widgets/forms/InlineEditingDropdown.tsx +++ b/source/renderer/app/components/widgets/forms/InlineEditingDropdown.tsx @@ -34,7 +34,7 @@ type Props = { }; @observer -export default class InlineEditingDropdown extends Component { +class InlineEditingDropdown extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -94,3 +94,5 @@ export default class InlineEditingDropdown extends Component { ); } } + +export default InlineEditingDropdown \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/InlineEditingInput.tsx b/source/renderer/app/components/widgets/forms/InlineEditingInput.tsx index eeb633dad2..387cd79089 100644 --- a/source/renderer/app/components/widgets/forms/InlineEditingInput.tsx +++ b/source/renderer/app/components/widgets/forms/InlineEditingInput.tsx @@ -64,7 +64,7 @@ type State = { }; @observer -export default class InlineEditingInput extends Component { +class InlineEditingInput extends Component { static defaultProps = { validateOnChange: true, valueErrorMessage: '', @@ -363,3 +363,5 @@ export default class InlineEditingInput extends Component { ); } } + +export default InlineEditingInput \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.tsx b/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.tsx index 16a98f321f..bc1aec468f 100644 --- a/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.tsx +++ b/source/renderer/app/components/widgets/forms/InlineEditingSmallInput.tsx @@ -39,7 +39,7 @@ type State = { }; @observer -export default class InlineEditingSmallInput extends Component { +class InlineEditingSmallInput extends Component { state = { isActive: false, }; @@ -281,3 +281,5 @@ export default class InlineEditingSmallInput extends Component { ); } } + +export default InlineEditingSmallInput \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/MnemonicInputWidget.tsx b/source/renderer/app/components/widgets/forms/MnemonicInputWidget.tsx index 738383823f..86de5acc96 100644 --- a/source/renderer/app/components/widgets/forms/MnemonicInputWidget.tsx +++ b/source/renderer/app/components/widgets/forms/MnemonicInputWidget.tsx @@ -23,7 +23,7 @@ type Props = { }; @observer -export default class MnemonicInputWidget extends Component { +class MnemonicInputWidget extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -54,3 +54,5 @@ export default class MnemonicInputWidget extends Component { ); } } + +export default MnemonicInputWidget \ No newline at end of file diff --git a/source/renderer/app/components/widgets/forms/ProfileSettingsForm.tsx b/source/renderer/app/components/widgets/forms/ProfileSettingsForm.tsx index 5d2c1ec43d..d96bc67aa1 100644 --- a/source/renderer/app/components/widgets/forms/ProfileSettingsForm.tsx +++ b/source/renderer/app/components/widgets/forms/ProfileSettingsForm.tsx @@ -58,7 +58,7 @@ export type ProfileSettingsFormProps = { }; @observer -export default class ProfileSettingsForm extends Component { +class ProfileSettingsForm extends Component { static defaultProps = { onChangeItem: () => {}, }; @@ -141,3 +141,5 @@ export default class ProfileSettingsForm extends Component { +class ReadOnlyInput extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -55,3 +55,5 @@ export default class ReadOnlyInput extends Component { ); } } + +export default ReadOnlyInput \ No newline at end of file diff --git a/source/renderer/app/config/generateStakePoolFakeData.ts b/source/renderer/app/config/generateStakePoolFakeData.ts index 37e013d62b..e877533203 100644 --- a/source/renderer/app/config/generateStakePoolFakeData.ts +++ b/source/renderer/app/config/generateStakePoolFakeData.ts @@ -56,7 +56,7 @@ function generatStakePoolsFakeData() { const fakeStakePools = generatStakePoolsFakeData(); // @TODO - remove flow fix and move fs to main process /* eslint-disable no-undef */ -// $FlowFixMe +// @ts-ignore fs.writeFileSync( `${path.join(__dirname, '/')}stakingStakePools.dummy.json`, JSON.stringify(fakeStakePools, null, '\t') diff --git a/source/renderer/app/containers/MainLayout.tsx b/source/renderer/app/containers/MainLayout.tsx index 900f2f28a5..fc88357993 100644 --- a/source/renderer/app/containers/MainLayout.tsx +++ b/source/renderer/app/containers/MainLayout.tsx @@ -14,7 +14,7 @@ import type { WalletSortConfig } from '../types/sidebarTypes'; @inject('stores', 'actions') @observer -export default class MainLayout extends Component { +class MainLayout extends Component { static defaultProps = { actions: null, stores: null, @@ -114,3 +114,5 @@ export default class MainLayout extends Component { ); } } + +export default MainLayout \ No newline at end of file diff --git a/source/renderer/app/containers/Root.tsx b/source/renderer/app/containers/Root.tsx index afbd312e3d..fb48cbb8fc 100644 --- a/source/renderer/app/containers/Root.tsx +++ b/source/renderer/app/containers/Root.tsx @@ -13,7 +13,7 @@ type Props = InjectedContainerProps; @inject('stores', 'actions') @observer -export default class Root extends Component { +class Root extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -96,3 +96,5 @@ export default class Root extends Component { return children; } } + +export default Root \ No newline at end of file diff --git a/source/renderer/app/containers/appUpdate/AppUpdateContainer.tsx b/source/renderer/app/containers/appUpdate/AppUpdateContainer.tsx index 1ff6025785..8ac1138ed3 100644 --- a/source/renderer/app/containers/appUpdate/AppUpdateContainer.tsx +++ b/source/renderer/app/containers/appUpdate/AppUpdateContainer.tsx @@ -6,7 +6,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class AppUpdateContainer extends Component { +class AppUpdateContainer extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -59,3 +59,5 @@ export default class AppUpdateContainer extends Component { ); } } + +export default AppUpdateContainer \ No newline at end of file diff --git a/source/renderer/app/containers/assets/AssetSettingsDialogContainer.tsx b/source/renderer/app/containers/assets/AssetSettingsDialogContainer.tsx index cabd9fe23e..f7c679e2e9 100644 --- a/source/renderer/app/containers/assets/AssetSettingsDialogContainer.tsx +++ b/source/renderer/app/containers/assets/AssetSettingsDialogContainer.tsx @@ -9,7 +9,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class AssetSettingsDialogContainer extends Component { +class AssetSettingsDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; handleSubmit = (asset: AssetToken, decimals: number) => { @@ -32,3 +32,5 @@ export default class AssetSettingsDialogContainer extends Component { ); } } + +export default AssetSettingsDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/loading/LoadingPage.tsx b/source/renderer/app/containers/loading/LoadingPage.tsx index 1e3c6fe832..5dff447bf9 100644 --- a/source/renderer/app/containers/loading/LoadingPage.tsx +++ b/source/renderer/app/containers/loading/LoadingPage.tsx @@ -9,7 +9,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class LoadingPage extends Component { +class LoadingPage extends Component { static defaultProps = { stores: null, actions: null }; get activeOverlay() { @@ -44,3 +44,5 @@ export default class LoadingPage extends Component { ); } } + +export default LoadingPage \ No newline at end of file diff --git a/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.tsx b/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.tsx index 12b433a91d..64eab5eb8c 100644 --- a/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.tsx +++ b/source/renderer/app/containers/loading/NoDiskSpaceErrorPage.tsx @@ -8,7 +8,7 @@ type Props = InjectedStoresProps; @inject('stores') @observer -export default class NoDiskSpaceErrorPage extends Component { +class NoDiskSpaceErrorPage extends Component { static defaultProps = { stores: null }; render() { @@ -28,3 +28,5 @@ export default class NoDiskSpaceErrorPage extends Component { ); } } + +export default NoDiskSpaceErrorPage \ No newline at end of file diff --git a/source/renderer/app/containers/loading/SyncingConnectingPage.tsx b/source/renderer/app/containers/loading/SyncingConnectingPage.tsx index f18e35a4f4..8c0bda9764 100644 --- a/source/renderer/app/containers/loading/SyncingConnectingPage.tsx +++ b/source/renderer/app/containers/loading/SyncingConnectingPage.tsx @@ -9,7 +9,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class LoadingSyncingConnectingPage extends Component { +class LoadingSyncingConnectingPage extends Component { static defaultProps = { stores: null, actions: null }; render() { @@ -107,3 +107,5 @@ export default class LoadingSyncingConnectingPage extends Component { app.openDaedalusDiagnosticsDialog.trigger(); }; } + +export default LoadingSyncingConnectingPage \ No newline at end of file diff --git a/source/renderer/app/containers/loading/SystemTimeErrorPage.tsx b/source/renderer/app/containers/loading/SystemTimeErrorPage.tsx index a3236729d0..fd95dac509 100644 --- a/source/renderer/app/containers/loading/SystemTimeErrorPage.tsx +++ b/source/renderer/app/containers/loading/SystemTimeErrorPage.tsx @@ -8,7 +8,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class SystemTimeErrorPage extends Component { +class SystemTimeErrorPage extends Component { static defaultProps = { stores: null, actions: null }; render() { @@ -36,3 +36,5 @@ export default class SystemTimeErrorPage extends Component { ); } } + +export default SystemTimeErrorPage \ No newline at end of file diff --git a/source/renderer/app/containers/news/NewsFeedContainer.tsx b/source/renderer/app/containers/news/NewsFeedContainer.tsx index 319912b21c..3c69ac88a5 100644 --- a/source/renderer/app/containers/news/NewsFeedContainer.tsx +++ b/source/renderer/app/containers/news/NewsFeedContainer.tsx @@ -6,7 +6,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class NewsFeedContainer extends Component { +class NewsFeedContainer extends Component { static defaultProps = { actions: null, stores: null }; handleMarkNewsAsRead = (newsId: number) => { @@ -49,3 +49,5 @@ export default class NewsFeedContainer extends Component { ); } } + +export default NewsFeedContainer \ No newline at end of file diff --git a/source/renderer/app/containers/news/NewsOverlayContainer.tsx b/source/renderer/app/containers/news/NewsOverlayContainer.tsx index 04897dbad3..d8802a7590 100644 --- a/source/renderer/app/containers/news/NewsOverlayContainer.tsx +++ b/source/renderer/app/containers/news/NewsOverlayContainer.tsx @@ -7,7 +7,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class NewsOverlayContainer extends Component { +class NewsOverlayContainer extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -69,3 +69,5 @@ export default class NewsOverlayContainer extends Component { return null; } } + +export default NewsOverlayContainer \ No newline at end of file diff --git a/source/renderer/app/containers/notifications/NotificationsContainer.tsx b/source/renderer/app/containers/notifications/NotificationsContainer.tsx index 2fbbf23528..d89f165a3b 100644 --- a/source/renderer/app/containers/notifications/NotificationsContainer.tsx +++ b/source/renderer/app/containers/notifications/NotificationsContainer.tsx @@ -98,7 +98,7 @@ const messages = defineMessages({ @inject('stores', 'actions') @observer -export default class NotificationsContainer extends Component { +class NotificationsContainer extends Component { static defaultProps = { actions: null, stores: null }; constructor(props: InjectedProps) { @@ -224,3 +224,5 @@ export default class NotificationsContainer extends Component { ); } } + +export default NotificationsContainer \ No newline at end of file diff --git a/source/renderer/app/containers/profile/DataLayerMigrationPage.tsx b/source/renderer/app/containers/profile/DataLayerMigrationPage.tsx index 143dcca80a..a984fe684b 100644 --- a/source/renderer/app/containers/profile/DataLayerMigrationPage.tsx +++ b/source/renderer/app/containers/profile/DataLayerMigrationPage.tsx @@ -7,7 +7,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class DataLayerMigrationPage extends Component { +class DataLayerMigrationPage extends Component { static defaultProps = { actions: null, stores: null }; onSubmit = () => { @@ -28,3 +28,5 @@ export default class DataLayerMigrationPage extends Component { ); } } + +export default DataLayerMigrationPage \ No newline at end of file diff --git a/source/renderer/app/containers/profile/InitialSettingsPage.tsx b/source/renderer/app/containers/profile/InitialSettingsPage.tsx index 02d71269b3..04a649d8e8 100644 --- a/source/renderer/app/containers/profile/InitialSettingsPage.tsx +++ b/source/renderer/app/containers/profile/InitialSettingsPage.tsx @@ -9,7 +9,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class InitialSettingsPage extends Component { +class InitialSettingsPage extends Component { static defaultProps = { actions: null, stores: null }; onSubmit = async () => { @@ -66,3 +66,5 @@ export default class InitialSettingsPage extends Component { ); } } + +export default InitialSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/profile/TermsOfUsePage.tsx b/source/renderer/app/containers/profile/TermsOfUsePage.tsx index ccd8662003..d6dd05ea66 100644 --- a/source/renderer/app/containers/profile/TermsOfUsePage.tsx +++ b/source/renderer/app/containers/profile/TermsOfUsePage.tsx @@ -8,7 +8,7 @@ import type { InjectedProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class TermsOfUsePage extends Component { +class TermsOfUsePage extends Component { static defaultProps = { actions: null, stores: null }; onSubmit = () => { @@ -42,3 +42,5 @@ export default class TermsOfUsePage extends Component { ); } } + +export default TermsOfUsePage \ No newline at end of file diff --git a/source/renderer/app/containers/settings/Settings.tsx b/source/renderer/app/containers/settings/Settings.tsx index 015ffefce3..70ecc9beba 100644 --- a/source/renderer/app/containers/settings/Settings.tsx +++ b/source/renderer/app/containers/settings/Settings.tsx @@ -10,7 +10,7 @@ import type { InjectedContainerProps } from '../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class Settings extends Component { +class Settings extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -51,3 +51,5 @@ export default class Settings extends Component { ); } } + +export default Settings \ No newline at end of file diff --git a/source/renderer/app/containers/settings/categories/DisplaySettingsPage.tsx b/source/renderer/app/containers/settings/categories/DisplaySettingsPage.tsx index aeabd68cde..3f4bf8137b 100644 --- a/source/renderer/app/containers/settings/categories/DisplaySettingsPage.tsx +++ b/source/renderer/app/containers/settings/categories/DisplaySettingsPage.tsx @@ -6,7 +6,7 @@ import type { InjectedProps } from '../../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class DisplaySettingsPage extends Component { +class DisplaySettingsPage extends Component { static defaultProps = { actions: null, stores: null }; selectTheme = (values: { theme: string }) => { @@ -20,3 +20,5 @@ export default class DisplaySettingsPage extends Component { ); } } + +export default DisplaySettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/settings/categories/GeneralSettingsPage.tsx b/source/renderer/app/containers/settings/categories/GeneralSettingsPage.tsx index da186292c2..9ddbee0563 100644 --- a/source/renderer/app/containers/settings/categories/GeneralSettingsPage.tsx +++ b/source/renderer/app/containers/settings/categories/GeneralSettingsPage.tsx @@ -7,7 +7,7 @@ import type { InjectedProps } from '../../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class GeneralSettingsPage extends Component { +class GeneralSettingsPage extends Component { static defaultProps = { actions: null, stores: null }; handleSelectItem = async (param: string, value: string) => { @@ -43,3 +43,5 @@ export default class GeneralSettingsPage extends Component { ); } } + +export default GeneralSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.tsx b/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.tsx index 28b5d50203..fb42db6af8 100644 --- a/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.tsx +++ b/source/renderer/app/containers/settings/categories/StakePoolsSettingsPage.tsx @@ -6,7 +6,7 @@ import type { InjectedProps } from '../../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class StakePoolsSettingsPage extends Component { +class StakePoolsSettingsPage extends Component { static defaultProps = { actions: null, stores: null }; handleSelectSmashServerUrl = (smashServerUrl: string) => { @@ -37,3 +37,5 @@ export default class StakePoolsSettingsPage extends Component { ); } } + +export default StakePoolsSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/settings/categories/SupportSettingsPage.tsx b/source/renderer/app/containers/settings/categories/SupportSettingsPage.tsx index 73dd31a02c..74df3dff57 100644 --- a/source/renderer/app/containers/settings/categories/SupportSettingsPage.tsx +++ b/source/renderer/app/containers/settings/categories/SupportSettingsPage.tsx @@ -17,7 +17,7 @@ const messages = defineMessages({ @inject('stores', 'actions') @observer -export default class SupportSettingsPage extends Component { +class SupportSettingsPage extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -64,3 +64,5 @@ export default class SupportSettingsPage extends Component { ); } } + +export default SupportSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.tsx b/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.tsx index 5f8c2b1fa7..0da8c0108e 100644 --- a/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.tsx +++ b/source/renderer/app/containers/settings/categories/TermsOfUseSettingsPage.tsx @@ -6,7 +6,7 @@ import type { InjectedProps } from '../../../types/injectedPropsType'; @inject('stores') @observer -export default class TermsOfUseSettingsPage extends Component { +class TermsOfUseSettingsPage extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -20,3 +20,5 @@ export default class TermsOfUseSettingsPage extends Component { ); } } + +export default TermsOfUseSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/settings/categories/WalletsSettingsPage.tsx b/source/renderer/app/containers/settings/categories/WalletsSettingsPage.tsx index 36094e35da..7e8e34de05 100644 --- a/source/renderer/app/containers/settings/categories/WalletsSettingsPage.tsx +++ b/source/renderer/app/containers/settings/categories/WalletsSettingsPage.tsx @@ -6,7 +6,7 @@ import type { InjectedProps } from '../../../types/injectedPropsType'; @inject('stores', 'actions') @observer -export default class WalletsSettingsPage extends Component { +class WalletsSettingsPage extends Component { static defaultProps = { actions: null, stores: null }; handleSelectCurrency = (code: string) => { @@ -40,3 +40,5 @@ export default class WalletsSettingsPage extends Component { ); } } + +export default WalletsSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/splash/SplashNetworkPage.tsx b/source/renderer/app/containers/splash/SplashNetworkPage.tsx index a10f7a7642..f6e20c27d8 100644 --- a/source/renderer/app/containers/splash/SplashNetworkPage.tsx +++ b/source/renderer/app/containers/splash/SplashNetworkPage.tsx @@ -8,7 +8,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class SplashNetworkPage extends Component { +class SplashNetworkPage extends Component { static defaultProps = { actions: null, stores: {} }; render() { @@ -25,3 +25,5 @@ export default class SplashNetworkPage extends Component { return null; } } + +export default SplashNetworkPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/DelegationCenterPage.tsx b/source/renderer/app/containers/staking/DelegationCenterPage.tsx index 8984b1a853..d1bcb5d4b9 100644 --- a/source/renderer/app/containers/staking/DelegationCenterPage.tsx +++ b/source/renderer/app/containers/staking/DelegationCenterPage.tsx @@ -28,7 +28,7 @@ const initialState = { @inject('actions', 'stores') @observer -export default class DelegationCenterPage extends Component { +class DelegationCenterPage extends Component { static defaultProps = { stores: null }; state = { ...initialState }; @@ -128,3 +128,5 @@ export default class DelegationCenterPage extends Component { ); } } + +export default DelegationCenterPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/RedeemItnRewardsContainer.tsx b/source/renderer/app/containers/staking/RedeemItnRewardsContainer.tsx index 5a8ef0b031..02e6a85dc2 100644 --- a/source/renderer/app/containers/staking/RedeemItnRewardsContainer.tsx +++ b/source/renderer/app/containers/staking/RedeemItnRewardsContainer.tsx @@ -14,7 +14,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class RedeemItnRewardsContainer extends Component { +class RedeemItnRewardsContainer extends Component { static defaultProps = { actions: null, stores: null }; get containers() { @@ -59,3 +59,5 @@ export default class RedeemItnRewardsContainer extends Component { ); } } + +export default RedeemItnRewardsContainer \ No newline at end of file diff --git a/source/renderer/app/containers/staking/StakePoolsListPage.tsx b/source/renderer/app/containers/staking/StakePoolsListPage.tsx index 895ab08d4d..cff10b8cbe 100644 --- a/source/renderer/app/containers/staking/StakePoolsListPage.tsx +++ b/source/renderer/app/containers/staking/StakePoolsListPage.tsx @@ -12,7 +12,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class StakePoolsListPage extends Component { +class StakePoolsListPage extends Component { static defaultProps = { actions: null, stores: null }; handleDelegate = (poolId: string) => { @@ -103,3 +103,5 @@ export default class StakePoolsListPage extends Component { ); } } + +export default StakePoolsListPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/Staking.tsx b/source/renderer/app/containers/staking/Staking.tsx index 2f7b802612..fdff6f2710 100644 --- a/source/renderer/app/containers/staking/Staking.tsx +++ b/source/renderer/app/containers/staking/Staking.tsx @@ -17,7 +17,7 @@ type Props = InjectedContainerProps; @inject('stores', 'actions') @observer -export default class Staking extends Component { +class Staking extends Component { static defaultProps = { actions: null, stores: null }; componentDidMount() { @@ -121,3 +121,5 @@ export default class Staking extends Component { ); } } + +export default Staking \ No newline at end of file diff --git a/source/renderer/app/containers/staking/StakingCountdownPage.tsx b/source/renderer/app/containers/staking/StakingCountdownPage.tsx index d8acc035a6..b943094d2d 100644 --- a/source/renderer/app/containers/staking/StakingCountdownPage.tsx +++ b/source/renderer/app/containers/staking/StakingCountdownPage.tsx @@ -17,7 +17,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class StakingCountdownPage extends Component { +class StakingCountdownPage extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -48,3 +48,5 @@ export default class StakingCountdownPage extends Component { ); } } + +export default StakingCountdownPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/StakingEpochsPage.tsx b/source/renderer/app/containers/staking/StakingEpochsPage.tsx index efece4b4e6..929035f1f7 100644 --- a/source/renderer/app/containers/staking/StakingEpochsPage.tsx +++ b/source/renderer/app/containers/staking/StakingEpochsPage.tsx @@ -11,7 +11,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class StakingEpochsPage extends Component { +class StakingEpochsPage extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -28,3 +28,5 @@ export default class StakingEpochsPage extends Component { ); } } + +export default StakingEpochsPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/StakingInfoPage.tsx b/source/renderer/app/containers/staking/StakingInfoPage.tsx index ccdb199b0a..d7564f9c38 100644 --- a/source/renderer/app/containers/staking/StakingInfoPage.tsx +++ b/source/renderer/app/containers/staking/StakingInfoPage.tsx @@ -8,7 +8,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class StakingInfoPage extends Component { +class StakingInfoPage extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -28,3 +28,5 @@ export default class StakingInfoPage extends Component { ); } } + +export default StakingInfoPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/StakingRewardsPage.tsx b/source/renderer/app/containers/staking/StakingRewardsPage.tsx index a624a8ef40..1918dd20c3 100644 --- a/source/renderer/app/containers/staking/StakingRewardsPage.tsx +++ b/source/renderer/app/containers/staking/StakingRewardsPage.tsx @@ -19,7 +19,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class StakingRewardsPage extends Component { +class StakingRewardsPage extends Component { static contextTypes = { intl: intlShape.isRequired, }; @@ -69,3 +69,5 @@ export default class StakingRewardsPage extends Component { ); } } + +export default StakingRewardsPage \ No newline at end of file diff --git a/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.tsx b/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.tsx index c94014d42d..682b729d2d 100644 --- a/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.tsx +++ b/source/renderer/app/containers/staking/dialogs/DelegationSetupWizardDialogContainer.tsx @@ -49,7 +49,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class DelegationSetupWizardDialogContainer extends Component< +class DelegationSetupWizardDialogContainer extends Component< Props, State > { @@ -296,3 +296,5 @@ export default class DelegationSetupWizardDialogContainer extends Component< } } } + +export default DelegationSetupWizardDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.tsx b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.tsx index c7764a9b76..e964c7c445 100644 --- a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.tsx +++ b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/NoWalletsContainer.tsx @@ -11,7 +11,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class NoWalletsContainer extends Component { +class NoWalletsContainer extends Component { static defaultProps = DefaultProps; render() { @@ -24,3 +24,5 @@ export default class NoWalletsContainer extends Component { return ; } } + +export default NoWalletsContainer \ No newline at end of file diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.tsx b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.tsx index 9cd0ef8e9f..0769142cbc 100644 --- a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.tsx +++ b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/RedemptionUnavailableContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class RedemptionUnavailableContainer extends Component { +class RedemptionUnavailableContainer extends Component { static defaultProps = DefaultProps; render() { @@ -24,3 +24,5 @@ export default class RedemptionUnavailableContainer extends Component { ); } } + +export default RedemptionUnavailableContainer \ No newline at end of file diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.tsx b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.tsx index 7326b01f3b..f4bc274c5c 100644 --- a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.tsx +++ b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step1ConfigurationContainer.tsx @@ -34,7 +34,7 @@ const messages = defineMessages({ @inject('stores', 'actions') @observer -export default class Step1ConfigurationContainer extends Component { +class Step1ConfigurationContainer extends Component { static defaultProps = DefaultProps; onWalletAcceptable = (walletAmount?: BigNumber) => { @@ -92,3 +92,5 @@ export default class Step1ConfigurationContainer extends Component { ); } } + +export default Step1ConfigurationContainer \ No newline at end of file diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.tsx b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.tsx index b1abeda142..0ca4a83f05 100644 --- a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.tsx +++ b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step2ConfirmationContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class Step2ConfirmationContainer extends Component { +class Step2ConfirmationContainer extends Component { static defaultProps = DefaultProps; render() { @@ -37,3 +37,5 @@ export default class Step2ConfirmationContainer extends Component { ); } } + +export default Step2ConfirmationContainer \ No newline at end of file diff --git a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.tsx b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.tsx index c5fb98e898..0e187b1afd 100644 --- a/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.tsx +++ b/source/renderer/app/containers/staking/dialogs/redeem-itn-rewards/Step3ResultContainer.tsx @@ -11,7 +11,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class Step3ResultContainer extends Component { +class Step3ResultContainer extends Component { static defaultProps = DefaultProps; render() { @@ -39,3 +39,5 @@ export default class Step3ResultContainer extends Component { return ; } } + +export default Step3ResultContainer \ No newline at end of file diff --git a/source/renderer/app/containers/static/AboutDialog.tsx b/source/renderer/app/containers/static/AboutDialog.tsx index b2dd32e0cd..69ccb5807e 100644 --- a/source/renderer/app/containers/static/AboutDialog.tsx +++ b/source/renderer/app/containers/static/AboutDialog.tsx @@ -10,7 +10,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class AboutDialog extends Component { +class AboutDialog extends Component { static defaultProps = { actions: null, stores: null, @@ -47,3 +47,5 @@ export default class AboutDialog extends Component { ); } } + +export default AboutDialog \ No newline at end of file diff --git a/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.tsx b/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.tsx index 573cf202a0..46defd77ff 100644 --- a/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.tsx +++ b/source/renderer/app/containers/status/DaedalusDiagnosticsDialog.tsx @@ -12,7 +12,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class DaedalusDiagnosticsDialog extends Component { +class DaedalusDiagnosticsDialog extends Component { static defaultProps = { actions: null, stores: null, @@ -142,3 +142,5 @@ export default class DaedalusDiagnosticsDialog extends Component { ); } } + +export default DaedalusDiagnosticsDialog \ No newline at end of file diff --git a/source/renderer/app/containers/voting/VotingRegistrationPage.tsx b/source/renderer/app/containers/voting/VotingRegistrationPage.tsx index bd4562137a..1da60b534f 100644 --- a/source/renderer/app/containers/voting/VotingRegistrationPage.tsx +++ b/source/renderer/app/containers/voting/VotingRegistrationPage.tsx @@ -17,7 +17,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class VotingRegistrationPage extends Component { +class VotingRegistrationPage extends Component { static defaultProps = { actions: null, stores: null }; handleGoToCreateWalletClick = () => { @@ -89,3 +89,5 @@ export default class VotingRegistrationPage extends Component { ); } } + +export default VotingRegistrationPage \ No newline at end of file diff --git a/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.tsx b/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.tsx index e0b04efc5c..86969d9985 100644 --- a/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.tsx +++ b/source/renderer/app/containers/voting/dialogs/VotingRegistrationDialogContainer.tsx @@ -53,7 +53,7 @@ type State = { @inject('stores', 'actions') @observer -export default class VotingRegistrationDialogContainer extends Component< +class VotingRegistrationDialogContainer extends Component< Props, State > { @@ -327,3 +327,5 @@ export default class VotingRegistrationDialogContainer extends Component< } } } + +export default VotingRegistrationDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.tsx b/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.tsx index 4b6d925222..d958bcbc64 100644 --- a/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.tsx +++ b/source/renderer/app/containers/wallet/PaperWalletCreateCertificatePage.tsx @@ -23,7 +23,7 @@ type State = { @inject('actions', 'stores') @observer -export default class PaperWalletCreateCertificatePage extends Component< +class PaperWalletCreateCertificatePage extends Component< Props, State > { @@ -173,3 +173,5 @@ export default class PaperWalletCreateCertificatePage extends Component< } }; } + +export default PaperWalletCreateCertificatePage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/TransferFundsPage.tsx b/source/renderer/app/containers/wallet/TransferFundsPage.tsx index c2d60116c6..37ccf56511 100644 --- a/source/renderer/app/containers/wallet/TransferFundsPage.tsx +++ b/source/renderer/app/containers/wallet/TransferFundsPage.tsx @@ -9,7 +9,7 @@ type Props = InjectedProps; @inject('actions', 'stores') @observer -export default class TransferFundsPage extends Component { +class TransferFundsPage extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -38,3 +38,5 @@ export default class TransferFundsPage extends Component { ); } } + +export default TransferFundsPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/Wallet.tsx b/source/renderer/app/containers/wallet/Wallet.tsx index 7bed340975..cde5d1c618 100644 --- a/source/renderer/app/containers/wallet/Wallet.tsx +++ b/source/renderer/app/containers/wallet/Wallet.tsx @@ -15,7 +15,7 @@ type Props = InjectedContainerProps; @inject('stores', 'actions') @observer -export default class Wallet extends Component { +class Wallet extends Component { static defaultProps = { actions: null, stores: null }; isActiveScreen = (page: string, item: NavDropdownProps) => { @@ -108,3 +108,5 @@ export default class Wallet extends Component { ); } } + +export default Wallet \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletAddPage.tsx b/source/renderer/app/containers/wallet/WalletAddPage.tsx index 7d1377950b..f4a8e62f8c 100644 --- a/source/renderer/app/containers/wallet/WalletAddPage.tsx +++ b/source/renderer/app/containers/wallet/WalletAddPage.tsx @@ -24,7 +24,7 @@ type Props = InjectedProps; @inject('actions', 'stores') @observer -export default class WalletAddPage extends Component { +class WalletAddPage extends Component { static defaultProps = { actions: null, stores: null }; onClose = () => { @@ -98,3 +98,5 @@ export default class WalletAddPage extends Component { ); } } + +export default WalletAddPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletReceivePage.tsx b/source/renderer/app/containers/wallet/WalletReceivePage.tsx index 72d4677669..3110996568 100755 --- a/source/renderer/app/containers/wallet/WalletReceivePage.tsx +++ b/source/renderer/app/containers/wallet/WalletReceivePage.tsx @@ -31,7 +31,7 @@ type State = { @inject('stores', 'actions') @observer -export default class WalletReceivePage extends Component { +class WalletReceivePage extends Component { static defaultProps = { actions: null, stores: null }; static contextTypes = { @@ -282,3 +282,5 @@ export default class WalletReceivePage extends Component { ); } } + +export default WalletReceivePage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletSendPage.tsx b/source/renderer/app/containers/wallet/WalletSendPage.tsx index c8acb7167b..2d002aa91e 100755 --- a/source/renderer/app/containers/wallet/WalletSendPage.tsx +++ b/source/renderer/app/containers/wallet/WalletSendPage.tsx @@ -16,7 +16,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletSendPage extends Component { +class WalletSendPage extends Component { static defaultProps = { actions: null, stores: null }; calculateTransactionFee = async (params: { @@ -153,3 +153,5 @@ export default class WalletSendPage extends Component { ); } } + +export default WalletSendPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletSettingsPage.tsx b/source/renderer/app/containers/wallet/WalletSettingsPage.tsx index 3939a9ea14..5f7075b7b6 100644 --- a/source/renderer/app/containers/wallet/WalletSettingsPage.tsx +++ b/source/renderer/app/containers/wallet/WalletSettingsPage.tsx @@ -25,7 +25,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletSettingsPage extends Component { +class WalletSettingsPage extends Component { static defaultProps = { actions: null, stores: null }; handleCopyWalletPublicKey = (walletPublicKey: string) => { @@ -181,3 +181,5 @@ export default class WalletSettingsPage extends Component { ); } } + +export default WalletSettingsPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletSummaryPage.tsx b/source/renderer/app/containers/wallet/WalletSummaryPage.tsx index 6c7a0a9281..ede97a9939 100755 --- a/source/renderer/app/containers/wallet/WalletSummaryPage.tsx +++ b/source/renderer/app/containers/wallet/WalletSummaryPage.tsx @@ -28,7 +28,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletSummaryPage extends Component { +class WalletSummaryPage extends Component { static defaultProps = { actions: null, stores: null }; static contextTypes = { @@ -180,3 +180,5 @@ export default class WalletSummaryPage extends Component { ); } } + +export default WalletSummaryPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletTransactionsPage.tsx b/source/renderer/app/containers/wallet/WalletTransactionsPage.tsx index 7ee5930053..b0bed45fe8 100755 --- a/source/renderer/app/containers/wallet/WalletTransactionsPage.tsx +++ b/source/renderer/app/containers/wallet/WalletTransactionsPage.tsx @@ -10,7 +10,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletTransactionsPage extends Component { +class WalletTransactionsPage extends Component { render() { const { actions, stores } = this.props; const { app, wallets, addresses, profile, assets } = stores; @@ -82,3 +82,5 @@ export default class WalletTransactionsPage extends Component { ); } } + +export default WalletTransactionsPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/WalletUtxoPage.tsx b/source/renderer/app/containers/wallet/WalletUtxoPage.tsx index aa9821fc01..a62ec7c121 100644 --- a/source/renderer/app/containers/wallet/WalletUtxoPage.tsx +++ b/source/renderer/app/containers/wallet/WalletUtxoPage.tsx @@ -13,7 +13,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletUtxoPage extends Component { +class WalletUtxoPage extends Component { static defaultProps = { actions: null, stores: null }; componentDidMount() { @@ -52,3 +52,5 @@ export default class WalletUtxoPage extends Component { ); } } + +export default WalletUtxoPage \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.tsx index b26ff8e9f0..6e48e34a62 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletBackupDialogContainer.tsx @@ -8,7 +8,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class WalletBackupDialogContainer extends Component { +class WalletBackupDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -81,3 +81,5 @@ export default class WalletBackupDialogContainer extends Component { ); } } + +export default WalletBackupDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.tsx index 5a9ba082e0..31d3072fbc 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletConnectDialogContainer.tsx @@ -11,7 +11,7 @@ type Props = { @inject('stores') @observer -export default class WalletConnectDialogContainer extends Component { +class WalletConnectDialogContainer extends Component { static defaultProps = { stores: null }; onClose = () => { @@ -39,3 +39,5 @@ export default class WalletConnectDialogContainer extends Component { ); } } + +export default WalletConnectDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.tsx index 0c1f0bd793..355589752f 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainer.tsx @@ -17,7 +17,7 @@ const CreateWalletAbortConfirmation = () =>
Are you sure
; @inject('stores', 'actions') @observer -export default class WalletCreateDialogContainer extends Component { +class WalletCreateDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; get containers() { @@ -97,3 +97,5 @@ export default class WalletCreateDialogContainer extends Component { ); } } + +export default WalletCreateDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.tsx b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.tsx index 7c07ba2436..59e2272e26 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletCreateDialogContainerOld.tsx @@ -9,7 +9,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class WalletCreateDialogContainer extends Component { +class WalletCreateDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -34,3 +34,5 @@ export default class WalletCreateDialogContainer extends Component { ); } } + +export default WalletCreateDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.tsx index 1aeaef1b9f..f858e74a36 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletImportDialogContainer.tsx @@ -9,7 +9,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletImportDialogContainer extends Component { +class WalletImportDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; get containers() { @@ -48,3 +48,5 @@ export default class WalletImportDialogContainer extends Component { ); } } + +export default WalletImportDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.tsx index 88291dba72..30cee03197 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainer.tsx @@ -13,7 +13,7 @@ type Props = InjectedProps; @inject('stores', 'actions') @observer -export default class WalletRestoreContainer extends Component { +class WalletRestoreContainer extends Component { static defaultProps = { actions: null, stores: null }; get containers() { @@ -60,3 +60,5 @@ export default class WalletRestoreContainer extends Component { ); } } + +export default WalletRestoreContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.tsx b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.tsx index babd34ae07..3ce474d0e8 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletRestoreDialogContainerOld.tsx @@ -10,7 +10,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class WalletRestoreDialogContainer extends Component { +class WalletRestoreDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -78,3 +78,5 @@ export default class WalletRestoreDialogContainer extends Component { ); } } + +export default WalletRestoreDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.tsx index e35a0551ae..32915f564e 100644 --- a/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/WalletSendConfirmationDialogContainer.tsx @@ -30,7 +30,7 @@ type Props = { @inject('actions', 'stores') @observer -export default class WalletSendConfirmationDialogContainer extends Component { +class WalletSendConfirmationDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; handleWalletSendFormSubmit = (values: Object) => { @@ -179,3 +179,5 @@ export default class WalletSendConfirmationDialogContainer extends Component { +class CompletionDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -42,3 +42,5 @@ export default class CompletionDialogContainer extends Component { ); } } + +export default CompletionDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.tsx index 466cc8dd2a..6809867536 100644 --- a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/InstructionsDialogContainer.tsx @@ -13,7 +13,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class InstructionsDialogContainer extends Component { +class InstructionsDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -82,3 +82,5 @@ export default class InstructionsDialogContainer extends Component { ); } } + +export default InstructionsDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.tsx index d25ede080a..f5365e01fb 100644 --- a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/PrintDialogContainer.tsx @@ -8,7 +8,7 @@ type Props = InjectedDialogContainerProps; @inject('actions') @observer -export default class PrintDialogContainer extends Component { +class PrintDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -26,3 +26,5 @@ export default class PrintDialogContainer extends Component { ); } } + +export default PrintDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.tsx index b6496e45cc..93d1179478 100644 --- a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/SecuringPasswordDialogContainer.tsx @@ -8,7 +8,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class SecuringPasswordDialogContainer extends Component { +class SecuringPasswordDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -35,3 +35,5 @@ export default class SecuringPasswordDialogContainer extends Component { ); } } + +export default SecuringPasswordDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.tsx index 2dd6f8ad88..d15c2aef42 100644 --- a/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/paper-wallet-certificate/VerificationDialogContainer.tsx @@ -9,7 +9,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class VerificationDialogContainer extends Component { +class VerificationDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -43,3 +43,5 @@ export default class VerificationDialogContainer extends Component { ); } } + +export default VerificationDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.tsx index a2a451d2c2..3bd1809a15 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer.tsx @@ -12,7 +12,7 @@ type Props = { @inject('actions', 'stores') @observer -export default class ChangeSpendingPasswordDialogContainer extends Component { +class ChangeSpendingPasswordDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -63,3 +63,5 @@ export default class ChangeSpendingPasswordDialogContainer extends Component { +class DeleteWalletDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -96,3 +96,5 @@ export default class DeleteWalletDialogContainer extends Component { ); } } + +export default DeleteWalletDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.tsx index 29b32992c2..8abbc98912 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/ExportWalletToFileDialogContainer.tsx @@ -11,7 +11,7 @@ type Props = InjectedDialogContainerProps; @inject('stores', 'actions') @observer -export default class ExportWalletToFileDialogContainer extends Component { +class ExportWalletToFileDialogContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -67,3 +67,5 @@ export default class ExportWalletToFileDialogContainer extends Component ); } } + +export default ExportWalletToFileDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.tsx index 63422d3fbf..6582d3fcd0 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyDialogContainer.tsx @@ -9,7 +9,7 @@ type Props = InjectedProps; @inject('actions', 'stores') @observer -export default class PublicKeyDialogContainer extends Component { +class PublicKeyDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; handleClose = () => { @@ -51,3 +51,5 @@ export default class PublicKeyDialogContainer extends Component { ); } } + +export default PublicKeyDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.tsx index 5c9737ad4e..77bafe2f29 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/PublicKeyQRCodeDialogContainer.tsx @@ -37,7 +37,7 @@ type Props = InjectedProps; @inject('actions', 'stores') @observer -export default class PublicKeyQRCodeDialogContainer extends Component { +class PublicKeyQRCodeDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; handleCopyWalletPublicKey = (isICO: boolean = false) => { @@ -52,7 +52,7 @@ export default class PublicKeyQRCodeDialogContainer extends Component { ); const publicKey = ellipsis( - // $FlowFixMe Flow cannot detect the previous condition. Hopefully this is solved using Typescript + // @ts-ignore Flow cannot detect the previous condition. Hopefully this is solved using Typescript isICO ? icoPublicKey : activePublicKey, WALLET_PUBLIC_KEY_NOTIFICATION_SEGMENT_LENGTH, WALLET_PUBLIC_KEY_NOTIFICATION_SEGMENT_LENGTH @@ -109,3 +109,5 @@ export default class PublicKeyQRCodeDialogContainer extends Component { return null; } } + +export default PublicKeyQRCodeDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.tsx index 9e158e1e86..f1ce1ae1f2 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/UndelegateWalletDialogContainer.tsx @@ -23,7 +23,7 @@ type State = { @inject('actions', 'stores') @observer -export default class UndelegateWalletDialogContainer extends Component< +class UndelegateWalletDialogContainer extends Component< Props, State > { @@ -191,3 +191,5 @@ export default class UndelegateWalletDialogContainer extends Component< ); } } + +export default UndelegateWalletDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.tsx index 4de6475713..5f79916e8c 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/UnpairWalletDialogContainer.tsx @@ -29,7 +29,7 @@ const messages: WalletSettingRemoveMessages = defineMessages({ @inject('actions', 'stores') @observer -export default class UnpairWalletDialogContainer extends Component { +class UnpairWalletDialogContainer extends Component { static defaultProps = { actions: null, stores: null }; render() { @@ -84,3 +84,5 @@ export default class UnpairWalletDialogContainer extends Component { ); } } + +export default UnpairWalletDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.tsx b/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.tsx index be34fddc08..72f3607152 100644 --- a/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/settings/WalletRecoveryPhraseContainer.tsx @@ -13,7 +13,7 @@ import type { InjectedProps as Props } from '../../../../types/injectedPropsType @inject('stores', 'actions') @observer -export default class WalletRecoveryPhraseContainer extends Component { +class WalletRecoveryPhraseContainer extends Component { static defaultProps = { actions: null, stores: null, @@ -66,3 +66,5 @@ export default class WalletRecoveryPhraseContainer extends Component { ); } } + +export default WalletRecoveryPhraseContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.tsx b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.tsx index dfbcda4460..99ff981360 100644 --- a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.tsx +++ b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep1Container.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class TransferFundsStep1Container extends Component { +class TransferFundsStep1Container extends Component { static defaultProps = DefaultProps; render() { @@ -46,3 +46,5 @@ export default class TransferFundsStep1Container extends Component { ); } } + +export default TransferFundsStep1Container \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.tsx b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.tsx index 18408c54c9..ec525bbbb2 100644 --- a/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.tsx +++ b/source/renderer/app/containers/wallet/dialogs/transfer-funds/TransferFundsStep2Container.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class TransferFundsStep2Container extends Component { +class TransferFundsStep2Container extends Component { static defaultProps = DefaultProps; onClose = () => { @@ -77,3 +77,5 @@ export default class TransferFundsStep2Container extends Component { ); } } + +export default TransferFundsStep2Container \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.tsx index 72879547da..625b081299 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-create/ConfigDialogContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class ConfigDialogContainer extends Component { +class ConfigDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -18,3 +18,5 @@ export default class ConfigDialogContainer extends Component { return ; } } + +export default ConfigDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.tsx index eb278e828f..a800658c44 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-create/HashDialogContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class HashDialogContainer extends Component { +class HashDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -18,3 +18,5 @@ export default class HashDialogContainer extends Component { return ; } } + +export default HashDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.tsx index b702154dcb..4dc97a56ba 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-create/InstructionsDialogContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class InstructionsDialogContainer extends Component { +class InstructionsDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -24,3 +24,5 @@ export default class InstructionsDialogContainer extends Component { ); } } + +export default InstructionsDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.tsx index ef97865332..4c3dd30a09 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-create/MnemonicsDialogContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class MnemonicsDialogContainer extends Component { +class MnemonicsDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -24,3 +24,5 @@ export default class MnemonicsDialogContainer extends Component { ); } } + +export default MnemonicsDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.tsx index fbc283ba3d..1ad685c845 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-create/TemplateDialogContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class InstructionsDialogContainer extends Component { +class InstructionsDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -24,3 +24,5 @@ export default class InstructionsDialogContainer extends Component { ); } } + +export default InstructionsDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.tsx index cc9b9d2010..e46d21458c 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-create/ValidateDialogContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class ValidateDialogContainer extends Component { +class ValidateDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -24,3 +24,5 @@ export default class ValidateDialogContainer extends Component { ); } } + +export default ValidateDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.tsx index feb636c3ba..442bdfc962 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletFileImportStepContainer.tsx @@ -11,7 +11,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class WalletFileImportStepContainer extends Component { +class WalletFileImportStepContainer extends Component { static defaultProps = DefaultProps; onSelectExportSourcePath = (params: { importFrom: ImportFromOption }) => { @@ -58,3 +58,5 @@ export default class WalletFileImportStepContainer extends Component { ); } } + +export default WalletFileImportStepContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.tsx index 008a230690..75406cf746 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-import/WalletSelectImportStepContainer.tsx @@ -18,7 +18,7 @@ type State = { @inject('stores', 'actions') @observer -export default class WalletSelectImportStepContainer extends Component< +class WalletSelectImportStepContainer extends Component< Props, State > { @@ -79,3 +79,5 @@ export default class WalletSelectImportStepContainer extends Component< ); } } + +export default WalletSelectImportStepContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.tsx index f9419f1052..44469d6434 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepConfigurationContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class ConfigurationDialogContainer extends Component { +class ConfigurationDialogContainer extends Component { static defaultProps = DefaultProps; handleContinue = () => { @@ -53,3 +53,5 @@ export default class ConfigurationDialogContainer extends Component { ); } } + +export default ConfigurationDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.tsx index edb17828ae..addbd14010 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepMnemonicsContainer.tsx @@ -32,7 +32,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class MnemonicsDialogContainer extends Component { +class MnemonicsDialogContainer extends Component { static defaultProps = DefaultProps; handleSetWalletMnemonics = (mnemonics: Array) => @@ -124,3 +124,5 @@ export default class MnemonicsDialogContainer extends Component { ); } } + +export default MnemonicsDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.tsx index 609eb9a452..807f8b42b1 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepSuccessContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class SuccessDialogContainer extends Component { +class SuccessDialogContainer extends Component { static defaultProps = DefaultProps; render() { @@ -26,3 +26,5 @@ export default class SuccessDialogContainer extends Component { ); } } + +export default SuccessDialogContainer \ No newline at end of file diff --git a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.tsx b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.tsx index dc811e0990..fcdba1cdf7 100644 --- a/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.tsx +++ b/source/renderer/app/containers/wallet/dialogs/wallet-restore/StepWalletTypeContainer.tsx @@ -10,7 +10,7 @@ const DefaultProps = InjectedDialogContainerStepDefaultProps; @inject('stores', 'actions') @observer -export default class WalletTypeDialogContainer extends Component { +class WalletTypeDialogContainer extends Component { static defaultProps = DefaultProps; handleSetWalletKind = (kind: string, param?: string) => @@ -37,3 +37,5 @@ export default class WalletTypeDialogContainer extends Component { ); } } + +export default WalletTypeDialogContainer \ No newline at end of file diff --git a/source/renderer/app/stores/AddressesStore.ts b/source/renderer/app/stores/AddressesStore.ts index dec8a45657..59084f6bc6 100644 --- a/source/renderer/app/stores/AddressesStore.ts +++ b/source/renderer/app/stores/AddressesStore.ts @@ -172,7 +172,7 @@ export default class AddressesStore extends Store { }; getAccountIndexByWalletId = async (walletId: string): Promise => { - // $FlowFixMe + // @ts-ignore const result = await this.api.ada.getAddresses({ walletId, isLegacy: true, diff --git a/source/renderer/app/stores/HardwareWalletsStore.ts b/source/renderer/app/stores/HardwareWalletsStore.ts index f6833458da..7479d29091 100644 --- a/source/renderer/app/stores/HardwareWalletsStore.ts +++ b/source/renderer/app/stores/HardwareWalletsStore.ts @@ -657,7 +657,7 @@ export default class HardwareWalletsStore extends Store { logger.debug( '[HW-DEBUG] HWStore - Connect - New Transaction / Address verification initiated - return last device' ); - // $FlowFixMe + // @ts-ignore lastDeviceTransport = await getHardwareWalletTransportChannel.request( { devicePath: null, // Use last plugged device @@ -2517,7 +2517,7 @@ export default class HardwareWalletsStore extends Store { ); // It is not possible to pass null value that FLOW marks as error (FlowFixMe used) this.initiateAddressVerification( - // $FlowFixMe + // @ts-ignore this.unfinishedWalletAddressVerification, path ); diff --git a/source/renderer/app/stores/NetworkStatusStore.ts b/source/renderer/app/stores/NetworkStatusStore.ts index 5d36cab959..7fad7457e9 100644 --- a/source/renderer/app/stores/NetworkStatusStore.ts +++ b/source/renderer/app/stores/NetworkStatusStore.ts @@ -286,7 +286,7 @@ export default class NetworkStatusStore extends Store { } }; - // $FlowFixMe + // @ts-ignore _updateTlsConfig = (config: ?TlsConfig): Promise => { if (config == null || isEqual(config, this.tlsConfig)) return Promise.resolve(); diff --git a/source/renderer/app/stores/WalletsStore.ts b/source/renderer/app/stores/WalletsStore.ts index a8e64c7022..fe893c3510 100644 --- a/source/renderer/app/stores/WalletsStore.ts +++ b/source/renderer/app/stores/WalletsStore.ts @@ -668,7 +668,7 @@ export default class WalletsStore extends Store { this.getWalletRecoveryPhraseFromCertificateRequest.reset(); - // $FlowFixMe + // @ts-ignore return unscrambledRecoveryPhrase; }; diff --git a/source/renderer/app/stores/lib/Request.ts b/source/renderer/app/stores/lib/Request.ts index de36d732af..1dd5f60dd9 100644 --- a/source/renderer/app/stores/lib/Request.ts +++ b/source/renderer/app/stores/lib/Request.ts @@ -56,7 +56,7 @@ export default class Request { isObservableArray(this.result) && Array.isArray(result) ) { - // $FlowFixMe + // @ts-ignore this.result.replace(result); } else { this.result = result; diff --git a/source/renderer/app/themes/utils/writeThemeUpdate.ts b/source/renderer/app/themes/utils/writeThemeUpdate.ts index 7627f4aade..aac23e01f7 100644 --- a/source/renderer/app/themes/utils/writeThemeUpdate.ts +++ b/source/renderer/app/themes/utils/writeThemeUpdate.ts @@ -48,6 +48,6 @@ export const writeThemeUpdate = ({ `; // @TODO - remove flow fix and move fs to main process - // $FlowFixMe + // @ts-ignore fs.writeFileSync(THEME_FILE, FILE_CONTENT, {}); // eslint-disable-line }; diff --git a/source/renderer/app/utils/shelleyLedger.ts b/source/renderer/app/utils/shelleyLedger.ts index 0d8287636e..c22e90c8e6 100644 --- a/source/renderer/app/utils/shelleyLedger.ts +++ b/source/renderer/app/utils/shelleyLedger.ts @@ -410,7 +410,7 @@ export const CachedDeriveXpubFactory = (deriveXpubHardenedFn: Function) => { lastIndex, derivationScheme: derivationScheme.ed25519Mode, }); - // $FlowFixMe + // @ts-ignore return utils.hex_to_buf(derivedXpub); } catch (e) { throw e; diff --git a/source/renderer/app/utils/transaction.tsx b/source/renderer/app/utils/transaction.tsx index a18534449e..e66acc9a40 100644 --- a/source/renderer/app/utils/transaction.tsx +++ b/source/renderer/app/utils/transaction.tsx @@ -281,12 +281,12 @@ export const validateFilterForm = (values: { class List { constructor(xs) { - // $FlowFixMe + // @ts-ignore this.elems = xs; } encodeCBOR(encoder) { encoder.push(rawBuffer('9F')); // Begin Indefinite list - // $FlowFixMe + // @ts-ignore this.elems.forEach((el) => encoder.pushAny(el)); encoder.push(rawBuffer('FF')); // Break Indefinite list return true; diff --git a/source/renderer/app/utils/walletUtils.ts b/source/renderer/app/utils/walletUtils.ts index 0dc5fbb106..4efe45decf 100644 --- a/source/renderer/app/utils/walletUtils.ts +++ b/source/renderer/app/utils/walletUtils.ts @@ -2,7 +2,7 @@ import BigNumber from 'bignumber.js'; import Wallet from '../domains/Wallet'; -// $FlowFixMe TODO: fix this in flowconfig +// @ts-ignore TODO: fix this in flowconfig export default import('@iohk-jormungandr/wallet-js').then((modules) => modules); const MINIMUM_ADA_BALANCE_FOR_WITHDRAWING_REWARDS: number = 10; // 1 ADA | unit: ADA diff --git a/storybook/stories/_support/StoryDecorator.tsx b/storybook/stories/_support/StoryDecorator.tsx index d2573ab2c7..25021f9c34 100644 --- a/storybook/stories/_support/StoryDecorator.tsx +++ b/storybook/stories/_support/StoryDecorator.tsx @@ -14,7 +14,7 @@ type Props = { }; @observer -export default class StoryDecorator extends Component { +class StoryDecorator extends Component { static defaultProps = { propsForChildren: {}, }; @@ -36,3 +36,5 @@ export default class StoryDecorator extends Component { ); } } + +export default StoryDecorator \ No newline at end of file diff --git a/storybook/stories/_support/StoryLayout.tsx b/storybook/stories/_support/StoryLayout.tsx index e6e13f19f4..7dff2d0c8b 100644 --- a/storybook/stories/_support/StoryLayout.tsx +++ b/storybook/stories/_support/StoryLayout.tsx @@ -70,7 +70,7 @@ const CATEGORIES = [ @inject('stores', 'storiesProps') @observer -export default class StoryLayout extends Component { +class StoryLayout extends Component { static defaultProps = { stores: null, storiesProps: null }; render() { @@ -259,3 +259,5 @@ export default class StoryLayout extends Component { ); } + +export default StoryLayout \ No newline at end of file diff --git a/storybook/stories/_support/StoryProvider.tsx b/storybook/stories/_support/StoryProvider.tsx index 845b899971..c629af30fd 100644 --- a/storybook/stories/_support/StoryProvider.tsx +++ b/storybook/stories/_support/StoryProvider.tsx @@ -148,7 +148,7 @@ export const WALLETS_V2 = [ ]; @observer -export default class StoryProvider extends Component { +class StoryProvider extends Component { @observable activeWalletId = '0'; @computed get storiesProps(): {} { @@ -197,3 +197,5 @@ export default class StoryProvider extends Component { ); } } + +export default StoryProvider \ No newline at end of file diff --git a/storybook/stories/wallets/import/WalletImportFile.stories.tsx b/storybook/stories/wallets/import/WalletImportFile.stories.tsx index e2d6acc652..24f7f7d227 100644 --- a/storybook/stories/wallets/import/WalletImportFile.stories.tsx +++ b/storybook/stories/wallets/import/WalletImportFile.stories.tsx @@ -60,7 +60,7 @@ storiesOf('Wallets|Import File', module) isValidWalletName(name)} - // $FlowFixMe + // @ts-ignore exportedWallets={[...namedWallets, ...unnamedWallets]} pendingImportWalletsCount={number('pendingImportWalletsCount', 0)} onContinue={action('onContinue')} diff --git a/storybook/stories/wallets/send/WalletSend.stories.tsx b/storybook/stories/wallets/send/WalletSend.stories.tsx index 149a7bef84..be7376e7a6 100644 --- a/storybook/stories/wallets/send/WalletSend.stories.tsx +++ b/storybook/stories/wallets/send/WalletSend.stories.tsx @@ -353,7 +353,7 @@ storiesOf('Wallets|Send', module) /> )) .add('Wallet Send Confirmation Dialog With Assets', () => { - // $FlowFixMe[prop-missing] + // @ts-ignore[prop-missing] const wallet: Wallet = { name: generateWallet('TrueUSD', '15119903750165', walletTokens).name, amount: new BigNumber(100), @@ -391,7 +391,7 @@ storiesOf('Wallets|Send', module) ); }) .add('Wallet Send Confirmation Dialog With No Assets', () => { - // $FlowFixMe[prop-missing] + // @ts-ignore[prop-missing] const wallet: Wallet = { name: generateWallet('TrueUSD', '15119903750165', walletTokens).name, amount: new BigNumber(100), diff --git a/tests/addresses/e2e/steps/addresses.ts b/tests/addresses/e2e/steps/addresses.ts index e46ac97307..91415e83fc 100644 --- a/tests/addresses/e2e/steps/addresses.ts +++ b/tests/addresses/e2e/steps/addresses.ts @@ -4,9 +4,7 @@ import { expect } from 'chai'; import { find } from 'lodash'; import { getVisibleElementsCountForSelector } from '../../../common/e2e/steps/helpers'; import { getWalletByName } from '../../../wallets/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { ADDRESS_ACTIVE: '.WalletReceive_hash', ADDRESS_COMPONENT: '.Address', diff --git a/tests/app/e2e/steps/about-dialog.ts b/tests/app/e2e/steps/about-dialog.ts index 7b3d316a22..6ded87884a 100644 --- a/tests/app/e2e/steps/about-dialog.ts +++ b/tests/app/e2e/steps/about-dialog.ts @@ -2,9 +2,7 @@ import { Given, When, Then } from 'cucumber'; import { expect } from 'chai'; import packageJson from '../../../../package.json'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { CONTAINER: '.About_container', VERSION: '.About_daedalusVersion', diff --git a/tests/app/e2e/steps/app-version-difference.ts b/tests/app/e2e/steps/app-version-difference.ts index cd1704b267..030a48cee0 100644 --- a/tests/app/e2e/steps/app-version-difference.ts +++ b/tests/app/e2e/steps/app-version-difference.ts @@ -4,9 +4,7 @@ import { expect } from 'chai'; import { environment } from '../../../../source/main/environment'; import { getVisibleTextsForSelector } from '../../../common/e2e/steps/helpers'; import { i18nHelpers } from '../../../settings/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const currentAppVersion = environment.version; const currentAppVersionChunks = currentAppVersion.split('.'); const { formatMessage } = i18nHelpers; diff --git a/tests/app/e2e/steps/daedalus-process.ts b/tests/app/e2e/steps/daedalus-process.ts index 89648e554d..624c447997 100644 --- a/tests/app/e2e/steps/daedalus-process.ts +++ b/tests/app/e2e/steps/daedalus-process.ts @@ -3,9 +3,7 @@ import { Given, When, Then } from 'cucumber'; import { expect } from 'chai'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; import { refreshClient, waitForCardanoNodeToExit, waitForDaedalusToExit } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const CONNECTING_TITLE = '.SyncingConnectingStatus_headline'; Given(/^Daedalus is running$/, function() { diff --git a/tests/app/e2e/steps/data-layer-migration.ts b/tests/app/e2e/steps/data-layer-migration.ts index 65a4376eb7..398f8b1f66 100644 --- a/tests/app/e2e/steps/data-layer-migration.ts +++ b/tests/app/e2e/steps/data-layer-migration.ts @@ -1,8 +1,6 @@ // @flow import { Given, When, Then } from 'cucumber'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { COMPONENT: '.DataLayerMigrationForm_component', diff --git a/tests/app/e2e/steps/helpers.ts b/tests/app/e2e/steps/helpers.ts index 57873e60f3..b590a01330 100644 --- a/tests/app/e2e/steps/helpers.ts +++ b/tests/app/e2e/steps/helpers.ts @@ -1,9 +1,7 @@ // @flow import { When } from 'cucumber'; import { getProcessesByName } from '../../../../source/main/utils/processes'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const ACTIVE_RESTORE_NOTIFICATION = '.ActiveRestoreNotification'; diff --git a/tests/app/e2e/steps/inject-fault.ts b/tests/app/e2e/steps/inject-fault.ts index 9029269e56..0f4260c81b 100644 --- a/tests/app/e2e/steps/inject-fault.ts +++ b/tests/app/e2e/steps/inject-fault.ts @@ -1,8 +1,6 @@ // @flow import { When } from 'cucumber'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; When(/^I inject fault named "([^"]*)"$/, async function(faultName) { await this.client.executeAsync((name, done) => { diff --git a/tests/app/e2e/steps/local-time-difference.ts b/tests/app/e2e/steps/local-time-difference.ts index 5d684f51f8..3665edf9b7 100644 --- a/tests/app/e2e/steps/local-time-difference.ts +++ b/tests/app/e2e/steps/local-time-difference.ts @@ -1,9 +1,7 @@ // @flow import { Given, Then } from 'cucumber'; import { expectTextInSelector } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { ERROR_COMPONENT: '.SystemTimeError_component', TIME_OFF: '.time-off', diff --git a/tests/app/e2e/steps/no-disk-space.ts b/tests/app/e2e/steps/no-disk-space.ts index edda6701e1..33399e725b 100644 --- a/tests/app/e2e/steps/no-disk-space.ts +++ b/tests/app/e2e/steps/no-disk-space.ts @@ -2,7 +2,6 @@ import {Given, Then, When} from 'cucumber'; import type {Daedalus} from '../../../types'; -declare var daedalus: Daedalus; let diskSpaceRequired; const HUNDRED_TB = 100 * 1e12; // 100 TB | unit: bytes const NO_DISK_SPACE_COMPONENT = '.NoDiskSpaceError_component'; diff --git a/tests/app/e2e/steps/node-restart.ts b/tests/app/e2e/steps/node-restart.ts index 389a1c17ba..c8080e502b 100644 --- a/tests/app/e2e/steps/node-restart.ts +++ b/tests/app/e2e/steps/node-restart.ts @@ -1,9 +1,7 @@ // @flow import { Given, When, Then } from 'cucumber'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const CARDANO_NODE_STATE = '.cardanoNodeState .DaedalusDiagnostics_layoutData'; Given(/^I open the "Diagnostic" screen$/, async function() { diff --git a/tests/app/e2e/steps/trouble-connecting-notification.ts b/tests/app/e2e/steps/trouble-connecting-notification.ts index a95869a60c..7d38c194ab 100644 --- a/tests/app/e2e/steps/trouble-connecting-notification.ts +++ b/tests/app/e2e/steps/trouble-connecting-notification.ts @@ -1,9 +1,7 @@ // @flow import { Then } from 'cucumber'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { REPORT_ISSUE_BTN: '.ReportIssue_actionButton.reportIssueButton', diff --git a/tests/app/e2e/steps/trouble-syncing-notification.ts b/tests/app/e2e/steps/trouble-syncing-notification.ts index 3759204f3c..409262963a 100644 --- a/tests/app/e2e/steps/trouble-syncing-notification.ts +++ b/tests/app/e2e/steps/trouble-syncing-notification.ts @@ -1,9 +1,7 @@ // @flow import { Then } from 'cucumber'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SYNCING_STATUS_HEADER = '.SyncingConnectingTitle_syncing h1'; diff --git a/tests/delegation/e2e/steps/delegation-pending.ts b/tests/delegation/e2e/steps/delegation-pending.ts index 2abdf2b9cb..2db305a433 100644 --- a/tests/delegation/e2e/steps/delegation-pending.ts +++ b/tests/delegation/e2e/steps/delegation-pending.ts @@ -2,9 +2,7 @@ import { Given, Then } from 'cucumber'; import { expect } from 'chai'; import { last } from 'lodash'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; let walletsTickers = []; @@ -71,7 +69,7 @@ Given(/^the wallets have the following pending delegations:$/, async function(de }); modifiedWallets.push(modifiedWallet); } - // $FlowFixMe + // @ts-ignore daedalus.api.ada.setTestingWallets(modifiedWallets); done(walletsTickers); }, delegationScenarios); diff --git a/tests/delegation/e2e/steps/delegation.ts b/tests/delegation/e2e/steps/delegation.ts index c78adbfd78..7634f58dab 100644 --- a/tests/delegation/e2e/steps/delegation.ts +++ b/tests/delegation/e2e/steps/delegation.ts @@ -5,9 +5,7 @@ import BigNumber from 'bignumber.js'; import { navigateTo } from '../../../navigation/e2e/steps/helpers'; import { timeout, notFoundWalletsErrorMessage } from '../../../common/e2e/steps/helpers'; import { getCurrentEpoch, getNextEpoch } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given(/^I am on the Delegation "([^"]*)" screen$/, async function( screenName diff --git a/tests/delegation/e2e/steps/helpers.ts b/tests/delegation/e2e/steps/helpers.ts index 38c947deec..c1951fcc30 100644 --- a/tests/delegation/e2e/steps/helpers.ts +++ b/tests/delegation/e2e/steps/helpers.ts @@ -1,8 +1,6 @@ // @flow import BigNumber from 'bignumber.js'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const STAKING_BUTTON_SIDEBAR = '.SidebarCategory_component.staking'; const DELEGATION_CENTER_PAGE = '.StakingWithNavigation_page'; diff --git a/tests/delegation/e2e/steps/rewards.ts b/tests/delegation/e2e/steps/rewards.ts index a0c7faf016..9cc8fcf869 100644 --- a/tests/delegation/e2e/steps/rewards.ts +++ b/tests/delegation/e2e/steps/rewards.ts @@ -3,9 +3,7 @@ import fs from 'fs'; import { When, Then } from 'cucumber'; import path from 'path'; import moment from 'moment'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const exportedCSVPath = path.resolve( __dirname, diff --git a/tests/delegation/e2e/steps/stake-pools.ts b/tests/delegation/e2e/steps/stake-pools.ts index deda0239a5..7305f4c73e 100644 --- a/tests/delegation/e2e/steps/stake-pools.ts +++ b/tests/delegation/e2e/steps/stake-pools.ts @@ -3,11 +3,9 @@ import { Given, When, Then } from 'cucumber'; import { expect } from 'chai'; import BigNumber from 'bignumber.js/bignumber'; import { delegationCentreStakingHelper, getStakePoolByRanking } from './helpers'; -import type { Daedalus } from '../../../types'; import { getWalletByName } from '../../../wallets/e2e/steps/helpers'; import { formattedWalletAmount } from '../../../../source/renderer/app/utils/formatters'; -declare var daedalus: Daedalus; const { stakingButtonVisible, diff --git a/tests/navigation/e2e/steps/helpers.ts b/tests/navigation/e2e/steps/helpers.ts index d855679969..b11f89e676 100644 --- a/tests/navigation/e2e/steps/helpers.ts +++ b/tests/navigation/e2e/steps/helpers.ts @@ -1,8 +1,6 @@ // @flow import { waitAndClick } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { ACTIVE_CATEGORY: '.SidebarCategory_active', ADD_WALLET_BTN: '.SidebarWalletsMenu_addWalletButton', diff --git a/tests/navigation/e2e/steps/sidebar.ts b/tests/navigation/e2e/steps/sidebar.ts index 177fe8c21b..1650d9366a 100644 --- a/tests/navigation/e2e/steps/sidebar.ts +++ b/tests/navigation/e2e/steps/sidebar.ts @@ -1,9 +1,7 @@ // @flow import { Given, When, Then } from 'cucumber'; import { sidebarHelpers } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const SELECTORS = { CATEGORY_ACTIVE: '.SidebarCategory_active', CATEGORY_COMPONENT: '.SidebarCategory_component', diff --git a/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts b/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts index 05e6431c1a..68a1adc4aa 100644 --- a/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts +++ b/tests/paper-wallets/e2e/steps/paper-wallets-certificate.ts @@ -4,9 +4,7 @@ import { expect } from 'chai'; import path from 'path'; import { fillOutWalletSendForm } from '../../../wallets/e2e/steps/helpers'; import { waitUntilTextInSelector } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const paperWalletCertificatePath = path.resolve( __dirname, diff --git a/tests/settings/e2e/steps/custom-formats.ts b/tests/settings/e2e/steps/custom-formats.ts index f4a68e7a1b..985cbb4042 100644 --- a/tests/settings/e2e/steps/custom-formats.ts +++ b/tests/settings/e2e/steps/custom-formats.ts @@ -7,9 +7,7 @@ import { getValueFromSelector, doesMatchExpectedValue, } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given(/^I choose the following custom formats:$/, async function(formatsTable) { const chosenFormats = formatsTable.hashes(); diff --git a/tests/settings/e2e/steps/helpers.ts b/tests/settings/e2e/steps/helpers.ts index 642cb9022b..800b91470f 100644 --- a/tests/settings/e2e/steps/helpers.ts +++ b/tests/settings/e2e/steps/helpers.ts @@ -4,9 +4,7 @@ import { clickOptionByValue, clickOptionByIndex, } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const DATA_LAYER_MIGRATION_ACCEPTANCE_COMPONENT = '.DataLayerMigrationForm_component'; const DEFAULT_LANGUAGE = 'en-US'; diff --git a/tests/settings/e2e/steps/select-language.ts b/tests/settings/e2e/steps/select-language.ts index ab3bb07eef..282a0cf4a0 100644 --- a/tests/settings/e2e/steps/select-language.ts +++ b/tests/settings/e2e/steps/select-language.ts @@ -2,9 +2,7 @@ import { Given, When, Then } from 'cucumber'; import { expect } from 'chai'; import { initialSettingsHelpers } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const { ensureLanguageIsSelected } = initialSettingsHelpers; const INITIAL_SETTINGS_FORM = '.InitialSettings_component'; diff --git a/tests/settings/e2e/steps/settings.ts b/tests/settings/e2e/steps/settings.ts index e2208c3b9f..c12371f8a6 100644 --- a/tests/settings/e2e/steps/settings.ts +++ b/tests/settings/e2e/steps/settings.ts @@ -3,9 +3,7 @@ import { Given, When, Then } from 'cucumber'; import { expect } from 'chai'; import { navigateTo } from '../../../navigation/e2e/steps/helpers'; import { waitUntilWaletNamesEqual } from '../../../wallets/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given(/^I am on the settings screen$/, async function() { await navigateTo.call(this, '/settings'); diff --git a/tests/settings/e2e/steps/terms-of-use.ts b/tests/settings/e2e/steps/terms-of-use.ts index 40b5f7b33d..f43ce893b7 100644 --- a/tests/settings/e2e/steps/terms-of-use.ts +++ b/tests/settings/e2e/steps/terms-of-use.ts @@ -2,9 +2,7 @@ import { Given, When, Then } from 'cucumber'; import { expect } from 'chai'; import { termsOfUseHelpers } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const TERMS_OF_USE_FORM = '.TermsOfUseForm_component'; const { acceptTerms } = termsOfUseHelpers; diff --git a/tests/setup-e2e.ts b/tests/setup-e2e.ts index fb925ae7f4..fc5f0a9d14 100644 --- a/tests/setup-e2e.ts +++ b/tests/setup-e2e.ts @@ -25,14 +25,12 @@ import { DEFAULT_TIMEOUT } from './common/e2e/steps/config'; import { setNewsFeedIsOpen, resetTestNews } from './news/e2e/steps/newsfeed-steps'; import { refreshClient } from './app/e2e/steps/helpers'; import { TEST } from '../source/common/types/environment.types'; -import type { Daedalus } from './types'; import { environment } from '../source/main/environment'; global.environment = environment; /* eslint-disable consistent-return */ -declare var daedalus: Daedalus; const context = {}; let scenariosCount = 0; diff --git a/tests/transactions/e2e/steps/transactions.ts b/tests/transactions/e2e/steps/transactions.ts index dedb408c12..5e2d4b4820 100644 --- a/tests/transactions/e2e/steps/transactions.ts +++ b/tests/transactions/e2e/steps/transactions.ts @@ -10,9 +10,7 @@ import { } from '../../../common/e2e/steps/helpers'; import { getWalletByName, fillOutWalletSendForm } from '../../../wallets/e2e/steps/helpers'; import { getRawWalletId } from '../../../../source/renderer/app/api/utils'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; // This step ensures sequential creation of given transactions // use only when the order is important because it's slower! diff --git a/tests/transactions/e2e/steps/utxos.ts b/tests/transactions/e2e/steps/utxos.ts index 2da0c7963b..98608e629f 100644 --- a/tests/transactions/e2e/steps/utxos.ts +++ b/tests/transactions/e2e/steps/utxos.ts @@ -3,9 +3,7 @@ import { Then } from 'cucumber'; import { expect } from 'chai'; import { getVisibleTextsForSelector } from '../../../common/e2e/steps/helpers'; import { getWalletUtxosTotalAmount } from '../../../../source/renderer/app/utils/utxoUtils'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const container = '.WalletUtxo_container'; diff --git a/tests/wallets/e2e/steps/balance-wallets-notification.ts b/tests/wallets/e2e/steps/balance-wallets-notification.ts index 64e61a55c8..8d3aff38bf 100644 --- a/tests/wallets/e2e/steps/balance-wallets-notification.ts +++ b/tests/wallets/e2e/steps/balance-wallets-notification.ts @@ -1,9 +1,7 @@ // @flow import { Then } from 'cucumber'; import { expect } from 'chai'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Then( /^"Byron" wallet "([^"]*)" action should be visible in the top bar notification$/, diff --git a/tests/wallets/e2e/steps/create-wallet.ts b/tests/wallets/e2e/steps/create-wallet.ts index 18ed3c4f6b..2305f2c740 100644 --- a/tests/wallets/e2e/steps/create-wallet.ts +++ b/tests/wallets/e2e/steps/create-wallet.ts @@ -1,9 +1,7 @@ // @flow import { Given, When, Then } from 'cucumber'; import { addWalletPage } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given(/^I see the add wallet page/, function() { return addWalletPage.waitForVisible(this.client); diff --git a/tests/wallets/e2e/steps/delete-wallet.ts b/tests/wallets/e2e/steps/delete-wallet.ts index a75d135640..1c81cd19c6 100644 --- a/tests/wallets/e2e/steps/delete-wallet.ts +++ b/tests/wallets/e2e/steps/delete-wallet.ts @@ -1,8 +1,6 @@ // @flow import { Given, When, Then } from 'cucumber'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given(/^I see delete wallet dialog$/, function() { return this.client.waitForVisible('.DeleteWalletConfirmationDialog_dialog'); diff --git a/tests/wallets/e2e/steps/helpers.ts b/tests/wallets/e2e/steps/helpers.ts index 478d8ff9a9..3cb957abec 100644 --- a/tests/wallets/e2e/steps/helpers.ts +++ b/tests/wallets/e2e/steps/helpers.ts @@ -5,9 +5,7 @@ import { expectTextInSelector, waitAndClick, notFoundWalletsErrorMessage } from import { byronMnemonics, shelleyMnemonics } from '../../../../utils/api-importer/mnemonics'; import { testStorageKeys } from '../../../common/e2e/steps/config'; import { WalletSyncStateStatuses } from '../../../../source/renderer/app/domains/Wallet'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const ADD_WALLET = '.WalletAdd'; const IMPORT_WALLET_BUTTON = '.importWalletButton'; diff --git a/tests/wallets/e2e/steps/import-and-migrate-wallets.ts b/tests/wallets/e2e/steps/import-and-migrate-wallets.ts index 0f8a6f852a..55cfb46a87 100644 --- a/tests/wallets/e2e/steps/import-and-migrate-wallets.ts +++ b/tests/wallets/e2e/steps/import-and-migrate-wallets.ts @@ -5,9 +5,7 @@ import { When, Then, Given } from 'cucumber'; import { expect } from 'chai'; import { difference } from 'lodash'; import { MAX_ADA_WALLETS_COUNT } from '../../../../source/renderer/app/config/numbersConfig'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; const IMPORT_WALLETS_OVERLAY_SELECTOR = '.WalletImportFileDialog_overlay'; const IMPORT_WALLETS_OVERLAY_IMPORT_CHOICE_LABEL_SELECTOR = '.WalletImportFileDialog_stateFolderLabel'; diff --git a/tests/wallets/e2e/steps/restore-wallet.ts b/tests/wallets/e2e/steps/restore-wallet.ts index 54b69ef708..364ac3a3cc 100644 --- a/tests/wallets/e2e/steps/restore-wallet.ts +++ b/tests/wallets/e2e/steps/restore-wallet.ts @@ -7,9 +7,7 @@ import { getWalletByName, } from './helpers'; import { waitUntilTextInSelector, scrollIntoView } from '../../../common/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given(/^I see the restore wallet dialog$/, function() { return this.client.waitForVisible('.WalletRestoreDialog_component'); diff --git a/tests/wallets/e2e/steps/transfer-funds-wizard.ts b/tests/wallets/e2e/steps/transfer-funds-wizard.ts index 1965b0020d..7a340cd4a2 100644 --- a/tests/wallets/e2e/steps/transfer-funds-wizard.ts +++ b/tests/wallets/e2e/steps/transfer-funds-wizard.ts @@ -3,11 +3,9 @@ import { When, Then } from 'cucumber'; import { expect } from 'chai'; import BigNumber from 'bignumber.js/bignumber'; import { formattedWalletAmount } from '../../../../source/renderer/app/utils/formatters'; -import type { Daedalus } from '../../../types'; import { noWalletsErrorMessage, getFixedAmountByName } from './helpers'; -declare var daedalus: Daedalus; When(/^I click "Byron" wallet top bar notification action$/, function() { return this.waitAndClick('.LegacyNotification_actions button:nth-child(2)'); diff --git a/tests/wallets/e2e/steps/wallet-not-responding.ts b/tests/wallets/e2e/steps/wallet-not-responding.ts index d285a6a621..4f8c734758 100644 --- a/tests/wallets/e2e/steps/wallet-not-responding.ts +++ b/tests/wallets/e2e/steps/wallet-not-responding.ts @@ -1,9 +1,7 @@ // @flow import { When, Then } from 'cucumber'; -import type { Daedalus } from '../../../types'; import { WalletSyncStateStatuses } from '../../../../source/renderer/app/domains/Wallet.js'; -declare var daedalus: Daedalus; When(/^the "([^"]*)" wallet is not responding$/, async function(walletName) { await this.client.execute((walletName, status) => { diff --git a/tests/wallets/e2e/steps/wallets-limit.ts b/tests/wallets/e2e/steps/wallets-limit.ts index 688d0b3ece..799794f25e 100644 --- a/tests/wallets/e2e/steps/wallets-limit.ts +++ b/tests/wallets/e2e/steps/wallets-limit.ts @@ -4,9 +4,7 @@ import { expect } from 'chai'; import { createWallets, getWalletByName } from './helpers'; import { MAX_ADA_WALLETS_COUNT } from '../../../../source/renderer/app/config/numbersConfig'; import { sidebarHelpers } from '../../../navigation/e2e/steps/helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Given( 'I create wallets until I reach the maximum number permitted', diff --git a/tests/wallets/e2e/steps/wallets-ordering.ts b/tests/wallets/e2e/steps/wallets-ordering.ts index 5c87cc5901..e5fbdc9be9 100644 --- a/tests/wallets/e2e/steps/wallets-ordering.ts +++ b/tests/wallets/e2e/steps/wallets-ordering.ts @@ -1,9 +1,7 @@ // @flow import { Then } from 'cucumber'; import { expect } from 'chai'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; Then(/^I should see the wallets in the following order:$/, async function( table diff --git a/tests/wallets/e2e/steps/wallets.ts b/tests/wallets/e2e/steps/wallets.ts index bbdcd35dcd..f45d525063 100644 --- a/tests/wallets/e2e/steps/wallets.ts +++ b/tests/wallets/e2e/steps/wallets.ts @@ -12,9 +12,7 @@ import { getWalletType, restoreWallet, } from './helpers'; -import type { Daedalus } from '../../../types'; -declare var daedalus: Daedalus; // Create shelley or byron wallets Given(/^I have (created )?the following (byron )?wallets:$/, async function(mode, _type, table) { From 3614db4ad95716b3de1f595e6e3dfb4ee0fd466c Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:43:40 +0000 Subject: [PATCH 036/204] [DDW-773] updated translation runner --- translations/translation-runner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/translation-runner.ts b/translations/translation-runner.ts index 279a7713ed..96a4fc943c 100644 --- a/translations/translation-runner.ts +++ b/translations/translation-runner.ts @@ -1,4 +1,4 @@ -const manageTranslations = require('react-intl-translations-manager').default; +import manageTranslations from 'react-intl-translations-manager'; manageTranslations({ messagesDirectory: 'translations/messages', From 1d04003f5aa8946011c43493c953b40981fe6298 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:44:17 +0000 Subject: [PATCH 037/204] [DDW-773] updated api wallet import scripts --- utils/api-importer/byron-wallet-importer.ts | 33 +++++++++---------- .../api-importer/itn-byron-wallet-importer.ts | 33 +++++++++---------- .../itn-shelley-wallet-importer.ts | 33 +++++++++---------- utils/api-importer/mary-wallet-importer.ts | 33 +++++++++---------- utils/api-importer/shelley-wallet-importer.ts | 33 +++++++++---------- utils/api-importer/yoroi-wallet-importer.ts | 33 +++++++++---------- 6 files changed, 90 insertions(+), 108 deletions(-) diff --git a/utils/api-importer/byron-wallet-importer.ts b/utils/api-importer/byron-wallet-importer.ts index bd66dc6f6e..0e76e1fd21 100644 --- a/utils/api-importer/byron-wallet-importer.ts +++ b/utils/api-importer/byron-wallet-importer.ts @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -const axios = require('axios'); -const https = require('https'); -const fs = require('fs'); -const { sampleSize, shuffle } = require('lodash'); -const { byronMnemonics } = require('./mnemonics'); +import axios from 'axios'; +import https from 'https'; +import fs from 'fs'; +import { sampleSize, shuffle } from 'lodash'; +import { byronMnemonics } from './mnemonics'; const names = [ 'Barry', @@ -22,7 +22,15 @@ const API_PORT = process.env.API_PORT || 8088; const IS_HTTPS = process.env.IS_HTTPS || false; const WALLET_COUNT = process.env.WALLET_COUNT || 3; -async function main() { +(async () => { +function generateImportPayload(mnemonic, name) { + return { + name, + mnemonic_sentence: mnemonic, + passphrase: 'Secret1234', + style: 'random', + }; +} const shuffledMnemonics = shuffle(byronMnemonics); const shuffledNames = shuffle(names); try { @@ -48,15 +56,4 @@ async function main() { } catch (e) { console.log(e); } -} - -function generateImportPayload(mnemonic, name) { - return { - name, - mnemonic_sentence: mnemonic, - passphrase: 'Secret1234', - style: 'random', - }; -} - -main(); +})(); diff --git a/utils/api-importer/itn-byron-wallet-importer.ts b/utils/api-importer/itn-byron-wallet-importer.ts index 7033f83f32..ba4a99f7ab 100644 --- a/utils/api-importer/itn-byron-wallet-importer.ts +++ b/utils/api-importer/itn-byron-wallet-importer.ts @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -const axios = require('axios'); -const https = require('https'); -const fs = require('fs'); -const { sampleSize, shuffle } = require('lodash'); -const { itnByronMnemonics } = require('./mnemonics'); +import axios from 'axios'; +import https from 'https'; +import fs from 'fs'; +import { sampleSize, shuffle } from 'lodash'; +import { itnByronMnemonics } from './mnemonics'; const names = [ 'Nash', @@ -22,7 +22,15 @@ const API_PORT = process.env.API_PORT || 8088; const IS_HTTPS = process.env.IS_HTTPS || false; const WALLET_COUNT = process.env.WALLET_COUNT || 3; -async function main() { +(async () => { +function generateImportPayload(mnemonic, name) { + return { + name, + mnemonic_sentence: mnemonic, + passphrase: 'Secret1234', + style: 'random', + }; +} const shuffledMnemonics = shuffle(itnByronMnemonics); const shuffledNames = shuffle(names); try { @@ -48,15 +56,4 @@ async function main() { } catch (e) { console.log(e); } -} - -function generateImportPayload(mnemonic, name) { - return { - name, - mnemonic_sentence: mnemonic, - passphrase: 'Secret1234', - style: 'random', - }; -} - -main(); +})(); diff --git a/utils/api-importer/itn-shelley-wallet-importer.ts b/utils/api-importer/itn-shelley-wallet-importer.ts index bd832981c2..c7c688f015 100644 --- a/utils/api-importer/itn-shelley-wallet-importer.ts +++ b/utils/api-importer/itn-shelley-wallet-importer.ts @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -const axios = require('axios'); -const https = require('https'); -const fs = require('fs'); -const { sampleSize, shuffle } = require('lodash'); -const { itnShelleyMnemonics } = require('./mnemonics'); +import axios from 'axios'; +import https from 'https'; +import fs from 'fs'; +import { sampleSize, shuffle } from 'lodash'; +import { itnShelleyMnemonics } from './mnemonics'; const names = [ 'Sabrina', @@ -22,7 +22,15 @@ const API_PORT = process.env.API_PORT || 8088; const IS_HTTPS = process.env.IS_HTTPS || false; const WALLET_COUNT = process.env.WALLET_COUNT || 3; -async function main() { +(async () => { +function generateImportPayload(mnemonic, name) { + return { + name, + mnemonic_sentence: mnemonic, + passphrase: 'Secret1234', + address_pool_gap: 20 + }; +} const shuffledMnemonics = shuffle(itnShelleyMnemonics); const shuffledNames = shuffle(names); try { @@ -48,15 +56,4 @@ async function main() { } catch (e) { console.log(e); } -} - -function generateImportPayload(mnemonic, name) { - return { - name, - mnemonic_sentence: mnemonic, - passphrase: 'Secret1234', - address_pool_gap: 20 - }; -} - -main(); +})(); diff --git a/utils/api-importer/mary-wallet-importer.ts b/utils/api-importer/mary-wallet-importer.ts index d9c57bfbe8..727e9d9983 100644 --- a/utils/api-importer/mary-wallet-importer.ts +++ b/utils/api-importer/mary-wallet-importer.ts @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -const axios = require('axios'); -const https = require('https'); -const fs = require('fs'); -const { sampleSize, shuffle } = require('lodash'); -const { maryMnemonics } = require('./mnemonics'); +import axios from 'axios'; +import https from 'https'; +import fs from 'fs'; +import { sampleSize, shuffle } from 'lodash'; +import { maryMnemonics } from './mnemonics'; const names = [ 'Madelyn', @@ -22,7 +22,15 @@ const API_PORT = process.env.API_PORT || 8088; const IS_HTTPS = process.env.IS_HTTPS || false; const WALLET_COUNT = process.env.WALLET_COUNT || 3; -async function main() { +(async () => { +function generateImportPayload(mnemonic, name) { + return { + name, + mnemonic_sentence: mnemonic, + passphrase: 'Secret1234', + address_pool_gap: 20 + }; +} const shuffledMnemonics = shuffle(maryMnemonics); const shuffledNames = shuffle(names); try { @@ -48,15 +56,4 @@ async function main() { } catch (e) { console.log(e); } -} - -function generateImportPayload(mnemonic, name) { - return { - name, - mnemonic_sentence: mnemonic, - passphrase: 'Secret1234', - address_pool_gap: 20 - }; -} - -main(); +})(); diff --git a/utils/api-importer/shelley-wallet-importer.ts b/utils/api-importer/shelley-wallet-importer.ts index b91c1510de..6e36ce1f26 100644 --- a/utils/api-importer/shelley-wallet-importer.ts +++ b/utils/api-importer/shelley-wallet-importer.ts @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -const axios = require('axios'); -const https = require('https'); -const fs = require('fs'); -const { sampleSize, shuffle } = require('lodash'); -const { shelleyMnemonics } = require('./mnemonics'); +import axios from 'axios'; +import https from 'https'; +import fs from 'fs'; +import { sampleSize, shuffle } from 'lodash'; +import { shelleyMnemonics } from './mnemonics'; const names = [ 'Laura', @@ -22,7 +22,15 @@ const API_PORT = process.env.API_PORT || 8088; const IS_HTTPS = process.env.IS_HTTPS || false; const WALLET_COUNT = process.env.WALLET_COUNT || 3; -async function main() { +(async () => { +function generateImportPayload(mnemonic, name) { + return { + name, + mnemonic_sentence: mnemonic, + passphrase: 'Secret1234', + address_pool_gap: 20 + }; +} const shuffledMnemonics = shuffle(shelleyMnemonics); const shuffledNames = shuffle(names); try { @@ -48,15 +56,4 @@ async function main() { } catch (e) { console.log(e); } -} - -function generateImportPayload(mnemonic, name) { - return { - name, - mnemonic_sentence: mnemonic, - passphrase: 'Secret1234', - address_pool_gap: 20 - }; -} - -main(); +})(); diff --git a/utils/api-importer/yoroi-wallet-importer.ts b/utils/api-importer/yoroi-wallet-importer.ts index 0bd68fe108..3ea32d6e4c 100644 --- a/utils/api-importer/yoroi-wallet-importer.ts +++ b/utils/api-importer/yoroi-wallet-importer.ts @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -const axios = require('axios'); -const https = require('https'); -const fs = require('fs'); -const { sampleSize, shuffle } = require('lodash'); -const { yoroiMnemonics } = require('./mnemonics'); +import axios from 'axios'; +import https from 'https'; +import fs from 'fs'; +import { sampleSize, shuffle } from 'lodash'; +import { yoroiMnemonics } from './mnemonics'; const names = [ 'Yakov', @@ -22,7 +22,15 @@ const API_PORT = process.env.API_PORT || 8088; const IS_HTTPS = process.env.IS_HTTPS || false; const WALLET_COUNT = process.env.WALLET_COUNT || 3; -async function main() { +(async () => { +function generateImportPayload(mnemonic, name) { + return { + name, + mnemonic_sentence: mnemonic, + passphrase: 'Secret1234', + style: 'icarus', + }; +} const shuffledMnemonics = shuffle(yoroiMnemonics); const shuffledNames = shuffle(names); try { @@ -48,15 +56,4 @@ async function main() { } catch (e) { console.log(e); } -} - -function generateImportPayload(mnemonic, name) { - return { - name, - mnemonic_sentence: mnemonic, - passphrase: 'Secret1234', - style: 'icarus', - }; -} - -main(); +})(); From 585478faba6ef8ad27b1ee121eca1e8c31517640 Mon Sep 17 00:00:00 2001 From: Michael Chappell Date: Thu, 27 Jan 2022 14:46:01 +0000 Subject: [PATCH 038/204] [DDW-773] converted flow style code in typescript files to typescript syntax --- declaration.d.ts | 23 +- source/common/config/appUpdateConfig.ts | 10 +- source/common/config/crypto/decrypt.ts | 9 +- source/common/config/downloadManagerConfig.ts | 23 +- source/common/config/electron-store.config.ts | 11 +- source/common/ipc/api.ts | 122 ++- source/common/ipc/constants.ts | 3 - source/common/ipc/lib/IpcChannel.ts | 24 +- source/common/ipc/lib/IpcConversation.ts | 24 +- .../types/address-introspection.types.ts | 44 +- .../common/types/address-pdf-request.types.ts | 23 +- source/common/types/app-update.types.ts | 2 - .../common/types/bug-report-request.types.ts | 44 +- source/common/types/cardano-node.types.ts | 86 +- source/common/types/csv-request.types.ts | 5 +- source/common/types/downloadManager.types.ts | 206 ++-- source/common/types/electron-store.types.ts | 12 +- source/common/types/environment.types.ts | 81 +- source/common/types/file-dialog.types.ts | 40 +- .../common/types/file-meta-request.types.ts | 3 +- source/common/types/hardware-wallets.types.ts | 393 ++++---- source/common/types/locales.types.ts | 12 +- source/common/types/logging.types.ts | 225 +++-- source/common/types/no-disk-space.types.ts | 19 +- source/common/types/number.types.ts | 14 +- .../types/paper-wallet-request.types.ts | 23 +- source/common/types/save-qrCode.types.ts | 5 +- .../common/types/stateDirectoryPath.types.ts | 3 +- source/common/types/support-requests.types.ts | 21 +- .../common/types/voting-pdf-request.types.ts | 23 +- source/common/utils/environmentCheckers.ts | 9 +- source/common/utils/files.ts | 26 +- source/common/utils/helper.ts | 3 +- source/common/utils/logging.ts | 43 +- source/common/utils/reporting.ts | 6 - source/main/cardano/CardanoNode.ts | 360 +++++-- .../main/cardano/CardanoSelfnodeLauncher.ts | 53 +- source/main/cardano/CardanoWalletLauncher.ts | 51 +- source/main/cardano/config.ts | 1 - source/main/cardano/setup.ts | 46 +- source/main/cardano/utils.ts | 99 +- source/main/config.ts | 99 +- source/main/environment.ts | 4 +- source/main/index.ts | 56 +- source/main/ipc/bugReportRequestChannel.ts | 14 +- source/main/ipc/cardano.ipc.ts | 10 - source/main/ipc/compress-logs.ts | 29 +- source/main/ipc/control-ui-parts.ts | 3 - source/main/ipc/download-logs.ts | 4 - source/main/ipc/downloadManagerChannel.ts | 68 +- source/main/ipc/electronStoreConversation.ts | 11 +- .../enableApplicationMenuNavigationChannel.ts | 2 - source/main/ipc/generateAddressPDFChannel.ts | 13 +- source/main/ipc/generateCsvChannel.ts | 4 - source/main/ipc/generateFileMetaChannel.ts | 4 +- source/main/ipc/generatePaperWalletChannel.ts | 49 +- source/main/ipc/generateVotingPDFChannel.ts | 12 +- .../generateWalletMigrationReportChannel.ts | 2 - source/main/ipc/get-block-replay-progress.ts | 3 - source/main/ipc/get-disk-space-status.ts | 3 - source/main/ipc/get-gpu-status.ts | 3 - source/main/ipc/get-logs.ts | 9 +- .../ipc/getDesktopDirectoryPathChannel.ts | 3 - source/main/ipc/getHardwareWalletChannel.ts | 166 ++-- source/main/ipc/getRecoveryWalletIdChannel.ts | 5 +- .../main/ipc/getStateDirectoryPathChannel.ts | 3 - source/main/ipc/getSystemLocaleChannel.ts | 3 - source/main/ipc/index.ts | 2 - source/main/ipc/introspect-address.ts | 15 +- source/main/ipc/lib/MainIpcChannel.ts | 3 +- source/main/ipc/lib/MainIpcConversation.ts | 3 +- source/main/ipc/load-asset.ts | 3 - source/main/ipc/manageAppUpdateChannel.ts | 44 +- source/main/ipc/open-external-url.ts | 4 - source/main/ipc/open-local-directory.ts | 4 - source/main/ipc/rebuild-application-menu.ts | 2 - source/main/ipc/resize-window.ts | 2 - source/main/ipc/saveQRCodeImageChannel.ts | 4 +- source/main/ipc/set-log-state-snapshot.ts | 3 - source/main/ipc/show-file-dialog-channels.ts | 4 - source/main/menus/MenuActions.types.ts | 15 +- source/main/menus/osx.ts | 50 +- source/main/menus/win-linux.ts | 58 +- source/main/preload.ts | 4 +- source/main/utils/buildAppMenus.ts | 25 +- source/main/utils/config.ts | 16 +- source/main/utils/detectSystemLocale.ts | 12 +- source/main/utils/downloadManager.ts | 30 +- source/main/utils/ensureDirectoryExists.ts | 2 - source/main/utils/getContentMinimumSize.ts | 9 +- source/main/utils/getLocale.ts | 6 +- source/main/utils/getTranslation.ts | 1 - .../utils/handleCheckBlockReplayProgress.ts | 12 +- source/main/utils/handleDiskSpace.ts | 22 +- source/main/utils/installChromeExtensions.ts | 9 +- source/main/utils/logUsedVersion.ts | 7 +- source/main/utils/logging.ts | 9 +- source/main/utils/mainErrorHandler.ts | 14 +- source/main/utils/mainLocalStorage.ts | 19 +- source/main/utils/pdf.ts | 1 - source/main/utils/processes.ts | 23 +- source/main/utils/rendererErrorHandler.ts | 12 +- source/main/utils/restoreKeystore.ts | 19 +- source/main/utils/rtsFlags.ts | 10 +- source/main/utils/safeExitWithCode.ts | 7 +- source/main/utils/setupLogging.ts | 31 +- source/main/windows/main.ts | 43 +- source/main/windows/windowBounds.ts | 21 +- source/renderer/app/App.tsx | 21 +- source/renderer/app/Routes.tsx | 3 - source/renderer/app/ThemeManager.tsx | 1 - source/renderer/app/WindowSizeManager.tsx | 2 +- .../renderer/app/actions/addresses-actions.ts | 9 +- source/renderer/app/actions/app-actions.ts | 7 +- .../app/actions/app-update-actions.ts | 5 +- source/renderer/app/actions/assets-actions.ts | 30 +- .../renderer/app/actions/currency-actions.ts | 9 +- .../renderer/app/actions/dialogs-actions.ts | 13 +- .../app/actions/hardware-wallets-actions.ts | 14 +- source/renderer/app/actions/index.ts | 46 +- source/renderer/app/actions/lib/Action.ts | 3 +- .../app/actions/network-status-actions.ts | 5 +- .../app/actions/notifications-actions.ts | 9 +- .../renderer/app/actions/profile-actions.ts | 19 +- source/renderer/app/actions/router-actions.ts | 10 +- .../renderer/app/actions/sidebar-actions.ts | 14 +- .../renderer/app/actions/staking-actions.ts | 21 +- .../app/actions/transactions-actions.ts | 5 +- source/renderer/app/actions/voting-actions.ts | 6 +- .../app/actions/wallet-backup-actions.ts | 9 +- .../app/actions/wallet-migration-actions.ts | 13 +- .../app/actions/wallet-settings-actions.ts | 30 +- .../renderer/app/actions/wallets-actions.ts | 118 ++- .../app/actions/wallets-local-actions.ts | 12 +- source/renderer/app/actions/window-actions.ts | 7 +- .../addresses/requests/constructAddress.ts | 2 - .../requests/createByronWalletAddress.ts | 13 +- .../app/api/addresses/requests/getAddress.ts | 5 +- .../api/addresses/requests/getAddresses.ts | 2 - .../requests/getByronWalletAddresses.ts | 2 - .../api/addresses/requests/inspectAddress.ts | 2 - source/renderer/app/api/addresses/types.ts | 56 +- source/renderer/app/api/api.ts | 877 +++++++++++------- .../app/api/assets/requests/getAssets.ts | 2 - .../api/assets/requests/getUnknownAsset.ts | 2 - source/renderer/app/api/assets/types.ts | 86 +- source/renderer/app/api/common/errors.ts | 6 +- source/renderer/app/api/common/types.ts | 15 +- source/renderer/app/api/errors.ts | 1 - source/renderer/app/api/index.ts | 9 +- .../api/network/requests/getNetworkClock.ts | 6 +- .../api/network/requests/getNetworkInfo.ts | 2 - .../network/requests/getNetworkParameters.ts | 2 - source/renderer/app/api/network/types.ts | 181 ++-- .../renderer/app/api/news/requests/getNews.ts | 3 - .../app/api/news/requests/getNewsHash.ts | 3 - source/renderer/app/api/news/types.ts | 59 +- source/renderer/app/api/nodes/errors.ts | 2 - .../requests/checkSmashServerHealth.ts | 6 +- .../api/staking/requests/getDelegationFee.ts | 2 - .../api/staking/requests/getSmashSettings.ts | 2 - .../app/api/staking/requests/getStakePools.ts | 6 +- .../app/api/staking/requests/joinStakePool.ts | 6 +- .../app/api/staking/requests/quitStakePool.ts | 6 +- .../staking/requests/updateSmashSettings.ts | 2 - source/renderer/app/api/staking/types.ts | 157 ++-- .../requests/createByronWalletTransaction.ts | 11 +- .../requests/createExternalTransaction.ts | 6 +- .../requests/createTransaction.ts | 2 - .../requests/deleteLegacyTransaction.ts | 12 +- .../requests/deleteTransaction.ts | 12 +- .../requests/getByronWalletTransactionFee.ts | 9 +- .../transactions/requests/getICOPublicKey.ts | 2 - .../getLegacyWalletTransactionHistory.ts | 9 +- .../api/transactions/requests/getPublicKey.ts | 2 - .../transactions/requests/getTransaction.ts | 2 - .../requests/getTransactionFee.ts | 2 - .../requests/getTransactionHistory.ts | 9 +- .../requests/getWithdrawalHistory.ts | 6 +- .../api/transactions/requests/selectCoins.ts | 75 +- source/renderer/app/api/transactions/types.ts | 384 ++++---- source/renderer/app/api/utils/apiHelpers.ts | 9 +- .../renderer/app/api/utils/externalRequest.ts | 20 +- source/renderer/app/api/utils/hashing.ts | 2 - source/renderer/app/api/utils/index.ts | 14 +- source/renderer/app/api/utils/localStorage.ts | 186 +--- source/renderer/app/api/utils/mnemonics.ts | 11 +- source/renderer/app/api/utils/patchAdaApi.ts | 71 +- source/renderer/app/api/utils/request.ts | 64 +- source/renderer/app/api/utils/requestV0.ts | 27 +- .../voting/requests/createWalletSignature.ts | 6 +- source/renderer/app/api/voting/types.ts | 47 +- .../wallets/requests/createHardwareWallet.ts | 13 +- .../app/api/wallets/requests/createWallet.ts | 8 +- .../wallets/requests/deleteLegacyWallet.ts | 10 +- .../app/api/wallets/requests/deleteWallet.ts | 10 +- .../wallets/requests/exportWalletAsJSON.ts | 7 +- .../wallets/requests/getAccountPublicKey.ts | 7 +- .../wallets/requests/getByronWalletUtxos.ts | 8 +- .../api/wallets/requests/getCurrencyList.ts | 3 - .../api/wallets/requests/getCurrencyRate.ts | 3 - .../api/wallets/requests/getLegacyWallet.ts | 8 +- .../api/wallets/requests/getLegacyWallets.ts | 2 - .../app/api/wallets/requests/getWallet.ts | 8 +- .../wallets/requests/getWalletPublicKey.ts | 2 - .../api/wallets/requests/getWalletUtxos.ts | 8 +- .../app/api/wallets/requests/getWallets.ts | 2 - .../wallets/requests/importWalletAsJSON.ts | 2 - .../api/wallets/requests/importWalletAsKey.ts | 7 +- .../wallets/requests/restoreByronWallet.ts | 8 +- .../requests/restoreExportedByronWallet.ts | 8 +- .../wallets/requests/restoreLegacyWallet.ts | 10 +- .../app/api/wallets/requests/restoreWallet.ts | 8 +- .../app/api/wallets/requests/transferFunds.ts | 7 +- .../requests/transferFundsCalculateFee.ts | 2 - .../requests/updateByronSpendingPassword.ts | 8 +- .../api/wallets/requests/updateByronWallet.ts | 14 +- .../requests/updateSpendingPassword.ts | 8 +- .../app/api/wallets/requests/updateWallet.ts | 14 +- source/renderer/app/api/wallets/types.ts | 371 ++++---- .../components/appUpdate/AppUpdateOverlay.tsx | 52 +- .../renderer/app/components/assets/Asset.tsx | 53 +- .../app/components/assets/AssetAmount.tsx | 17 +- .../app/components/assets/AssetContent.tsx | 31 +- .../components/assets/AssetSettingsDialog.tsx | 24 +- .../assets/AssetTransactionConfirmation.tsx | 25 +- .../assets/AssetsTransactionConfirmation.tsx | 21 +- .../dapp/DappTransactionRequest.tsx | 43 +- .../hardware-wallet/HardwareWalletStatus.tsx | 43 +- .../app/components/layout/CenteredLayout.tsx | 6 +- .../app/components/layout/SidebarLayout.tsx | 15 +- .../renderer/app/components/layout/TopBar.tsx | 28 +- .../app/components/layout/TopBarLayout.tsx | 10 +- .../layout/VerticalFlexContainer.tsx | 5 +- .../no-disk-space-error/NoDiskSpaceError.tsx | 12 +- .../syncing-connecting/LogosDisplay.tsx | 9 +- .../syncing-connecting/ReportIssue.tsx | 15 +- .../syncing-connecting/StatusIcons.tsx | 34 +- .../syncing-connecting/SyncingConnecting.tsx | 79 +- .../SyncingConnectingBackground.tsx | 10 +- .../SyncingConnectingStatus.tsx | 53 +- .../system-time-error/SystemTimeError.tsx | 34 +- .../app/components/navigation/NavButton.tsx | 16 +- .../app/components/navigation/NavDropdown.tsx | 24 +- .../app/components/navigation/Navigation.tsx | 39 +- .../app/components/news/AlertsOverlay.tsx | 42 +- .../app/components/news/IncidentOverlay.tsx | 21 +- .../renderer/app/components/news/NewsFeed.tsx | 54 +- .../renderer/app/components/news/NewsItem.tsx | 48 +- .../app/components/news/UpdateItem.tsx | 27 +- .../notifications/InlineNotification.tsx | 9 +- .../components/notifications/LegacyBadge.tsx | 9 +- .../notifications/LegacyNotification.tsx | 21 +- .../components/notifications/Notification.tsx | 37 +- .../notifications/NotificationActions.tsx | 28 +- .../notifications/RestoreNotification.tsx | 9 +- .../DataLayerMigrationForm.tsx | 11 +- .../initial-settings/InitialSettings.tsx | 3 +- .../profile/terms-of-use/TermsOfUseForm.tsx | 22 +- .../profile/terms-of-use/TermsOfUseText.tsx | 11 +- .../components/settings/SettingsLayout.tsx | 13 +- .../settings/categories/DisplaySettings.tsx | 43 +- .../settings/categories/GeneralSettings.tsx | 3 +- .../categories/SecuritySettings.messages.ts | 2 - .../settings/categories/SecuritySettings.tsx | 12 +- .../categories/StakePoolsSettings.tsx | 42 +- .../settings/categories/SupportSettings.tsx | 33 +- .../categories/TermsOfUseSettings.tsx | 8 +- .../settings/categories/WalletsSettings.tsx | 23 +- .../settings/menu/SecurityMenuItem.tsx | 12 +- .../settings/menu/SettingsMenu.messages.ts | 2 - .../components/settings/menu/SettingsMenu.tsx | 10 +- .../settings/menu/SettingsMenuItem.tsx | 16 +- .../app/components/settings/menu/hooks.ts | 10 +- .../app/components/sidebar/Sidebar.tsx | 22 +- .../components/sidebar/SidebarCategory.tsx | 14 +- .../sidebar/SidebarCategoryNetworkInfo.tsx | 6 +- .../SidebarCategoryWrapper.messages.ts | 2 - .../sidebar/SidebarCategoryWrapper.tsx | 6 +- .../app/components/sidebar/SidebarMenu.tsx | 8 +- .../app/components/sidebar/helpers.ts | 2 - .../renderer/app/components/sidebar/types.ts | 40 +- .../sidebar/wallets/SidebarWalletMenuItem.tsx | 37 +- .../wallets/SidebarWalletsMenu.spec.tsx | 13 +- .../sidebar/wallets/SidebarWalletsMenu.tsx | 43 +- .../sidebar/wallets/WalletSearch.tsx | 9 +- .../sidebar/wallets/WalletSortButton.tsx | 15 +- .../components/splash/SplashNetworkFlight.tsx | 9 +- .../components/staking/StakingUnavailable.tsx | 7 +- .../staking/countdown/StakingCountdown.tsx | 11 +- .../delegation-center/DelegationCenter.tsx | 43 +- .../DelegationCenterBody.tsx | 44 +- .../DelegationCenterHeader.tsx | 40 +- .../DelegationCenterNoWallets.tsx | 9 +- .../staking/delegation-center/DonutRing.tsx | 14 +- .../delegation-center/DropdownMenu.tsx | 15 +- .../staking/delegation-center/WalletRow.tsx | 72 +- .../staking/delegation-center/helpers.tsx | 10 +- .../widgets/WalletAmount.tsx | 12 +- .../delegation-center/widgets/index.ts | 2 - .../DelegationSetupWizardDialog.tsx | 73 +- ...tionStepsChooseStakePoolDialog.messages.ts | 4 +- .../DelegationStepsChooseStakePoolDialog.tsx | 62 +- .../DelegationStepsChooseWalletDialog.tsx | 53 +- ...egationStepsConfirmationDialog.messages.ts | 4 +- .../DelegationStepsConfirmationDialog.tsx | 46 +- .../DelegationStepsIntroDialog.tsx | 23 +- .../DelegationStepsNotAvailableDialog.tsx | 19 +- .../DelegationStepsSuccessDialog.tsx | 47 +- .../OversaturationText.tsx | 11 +- .../staking/epochs/StakingEpochs.tsx | 39 +- .../epochs/StakingEpochsCurrentEpochData.tsx | 23 +- .../staking/epochs/StakingEpochsDataTable.tsx | 21 +- .../staking/epochs/StakingEpochsNoData.tsx | 5 +- .../epochs/StakingEpochsPreviousEpochData.tsx | 23 +- .../app/components/staking/epochs/helpers.ts | 8 +- .../components/staking/info/StakingInfo.tsx | 33 +- .../staking/info/StakingInfoCountdown.tsx | 17 +- .../staking/layouts/StakingWithNavigation.tsx | 25 +- .../staking/legacy/BlockGenerationInfo.tsx | 3 +- .../app/components/staking/legacy/Staking.tsx | 3 +- .../staking/legacy/StakingChart.tsx | 41 +- .../staking/legacy/StakingChartTooltip.tsx | 22 +- .../legacy/StakingChartTooltipItem.tsx | 8 +- .../staking/legacy/StakingSwitch.tsx | 6 +- .../staking/legacy/StakingSystemState.tsx | 3 +- .../legacy/StakingSystemStateElement.tsx | 8 +- .../staking/navigation/StakingNavigation.tsx | 16 +- .../redeem-itn-rewards/LoadingOverlay.tsx | 2 - .../redeem-itn-rewards/NoWalletsDialog.tsx | 11 +- .../RedemptionUnavailableDialog.tsx | 12 +- .../Step1ConfigurationDialog.tsx | 50 +- .../Step2ConfirmationDialog.tsx | 38 +- .../redeem-itn-rewards/Step3FailureDialog.tsx | 13 +- .../redeem-itn-rewards/Step3SuccessDialog.tsx | 22 +- .../staking/rewards/RewardAmount.tsx | 5 +- .../staking/rewards/StakingRewards.tsx | 51 +- .../staking/stake-pools/StakePools.tsx | 105 +-- .../staking/stake-pools/StakePoolsList.tsx | 45 +- .../staking/stake-pools/StakePoolsRanking.tsx | 69 +- .../stake-pools/StakePoolsRankingLoader.tsx | 3 +- .../staking/stake-pools/StakePoolsSearch.tsx | 38 +- .../staking/stake-pools/StakePoolsTable.tsx | 67 +- .../stake-pools/StakePoolsTableBody.tsx | 26 +- .../stake-pools/StakePoolsTableHeader.tsx | 15 +- .../components/staking/stake-pools/helpers.ts | 2 - .../staking/widgets/PoolPopOver.tsx | 36 +- .../components/staking/widgets/ThumbPool.tsx | 31 +- .../staking/widgets/ThumbPoolContent.tsx | 24 +- .../staking/widgets/ThumbSelectedPool.tsx | 15 +- .../staking/widgets/TooltipPool.tsx | 58 +- .../renderer/app/components/static/About.tsx | 19 +- .../components/status/DaedalusDiagnostics.tsx | 92 +- .../components/voting/VotingFooterLinks.tsx | 15 +- .../app/components/voting/VotingNoWallets.tsx | 9 +- .../voting/VotingRegistrationDialogWizard.tsx | 67 +- .../components/voting/VotingUnavailable.tsx | 4 +- .../voting/voting-info/AppStore.messages.ts | 2 - .../voting/voting-info/AppStore.tsx | 9 +- .../voting/voting-info/Headline.messages.ts | 2 - .../voting/voting-info/Headline.tsx | 6 +- .../voting-info/RegisterToVote.messages.ts | 2 - .../voting/voting-info/RegisterToVote.tsx | 13 +- .../voting-info/ResultsPhase.messages.ts | 2 - .../voting/voting-info/ResultsPhase.tsx | 14 +- .../voting-info/SnapshotPhase.messages.ts | 2 - .../voting/voting-info/SnapshotPhase.tsx | 14 +- .../voting-info/TallyingPhase.messages.ts | 2 - .../voting/voting-info/TallyingPhase.tsx | 13 +- .../voting/voting-info/VotingInfo.messages.ts | 2 - .../voting/voting-info/VotingInfo.tsx | 16 +- .../voting-info/VotingPhase.messages.ts | 2 - .../voting/voting-info/VotingPhase.tsx | 13 +- .../VotingRegistrationStepsChooseWallet.tsx | 44 +- .../VotingRegistrationStepsConfirm.tsx | 32 +- .../VotingRegistrationStepsEnterPinCode.tsx | 28 +- .../VotingRegistrationStepsQrCode.tsx | 34 +- .../VotingRegistrationStepsRegister.tsx | 50 +- .../widgets/ConfirmationDialog.tsx | 16 +- .../widgets/VotingRegistrationDialog.tsx | 33 +- .../app/components/wallet/WalletAdd.tsx | 29 +- .../components/wallet/WalletBackupDialog.tsx | 47 +- .../components/wallet/WalletConnectDialog.tsx | 30 +- .../components/wallet/WalletCreateDialog.tsx | 43 +- .../components/wallet/WalletRestoreDialog.tsx | 61 +- .../components/wallet/WalletSendForm.spec.tsx | 147 +-- .../app/components/wallet/WalletSendForm.tsx | 236 +++-- .../WalletBackupPrivacyWarningDialog.tsx | 19 +- .../WalletRecoveryInstructions.tsx | 6 +- .../WalletRecoveryPhraseDisplayDialog.tsx | 16 +- .../WalletRecoveryPhraseEntryDialog.tsx | 36 +- .../WalletRecoveryPhraseMnemonic.tsx | 6 +- .../file-import/WalletFileImportDialog.tsx | 75 +- .../wallet/layouts/WalletWithNavigation.tsx | 32 +- .../wallet/navigation/WalletNavigation.tsx | 15 +- .../wallet/not-responding/NotResponding.tsx | 10 +- .../CompletionDialog.tsx | 35 +- .../ConfirmationDialog.tsx | 13 +- .../InstructionsDialog.tsx | 29 +- .../paper-wallet-certificate/PrintDialog.tsx | 35 +- .../SecuringPasswordDialog.tsx | 19 +- .../VerificationDialog.tsx | 47 +- .../wallet/receive/AddressActions.tsx | 18 +- .../wallet/receive/AddressRandom.tsx | 12 +- .../wallet/receive/AddressSequential.tsx | 21 +- .../wallet/receive/VirtualAddressesList.tsx | 28 +- .../wallet/receive/WalletReceiveDialog.tsx | 75 +- .../wallet/receive/WalletReceiveRandom.tsx | 57 +- .../receive/WalletReceiveSequential.tsx | 45 +- .../wallet/send-form/AssetInput.tsx | 39 +- ...etSendAssetsConfirmationDialog.messages.ts | 4 +- .../WalletSendAssetsConfirmationDialog.tsx | 95 +- .../WalletSendConfirmationDialog.messages.ts | 4 +- .../WalletSendConfirmationDialog.tsx | 73 +- .../components/wallet/send-form/messages.ts | 2 - .../settings/ChangeSpendingPasswordDialog.tsx | 53 +- .../wallet/settings/DelegateWalletButton.tsx | 8 +- .../wallet/settings/DeleteWallet.tsx | 18 +- .../settings/DeleteWalletConfirmation.tsx | 17 +- .../settings/ExportWalletToFileDialog.tsx | 88 +- .../wallet/settings/ICOPublicKeyBox.tsx | 24 +- .../wallet/settings/ICOPublicKeyDialog.tsx | 29 +- .../ICOPublicKeyQRCodeDialog.messages.ts | 6 +- .../settings/ICOPublicKeyQRCodeDialog.tsx | 20 +- .../wallet/settings/PublicKeyField.tsx | 28 +- .../wallet/settings/PublicKeyFieldSkin.tsx | 19 +- .../wallet/settings/SetWalletPassword.tsx | 10 +- .../settings/UndelegateWalletButton.tsx | 8 +- .../UndelegateWalletConfirmationDialog.tsx | 49 +- .../UndelegateWalletSuccessDialog.tsx | 35 +- .../wallet/settings/UnpairWallet.tsx | 18 +- .../wallet/settings/WalletPublicKeyBox.tsx | 22 +- .../wallet/settings/WalletPublicKeyDialog.tsx | 29 +- .../settings/WalletPublicKeyQRCodeDialog.tsx | 21 +- .../WalletRecoveryPhraseStep1Dialog.tsx | 23 +- .../WalletRecoveryPhraseStep2Dialog.tsx | 38 +- .../WalletRecoveryPhraseStep3Dialog.tsx | 22 +- .../WalletRecoveryPhraseStep4Dialog.tsx | 17 +- ...WalletRecoveryPhraseVerificationWidget.tsx | 25 +- .../wallet/settings/WalletSettings.tsx | 109 ++- .../settings/WalletSettingsRemoveButton.tsx | 8 +- ...WalletSettingsRemoveConfirmationDialog.tsx | 60 +- .../wallet/skins/AmountInputSkin.tsx | 19 +- .../wallet/summary/WalletSummary.tsx | 51 +- .../wallet/summary/WalletSummaryAsset.tsx | 31 +- .../wallet/summary/WalletSummaryCurrency.tsx | 24 +- .../wallet/summary/WalletSummaryHeader.tsx | 23 +- .../wallet-no-tokens/WalletNoTokens.tsx | 12 +- .../WalletTokenPicker.messages.ts | 2 - .../WalletTokenPicker.stories.tsx | 7 +- .../wallet-token-picker/WalletTokenPicker.tsx | 7 +- .../WalletTokenPickerCheckbox.tsx | 2 - .../tokens/wallet-token-picker/const.ts | 5 - .../tokens/wallet-token-picker/helpers.ts | 15 +- .../tokens/wallet-token-picker/hooks.spec.tsx | 37 +- .../tokens/wallet-token-picker/hooks.ts | 41 +- .../tokens/wallet-token-picker/types.ts | 87 +- .../wallet-token/WalletToken.messages.ts | 1 - .../tokens/wallet-token/WalletToken.tsx | 35 +- .../tokens/wallet-token/WalletTokenFooter.tsx | 26 +- .../tokens/wallet-token/WalletTokenHeader.tsx | 35 +- .../wallet/tokens/wallet-token/helpers.ts | 7 +- .../WalletTokensList.messages.ts | 2 - .../wallet-tokens-list/WalletTokensList.tsx | 41 +- .../WalletTokensSearch.tsx | 9 +- .../tokens/wallet-tokens/WalletTokens.tsx | 57 +- .../transactions/CancelTransactionButton.tsx | 9 +- .../CancelTransactionConfirmationDialog.tsx | 15 +- .../wallet/transactions/FilterButton.tsx | 11 +- .../wallet/transactions/FilterDialog.tsx | 81 +- .../wallet/transactions/FilterResultInfo.tsx | 15 +- .../wallet/transactions/Transaction.tsx | 115 ++- .../transactions/TransactionTypeIcon.tsx | 22 +- .../transactions/WalletNoTransactions.tsx | 9 +- .../transactions/WalletTransactions.tsx | 70 +- .../transactions/WalletTransactionsHeader.tsx | 21 +- .../transactions/WalletTransactionsList.tsx | 106 +-- .../transactions/WalletTransactionsSearch.tsx | 9 +- .../metadata/MetadataValueView.tsx | 20 +- .../metadata/TransactionMetadataView.tsx | 22 +- .../SimpleTransactionList.tsx | 18 +- .../VirtualTransactionList.tsx | 63 +- .../components/wallet/transactions/types.ts | 14 +- .../TransferFundsStep1Dialog.tsx | 26 +- .../TransferFundsStep2Dialog.tsx | 43 +- .../app/components/wallet/utxo/WalletUtxo.tsx | 35 +- .../wallet/utxo/WalletUtxoCursor.tsx | 16 +- .../wallet/utxo/WalletUtxoDescription.tsx | 9 +- .../components/wallet/utxo/WalletUtxoTick.tsx | 16 +- .../wallet/utxo/WalletUtxoTooltip.tsx | 16 +- .../wallet/wallet-create/ConfigDialog.tsx | 7 +- .../wallet/wallet-create/HashDialog.tsx | 7 +- .../wallet-create/InstructionsDialog.tsx | 9 +- .../wallet/wallet-create/MnemonicsDialog.tsx | 8 +- .../wallet/wallet-create/TemplateDialog.tsx | 8 +- .../wallet/wallet-create/ValidateDialog.tsx | 8 +- .../wallet-create/WalletCreateDialog.tsx | 13 +- .../wallet-create/WalletCreateSteps.tsx | 6 +- .../wallet-import/WalletImportFileDialog.tsx | 46 +- .../WalletSelectImportDialog.tsx | 59 +- .../wallet-restore/ConfigurationDialog.tsx | 43 +- .../wallet/wallet-restore/MnemonicsDialog.tsx | 35 +- .../wallet/wallet-restore/SuccessDialog.tsx | 12 +- .../wallet-restore/WalletTypeDialog.tsx | 32 +- .../widgets/ConfirmationDialog.tsx | 16 +- .../widgets/WalletRestoreDialog.tsx | 15 +- .../widgets/WalletRestoreSteps.tsx | 8 +- .../components/widgets/BackToTopButton.tsx | 41 +- .../widgets/BigButtonForDialogs.tsx | 15 +- .../app/components/widgets/BorderedBox.tsx | 15 +- .../app/components/widgets/ButtonLink.tsx | 21 +- .../components/widgets/CountdownWidget.tsx | 45 +- .../app/components/widgets/Dialog.tsx | 79 +- .../components/widgets/DialogBackButton.tsx | 5 +- .../components/widgets/DialogCloseButton.tsx | 11 +- .../components/widgets/ExternalLinkButton.tsx | 10 +- .../widgets/FormattedHTMLMessageWithLink.tsx | 21 +- .../widgets/FullyDecentralizedEffect.tsx | 15 +- .../app/components/widgets/LoadingSpinner.tsx | 14 +- .../app/components/widgets/NewsFeedIcon.tsx | 11 +- .../components/widgets/NodeSyncStatusIcon.tsx | 11 +- .../app/components/widgets/ProgressBar.tsx | 13 +- .../components/widgets/ProgressBarLarge.tsx | 29 +- .../app/components/widgets/RadioSet.tsx | 35 +- .../app/components/widgets/Slider.tsx | 80 +- .../app/components/widgets/TadaButton.tsx | 9 +- .../widgets/WalletTestEnvironmentLabel.tsx | 6 +- .../components/widgets/WholeSelectionText.tsx | 10 +- .../widgets/forms/AssetsDropdown.tsx | 8 +- .../widgets/forms/FileUploadWidget.tsx | 19 +- .../widgets/forms/FormFieldSkinTooltip.tsx | 24 +- .../widgets/forms/ImageUploadWidget.tsx | 7 +- .../widgets/forms/InlineEditingDropdown.tsx | 31 +- .../widgets/forms/InlineEditingInput.tsx | 73 +- .../widgets/forms/InlineEditingSmallInput.tsx | 92 +- .../widgets/forms/ItemDropdownOption.tsx | 22 +- .../widgets/forms/ItemsDropdown.tsx | 9 +- .../widgets/forms/MnemonicInputWidget.tsx | 17 +- .../components/widgets/forms/NormalSwitch.tsx | 9 +- .../widgets/forms/PasswordInput.tsx | 4 +- .../app/components/widgets/forms/PinCode.tsx | 38 +- .../widgets/forms/ProfileSettingsForm.tsx | 29 +- .../widgets/forms/ReadOnlyInput.tsx | 17 +- .../components/widgets/forms/TinyButton.tsx | 19 +- .../components/widgets/forms/TinyCheckbox.tsx | 13 +- .../widgets/forms/TinyDatePicker.tsx | 45 +- .../components/widgets/forms/TinyInput.tsx | 88 +- .../components/widgets/forms/TinySelect.tsx | 7 +- .../components/widgets/forms/TinySwitch.tsx | 9 +- .../widgets/forms/WalletsDropdown.tsx | 16 +- .../widgets/forms/WalletsDropdownLabel.tsx | 20 +- .../notification-dot/NotificationDot.tsx | 10 +- .../app/components/widgets/splash/Splash.tsx | 22 +- source/renderer/app/config/assetsConfig.ts | 1 - source/renderer/app/config/cryptoConfig.ts | 1 - .../app/config/currencyConfig.coinapi.ts | 31 +- .../app/config/currencyConfig.coingecko.ts | 34 +- .../app/config/currencyConfig.nomics.ts | 31 +- source/renderer/app/config/currencyConfig.ts | 19 +- .../app/config/generateStakePoolFakeData.ts | 6 +- .../app/config/hardwareWalletsConfig.ts | 11 - source/renderer/app/config/numbersConfig.ts | 7 +- source/renderer/app/config/profileConfig.ts | 76 +- source/renderer/app/config/sidebarConfig.ts | 14 +- source/renderer/app/config/stakingConfig.ts | 58 +- .../app/config/stakingStakePools.dummy.ts | 2 - source/renderer/app/config/timingConfig.ts | 23 +- source/renderer/app/config/topBarConfig.ts | 1 - source/renderer/app/config/txnsConfig.ts | 1 + source/renderer/app/config/urlsConfig.ts | 5 - source/renderer/app/config/utxoConfig.ts | 1 - source/renderer/app/config/votingConfig.ts | 6 +- .../app/config/walletNavigationConfig.ts | 2 - .../walletRecoveryPhraseVerificationConfig.ts | 16 +- .../app/config/walletRestoreConfig.ts | 22 +- source/renderer/app/config/walletsConfig.ts | 24 +- source/renderer/app/containers/MainLayout.tsx | 29 +- source/renderer/app/containers/Root.tsx | 11 +- .../app/containers/TopBarContainer.tsx | 9 +- .../appUpdate/AppUpdateContainer.tsx | 10 +- .../assets/AssetSettingsDialogContainer.tsx | 15 +- .../app/containers/loading/LoadingPage.tsx | 8 +- .../loading/NoDiskSpaceErrorPage.tsx | 9 +- .../loading/SyncingConnectingPage.tsx | 13 +- .../loading/SystemTimeErrorPage.tsx | 9 +- .../app/containers/news/NewsFeedContainer.tsx | 10 +- .../containers/news/NewsOverlayContainer.tsx | 12 +- .../notifications/NotificationsContainer.tsx | 31 +- .../profile/DataLayerMigrationPage.tsx | 9 +- .../profile/InitialSettingsPage.tsx | 15 +- .../app/containers/profile/TermsOfUsePage.tsx | 10 +- .../app/containers/settings/Settings.tsx | 19 +- .../categories/DisplaySettingsPage.tsx | 9 +- .../categories/GeneralSettingsPage.tsx | 14 +- .../categories/SecuritySettingsPage.tsx | 1 - .../categories/StakePoolsSettingsPage.tsx | 13 +- .../categories/SupportSettingsPage.tsx | 15 +- .../categories/TermsOfUseSettingsPage.tsx | 8 +- .../categories/WalletsSettingsPage.tsx | 14 +- .../containers/splash/SplashNetworkPage.tsx | 11 +- .../staking/DelegationCenterPage.tsx | 42 +- .../staking/RedeemItnRewardsContainer.tsx | 14 +- .../containers/staking/StakePoolsListPage.tsx | 22 +- .../app/containers/staking/Staking.tsx | 19 +- .../staking/StakingCountdownPage.tsx | 15 +- .../containers/staking/StakingEpochsPage.tsx | 10 +- .../containers/staking/StakingInfoPage.tsx | 9 +- .../containers/staking/StakingRewardsPage.tsx | 21 +- .../DelegationSetupWizardDialogContainer.tsx | 82 +- .../redeem-itn-rewards/NoWalletsContainer.tsx | 9 +- .../RedemptionUnavailableContainer.tsx | 4 +- .../Step1ConfigurationContainer.tsx | 15 +- .../Step2ConfirmationContainer.tsx | 5 +- .../Step3ResultContainer.tsx | 6 +- .../app/containers/static/AboutDialog.tsx | 5 +- .../status/DaedalusDiagnosticsDialog.tsx | 14 +- .../voting/VotingRegistrationPage.tsx | 18 +- .../VotingRegistrationDialogContainer.tsx | 44 +- .../PaperWalletCreateCertificatePage.tsx | 47 +- .../containers/wallet/TransferFundsPage.tsx | 11 +- .../renderer/app/containers/wallet/Wallet.tsx | 21 +- .../app/containers/wallet/WalletAddPage.tsx | 34 +- .../containers/wallet/WalletReceivePage.tsx | 61 +- .../app/containers/wallet/WalletSendPage.tsx | 40 +- .../containers/wallet/WalletSettingsPage.tsx | 37 +- .../containers/wallet/WalletSummaryPage.tsx | 26 +- .../containers/wallet/WalletTokensPage.tsx | 7 - .../wallet/WalletTransactionsPage.tsx | 6 +- .../app/containers/wallet/WalletUtxoPage.tsx | 11 +- .../dialogs/WalletBackupDialogContainer.tsx | 18 +- .../dialogs/WalletConnectDialogContainer.tsx | 19 +- .../dialogs/WalletCreateDialogContainer.tsx | 14 +- .../WalletCreateDialogContainerOld.tsx | 7 +- .../dialogs/WalletImportDialogContainer.tsx | 11 +- .../dialogs/WalletRestoreDialogContainer.tsx | 9 +- .../WalletRestoreDialogContainerOld.tsx | 19 +- .../WalletSendConfirmationDialogContainer.tsx | 58 +- .../CompletionDialogContainer.tsx | 5 +- .../InstructionsDialogContainer.tsx | 10 +- .../PrintDialogContainer.tsx | 5 +- .../SecuringPasswordDialogContainer.tsx | 7 +- .../VerificationDialogContainer.tsx | 7 +- .../ChangeSpendingPasswordDialogContainer.tsx | 16 +- .../settings/DeleteWalletDialogContainer.tsx | 20 +- .../ExportWalletToFileDialogContainer.tsx | 8 +- .../settings/PublicKeyDialogContainer.tsx | 11 +- .../PublicKeyQRCodeDialogContainer.tsx | 30 +- .../UndelegateWalletDialogContainer.tsx | 48 +- .../settings/UnpairWalletDialogContainer.tsx | 19 +- .../WalletRecoveryPhraseContainer.tsx | 5 +- .../TransferFundsStep1Container.tsx | 8 +- .../TransferFundsStep2Container.tsx | 17 +- .../wallet-create/ConfigDialogContainer.tsx | 4 +- .../wallet-create/HashDialogContainer.tsx | 4 +- .../InstructionsDialogContainer.tsx | 4 +- .../MnemonicsDialogContainer.tsx | 4 +- .../wallet-create/TemplateDialogContainer.tsx | 4 +- .../wallet-create/ValidateDialogContainer.tsx | 4 +- .../WalletFileImportStepContainer.tsx | 10 +- .../WalletSelectImportStepContainer.tsx | 22 +- .../StepConfigurationContainer.tsx | 8 +- .../wallet-restore/StepMnemonicsContainer.tsx | 26 +- .../wallet-restore/StepSuccessContainer.tsx | 4 +- .../StepWalletTypeContainer.tsx | 10 +- source/renderer/app/domains/ApiError.ts | 65 +- source/renderer/app/domains/Asset.ts | 40 +- source/renderer/app/domains/News.ts | 116 +-- source/renderer/app/domains/Profile.ts | 32 +- source/renderer/app/domains/StakePool.ts | 87 +- source/renderer/app/domains/User.ts | 8 +- source/renderer/app/domains/Wallet.ts | 190 ++-- source/renderer/app/domains/WalletAddress.ts | 25 +- .../renderer/app/domains/WalletTransaction.ts | 80 +- .../__mocks__/react-svg-inline.tsx | 2 - .../app/features/discreet-mode/api/index.ts | 11 +- .../app/features/discreet-mode/context.tsx | 10 - .../app/features/discreet-mode/feature.ts | 75 +- .../app/features/discreet-mode/index.ts | 4 - .../discreet-mode/integration-tests.spec.tsx | 62 +- .../replacers/defaultReplacer.spec.ts | 4 - .../replacers/defaultReplacer.ts | 4 - .../replacers/discreetWalletAmount.spec.ts | 5 - .../replacers/discreetWalletAmount.ts | 13 +- .../replacers/discreetWalletTokenAmount.ts | 14 +- .../app/features/discreet-mode/types.ts | 8 +- .../ui/DiscreetModeFeatureInject.ts | 5 +- .../ui/DiscreetTokenWalletAmount.tsx | 1 - .../discreet-mode/ui/DiscreetValue.story.tsx | 6 - .../discreet-mode/ui/DiscreetValue.tsx | 7 +- .../discreet-mode/ui/DiscreetWalletAmount.tsx | 2 - .../DiscreetToggleTopBar.messages.ts | 2 - .../DiscreetToggleTopBar.tsx | 8 +- .../DiscreetModeToggle.story.tsx | 14 +- .../ui/discreet-toggle/DiscreetModeToggle.tsx | 11 +- .../app/features/discreet-mode/ui/index.ts | 2 - .../discreet-mode/ui/withDiscreetMode.tsx | 10 +- source/renderer/app/features/index.ts | 2 - .../app/features/local-storage/context.tsx | 9 - .../app/features/local-storage/index.ts | 2 - .../app/features/local-storage/types.ts | 9 +- .../ui/BrowserLocalStorageBridge.tsx | 6 +- .../app/features/local-storage/ui/index.ts | 2 - source/renderer/app/i18n/LocalizableError.ts | 3 - source/renderer/app/i18n/errors.ts | 6 - source/renderer/app/i18n/global-messages.ts | 2 - source/renderer/app/i18n/translations.ts | 3 +- source/renderer/app/i18n/types.ts | 8 +- source/renderer/app/index.tsx | 7 +- .../app/ipc/bugReportRequestChannel.ts | 2 - source/renderer/app/ipc/cardano.ipc.ts | 18 +- source/renderer/app/ipc/control-ui-parts.ts | 4 - .../app/ipc/downloadManagerChannel.ts | 5 - .../app/ipc/electronStoreConversation.ts | 2 - .../enableApplicationMenuNavigationChannel.ts | 2 - .../app/ipc/generateAddressPDFChannel.ts | 2 - source/renderer/app/ipc/generateCsvChannel.ts | 2 - .../app/ipc/generateFileMetaChannel.ts | 2 - .../app/ipc/generatePaperWalletChannel.ts | 2 - .../app/ipc/generateVotingPDFChannel.ts | 2 - .../generateWalletMigrationReportChannel.ts | 2 - source/renderer/app/ipc/get-gpu-status.ipc.ts | 2 - .../renderer/app/ipc/getBlockReplayChannel.ts | 2 - .../app/ipc/getDesktopDirectoryPathChannel.ts | 2 - .../renderer/app/ipc/getDiskSpaceChannel.ts | 2 - .../app/ipc/getHardwareWalletChannel.ts | 14 - .../app/ipc/getRecoveryWalletIdChannel.ts | 2 - .../app/ipc/getStateDirectoryPathChannel.ts | 2 - .../app/ipc/getSystemLocaleChannel.ts | 2 - source/renderer/app/ipc/introspect-address.ts | 2 - .../app/ipc/lib/RendererIpcChannel.ts | 3 +- .../app/ipc/lib/RendererIpcConversation.ts | 3 +- source/renderer/app/ipc/loadAsset.ts | 2 - source/renderer/app/ipc/logs.ipc.ts | 5 - .../app/ipc/manageAppUpdateChannel.ts | 2 - source/renderer/app/ipc/open-external-url.ts | 2 - .../renderer/app/ipc/open-local-directory.ts | 3 - .../app/ipc/rebuild-application-menu.ts | 2 - .../app/ipc/saveQRCodeImageChannel.ts | 2 - .../app/ipc/setStateSnapshotLogChannel.ts | 2 - .../app/ipc/show-file-dialog-channels.ts | 3 - source/renderer/app/routes-config.ts | 1 - source/renderer/app/stores/AddressesStore.ts | 112 ++- source/renderer/app/stores/AppStore.ts | 93 +- source/renderer/app/stores/AppUpdateStore.ts | 178 ++-- source/renderer/app/stores/AssetsStore.ts | 115 +-- source/renderer/app/stores/CurrencyStore.ts | 63 +- .../app/stores/HardwareWalletsStore.ts | 624 +++++++------ .../renderer/app/stores/NetworkStatusStore.ts | 306 +++--- source/renderer/app/stores/NewsFeedStore.ts | 103 +- source/renderer/app/stores/ProfileStore.ts | 236 +++-- .../renderer/app/stores/SidebarStore.spec.ts | 58 +- source/renderer/app/stores/SidebarStore.ts | 85 +- source/renderer/app/stores/StakingStore.ts | 354 ++++--- .../renderer/app/stores/TransactionsStore.ts | 196 ++-- source/renderer/app/stores/UiDialogsStore.ts | 39 +- .../app/stores/UiNotificationsStore.ts | 54 +- .../renderer/app/stores/VotingStore.spec.ts | 11 +- source/renderer/app/stores/VotingStore.ts | 175 ++-- .../renderer/app/stores/WalletBackupStore.ts | 86 +- .../app/stores/WalletMigrationStore.ts | 211 +++-- .../app/stores/WalletSettingsStore.ts | 157 ++-- .../renderer/app/stores/WalletsLocalStore.ts | 34 +- source/renderer/app/stores/WalletsStore.ts | 722 ++++++++------ source/renderer/app/stores/WindowStore.ts | 8 +- source/renderer/app/stores/index.ts | 135 ++- .../renderer/app/stores/lib/CachedRequest.ts | 23 +- .../app/stores/lib/LocalizedCachedRequest.ts | 3 +- .../app/stores/lib/LocalizedRequest.ts | 1 - source/renderer/app/stores/lib/Reaction.ts | 2 - source/renderer/app/stores/lib/Request.ts | 49 +- source/renderer/app/stores/lib/Store.ts | 6 +- source/renderer/app/themes/daedalus.ts | 3 - .../renderer/app/themes/daedalus/cardano.ts | 4 - .../renderer/app/themes/daedalus/dark-blue.ts | 4 - .../app/themes/daedalus/dark-cardano.ts | 4 - .../app/themes/daedalus/flight-candidate.ts | 4 - .../themes/daedalus/incentivized-testnet.ts | 4 - source/renderer/app/themes/daedalus/index.ts | 4 +- .../app/themes/daedalus/light-blue.ts | 4 - .../app/themes/daedalus/shelley-testnet.ts | 4 - source/renderer/app/themes/daedalus/white.ts | 4 - source/renderer/app/themes/daedalus/yellow.ts | 4 - source/renderer/app/themes/index.ts | 1 - source/renderer/app/themes/overrides/index.ts | 2 - source/renderer/app/themes/scripts/check.ts | 2 - source/renderer/app/themes/scripts/update.ts | 3 - source/renderer/app/themes/types.ts | 122 ++- .../app/themes/utils/checkCreateTheme.ts | 26 +- source/renderer/app/themes/utils/constants.ts | 15 - source/renderer/app/themes/utils/copyTheme.ts | 47 +- .../renderer/app/themes/utils/createShades.ts | 5 - .../renderer/app/themes/utils/createTheme.ts | 58 +- .../renderer/app/themes/utils/findUpdates.ts | 11 +- .../renderer/app/themes/utils/updateThemes.ts | 4 +- .../app/themes/utils/updateThemesCLI.ts | 11 +- .../app/themes/utils/writeThemeUpdate.ts | 6 +- source/renderer/app/types/LogTypes.ts | 12 +- .../renderer/app/types/TransactionMetadata.ts | 28 +- .../app/types/applicationDialogTypes.ts | 1 - .../renderer/app/types/coreSystemInfoTypes.ts | 25 +- source/renderer/app/types/currencyTypes.ts | 55 +- source/renderer/app/types/gpuStatus.ts | 27 +- source/renderer/app/types/i18nTypes.ts | 16 +- .../renderer/app/types/injectedPropsType.ts | 52 +- source/renderer/app/types/networkTypes.ts | 1 - .../renderer/app/types/notificationTypes.ts | 11 +- source/renderer/app/types/sidebarTypes.ts | 29 +- source/renderer/app/types/stakingTypes.ts | 2 - source/renderer/app/types/systemInfoTypes.ts | 11 +- .../renderer/app/types/walletBackupTypes.ts | 2 - .../renderer/app/types/walletExportTypes.ts | 44 +- .../walletRecoveryPhraseVerificationTypes.ts | 3 - .../renderer/app/types/walletRestoreTypes.ts | 29 +- .../app/utils/ReactToolboxMobxForm.ts | 12 +- .../renderer/app/utils/addressPDFGenerator.ts | 27 +- source/renderer/app/utils/assets.ts | 41 +- source/renderer/app/utils/colors.ts | 22 +- source/renderer/app/utils/crypto.ts | 30 +- source/renderer/app/utils/csvGenerator.ts | 7 +- source/renderer/app/utils/domManipulation.ts | 11 +- .../renderer/app/utils/fileMetaGenerator.ts | 8 +- source/renderer/app/utils/form.ts | 4 +- .../renderer/app/utils/formatCpuInfo.spec.ts | 8 - source/renderer/app/utils/formatCpuInfo.ts | 21 +- source/renderer/app/utils/formatters.ts | 67 +- .../renderer/app/utils/hardwareWalletUtils.ts | 46 +- .../app/utils/humanizeDurationByLocale.ts | 9 +- source/renderer/app/utils/i18nContext.ts | 10 +- source/renderer/app/utils/index.ts | 2 - source/renderer/app/utils/logging.ts | 6 +- .../app/utils/mobx-features/feature.ts | 4 - .../renderer/app/utils/mobx-features/hooks.ts | 5 +- .../app/utils/mobx-features/reaction.ts | 6 - source/renderer/app/utils/network.ts | 21 +- source/renderer/app/utils/numbers.ts | 4 - .../app/utils/paperWalletPdfGenerator.ts | 18 +- source/renderer/app/utils/routing.ts | 32 +- source/renderer/app/utils/serialize.ts | 1 - source/renderer/app/utils/shelleyLedger.ts | 172 ++-- source/renderer/app/utils/shelleyTrezor.ts | 23 +- source/renderer/app/utils/sortComparators.ts | 4 - source/renderer/app/utils/staking.ts | 28 +- source/renderer/app/utils/storesUtils.ts | 6 - source/renderer/app/utils/strings.ts | 7 +- source/renderer/app/utils/transaction.tsx | 58 +- .../app/utils/transactionsCsvGenerator.ts | 28 +- source/renderer/app/utils/utxoUtils.ts | 14 +- source/renderer/app/utils/validations.ts | 36 +- .../renderer/app/utils/votingPDFGenerator.ts | 26 +- source/renderer/app/utils/waitFor.ts | 7 +- source/renderer/app/utils/waitForExist.ts | 15 +- .../walletRecoveryPhraseVerificationUtils.ts | 10 +- .../renderer/app/utils/walletSorting.spec.ts | 30 +- source/renderer/app/utils/walletSorting.ts | 28 +- source/renderer/app/utils/walletUtils.ts | 8 +- .../app/utils/walletsForStakePoolsRanking.ts | 4 +- storybook/addons.ts | 3 +- .../addons/DaedalusMenu/DaedalusMenu.tsx | 26 +- .../addons/DaedalusMenu/DaedalusMenuStyles.ts | 3 - storybook/addons/DaedalusMenu/index.ts | 17 +- storybook/addons/DaedalusMenu/register.tsx | 4 +- storybook/config.tsx | 2 - .../_support/DiscreetModeNotificationKnob.ts | 8 +- .../_support/DiscreetModeToggleKnob.ts | 5 - storybook/stories/_support/StoryDecorator.tsx | 15 +- storybook/stories/_support/StoryLayout.tsx | 61 +- storybook/stories/_support/StoryProvider.tsx | 39 +- storybook/stories/_support/StoryWrapper.tsx | 25 +- storybook/stories/_support/config.ts | 26 +- storybook/stories/_support/environment.ts | 2 - storybook/stories/_support/profileSettings.ts | 5 - storybook/stories/_support/utils.ts | 45 +- storybook/stories/assets/Asset.stories.tsx | 13 +- .../assets/AssetSettingsDialog.stories.tsx | 9 +- .../stories/common/ItemsDropdown.stories.tsx | 196 ++-- storybook/stories/common/Widgets.stories.tsx | 62 +- .../dapps/TransactionRequest.stories.tsx | 244 ++--- storybook/stories/index.ts | 13 - .../stories/navigation/Sidebar.stories.tsx | 8 +- .../navigation/SidebarCategory.stories.tsx | 8 +- .../navigation/SidebarWalletsMenu.stories.tsx | 41 +- .../stories/news/AlertsOverlay.stories.tsx | 9 +- .../stories/news/AppUpdateOverlay.stories.tsx | 6 - .../stories/news/IncidentOverlay.stories.tsx | 12 +- storybook/stories/news/NewsFeed.stories.tsx | 10 +- .../stories/news/_utils/fakeDataNewsFeed.ts | 7 +- .../stories/news/_utils/fakeDataUpdate.ts | 13 +- storybook/stories/nodes/_utils/props.ts | 2 - .../stories/nodes/about/About.stories.tsx | 2 - .../environment/TopBarEnvironment.stories.tsx | 4 +- .../stories/nodes/errors/Errors.stories.tsx | 6 +- .../nodes/errors/NoDiskSpaceError.stories.tsx | 3 - .../nodes/errors/SystemTimeError.stories.tsx | 3 - .../stories/nodes/splash/Splash.stories.tsx | 2 - .../nodes/status/Diagnostics.stories.tsx | 29 +- .../stories/nodes/status/Status.stories.ts | 1 - .../stories/nodes/syncing/Syncing.stories.tsx | 7 +- .../syncing/SyncingConnecting.stories.tsx | 5 - .../updates/DataLayerMigration.stories.tsx | 2 - .../stories/nodes/updates/Updates.stories.tsx | 7 +- .../notifications/Notifications.stories.tsx | 260 +++--- .../settings/general/General.stories.tsx | 18 +- .../settings/language/Language.stories.tsx | 8 +- .../settings/utils/SettingsWrapper.tsx | 8 +- .../staking/CountdownParty.stories.tsx | 8 +- .../staking/DelegationCenter.stories.tsx | 24 +- .../staking/DelegationSteps.stories.tsx | 32 +- storybook/stories/staking/Epochs.stories.tsx | 4 - storybook/stories/staking/Legacy.stories.tsx | 15 +- .../staking/RedeemItnWallets.stories.tsx | 9 - storybook/stories/staking/Rewards.stories.tsx | 10 +- .../stories/staking/StakePools.stories.tsx | 13 +- .../staking/StakePoolsTable.stories.tsx | 6 +- storybook/stories/staking/Staking.stories.tsx | 47 +- storybook/stories/staking/StakingWrapper.tsx | 4 +- .../stories/staking/Undelegate.stories.tsx | 12 +- storybook/stories/voting/Voting.stories.tsx | 20 +- .../wallets/_utils/CreateWalletScreens.tsx | 9 +- .../HardwareWalletWithNavigationLayout.tsx | 20 +- .../wallets/_utils/HardwareWalletsWrapper.tsx | 2 - .../_utils/WalletWithNavigationLayout.tsx | 20 +- .../_utils/WalletsTransactionsWrapper.ts | 27 +- .../stories/wallets/_utils/WalletsWrapper.tsx | 2 - .../wallets/_utils/defaultWalletProps.tsx | 4 - .../stories/wallets/addWallet/Add.stories.tsx | 7 +- .../wallets/addWallet/Create.stories.tsx | 3 - .../wallets/addWallet/Import.stories.tsx | 3 - .../wallets/addWallet/Restore.stories.tsx | 16 +- .../wallets/addWallet/RestoreOld.stories.tsx | 4 - .../export/WalletExportToFile.stories.tsx | 9 +- .../HardwareWallets.stories.tsx | 18 +- .../import/WalletImportFile.stories.tsx | 10 +- storybook/stories/wallets/index.ts | 2 - .../LegacyNotification.stories.tsx | 7 +- .../legacyWallets/TransferFunds.stories.tsx | 18 +- .../paperWallets/PaperWallets.stories.tsx | 11 +- .../wallets/receive/WalletReceive.stories.tsx | 5 - .../wallets/send/WalletSend.stories.tsx | 12 +- .../setPassword/SetWalletPassword.stories.tsx | 7 - .../settings/PublicKeyQRCode.stories.tsx | 4 - .../wallets/settings/WalletDelete.stories.tsx | 10 +- .../settings/WalletPublicKey.stories.tsx | 5 - ...lletRecoveryPhraseVerification.stories.tsx | 17 +- .../settings/WalletSettings.stories.tsx | 5 +- .../settings/WalletSettingsScreen.stories.tsx | 31 +- .../wallets/settings/WalletUnpair.stories.tsx | 10 +- .../wallets/summary/WalletSummary.stories.tsx | 10 +- .../wallets/tokens/WalletTokens.stories.tsx | 58 +- .../tokens/WalletTokensList.stories.tsx | 69 +- .../transactions/Transaction.stories.tsx | 18 +- .../TransactionMetadata.stories.tsx | 6 +- .../transactions/TransactionsList.stories.tsx | 32 +- .../wallets/transactions/Utxo.stories.tsx | 9 +- tests/_utils/TestDecorator.tsx | 44 +- tests/addresses/e2e/steps/addresses.ts | 194 ++-- tests/app/e2e/steps/about-dialog.ts | 35 +- tests/app/e2e/steps/app-version-difference.ts | 72 +- tests/app/e2e/steps/cardano-node.ts | 28 +- tests/app/e2e/steps/daedalus-process.ts | 52 +- tests/app/e2e/steps/data-layer-migration.ts | 31 +- tests/app/e2e/steps/helpers.ts | 57 +- tests/app/e2e/steps/inject-fault.ts | 16 +- tests/app/e2e/steps/local-time-difference.ts | 37 +- tests/app/e2e/steps/no-disk-space.ts | 22 +- tests/app/e2e/steps/node-restart.ts | 21 +- .../steps/trouble-connecting-notification.ts | 50 +- .../e2e/steps/trouble-syncing-notification.ts | 14 +- tests/assets/unit/assets.spec.ts | 32 +- tests/common/e2e/steps/config.ts | 5 +- tests/common/e2e/steps/helpers.ts | 200 ++-- tests/common/unit/networks.spec.ts | 6 +- .../steps/mnemonics-form-validation.steps.ts | 24 +- .../e2e/steps/delegation-pending.ts | 93 +- tests/delegation/e2e/steps/delegation.ts | 208 ++--- tests/delegation/e2e/steps/helpers.ts | 44 +- tests/delegation/e2e/steps/rewards.ts | 35 +- tests/delegation/e2e/steps/stake-pools.ts | 104 +-- .../navigation/e2e/steps/general-settings.ts | 15 +- tests/navigation/e2e/steps/helpers.ts | 40 +- tests/navigation/e2e/steps/sidebar.ts | 64 +- tests/news/e2e/steps/newsfeed-steps.ts | 167 ++-- .../e2e/steps/paper-wallets-certificate.ts | 178 ++-- tests/reporter.ts | 5 +- tests/settings/e2e/steps/basic-setup.ts | 25 +- tests/settings/e2e/steps/custom-formats.ts | 104 +-- tests/settings/e2e/steps/general-settings.ts | 48 +- tests/settings/e2e/steps/helpers.ts | 233 ++--- tests/settings/e2e/steps/select-language.ts | 53 +- tests/settings/e2e/steps/settings.ts | 102 +- tests/settings/e2e/steps/terms-of-use.ts | 41 +- tests/settings/unit/steps/file-names.ts | 62 +- tests/setup-common.ts | 15 +- tests/setup-e2e.ts | 197 ++-- tests/transactions/e2e/steps/transactions.ts | 324 +++---- tests/transactions/e2e/steps/utxos.ts | 87 +- tests/transactions/unit/steps/helpers.ts | 7 +- tests/transactions/unit/steps/utxos-chart.ts | 162 ++-- tests/types.ts | 59 +- .../e2e/steps/balance-wallets-notification.ts | 28 +- tests/wallets/e2e/steps/create-wallet.ts | 120 +-- tests/wallets/e2e/steps/delete-wallet.ts | 46 +- tests/wallets/e2e/steps/helpers.ts | 569 +++++------- .../e2e/steps/import-and-migrate-wallets.ts | 160 ++-- .../recovery-phrase-verification-steps.ts | 103 +- tests/wallets/e2e/steps/restore-wallet.ts | 178 ++-- .../e2e/steps/transfer-funds-wizard.ts | 152 ++- .../e2e/steps/wallet-not-responding.ts | 25 +- tests/wallets/e2e/steps/wallets-limit.ts | 112 +-- tests/wallets/e2e/steps/wallets-ordering.ts | 17 +- tests/wallets/e2e/steps/wallets.ts | 213 ++--- tests/wallets/unit/steps/mnemonics.ts | 104 +-- tests/wallets/unit/steps/spending-password.ts | 16 +- tests/wallets/unit/wallet-utils.spec.ts | 92 +- translations/translation-runner.ts | 5 +- utils/api-importer/byron-wallet-importer.ts | 51 +- .../api-importer/itn-byron-wallet-importer.ts | 51 +- .../itn-shelley-wallet-importer.ts | 51 +- utils/api-importer/mary-wallet-importer.ts | 51 +- utils/api-importer/mnemonics.ts | 93 +- utils/api-importer/shelley-wallet-importer.ts | 51 +- utils/api-importer/yoroi-wallet-importer.ts | 51 +- .../create-news-verification-hashes/index.ts | 138 +-- utils/lockfile-checker/index.ts | 32 +- 1023 files changed, 14785 insertions(+), 17671 deletions(-) diff --git a/declaration.d.ts b/declaration.d.ts index ad58f50d54..c0cb15ec20 100644 --- a/declaration.d.ts +++ b/declaration.d.ts @@ -9,18 +9,18 @@ declare module '*.scss' { } type Daedalus = { - actions: ActionsMap, - api: Api, - environment: Object, - reset: Function, - stores: StoresMap, - translations: Object, - utils: { - crypto: { - generateMnemonic: Function - } - }, + actions: ActionsMap; + api: Api; + environment: Object; + reset: Function; + stores: StoresMap; + translations: Object; + utils: { + crypto: { + generateMnemonic: Function; + }; }; +}; export type $ElementType< T extends { [P in K & any]: any }, @@ -43,4 +43,3 @@ declare global { } export {}; - diff --git a/source/common/config/appUpdateConfig.ts b/source/common/config/appUpdateConfig.ts index b7c140d4a3..01a00e1147 100644 --- a/source/common/config/appUpdateConfig.ts +++ b/source/common/config/appUpdateConfig.ts @@ -1,11 +1,9 @@ -// @flow import type { UpdateInstallationStatus } from '../types/app-update.types'; - export const APP_UPDATE_DOWNLOAD_ID = 'appUpdate'; - -export const UPDATE_INSTALLATION_STATUSES: { - [key: string]: UpdateInstallationStatus, -} = { +export const UPDATE_INSTALLATION_STATUSES: Record< + string, + UpdateInstallationStatus +> = { PROGRESS: 'progress', ERROR: 'error', SUCCESS: 'success', diff --git a/source/common/config/crypto/decrypt.ts b/source/common/config/crypto/decrypt.ts index 2e0c15e258..9b6ff028a4 100644 --- a/source/common/config/crypto/decrypt.ts +++ b/source/common/config/crypto/decrypt.ts @@ -3,7 +3,6 @@ import * as bip39 from 'bip39'; import blakejs from 'blakejs'; import crypto from 'crypto'; import validWords from './valid-words.en'; - const iv = Buffer.alloc(16); // it's iv = 0 simply function decryptWithAES(aesKey, bytes) { @@ -34,10 +33,12 @@ const hexChar = [ const hexToBytes = (s) => { const arr = []; + // eslint-disable-next-line no-self-compare if (s.length & (1 === 1)) { throw new Error(`Wrong hex: ${s}`); } + for (let i = 0; i < s.length / 2; ++i) { const c1 = s[2 * i]; const c2 = s[2 * i + 1]; @@ -46,6 +47,7 @@ const hexToBytes = (s) => { if (i1 === -1 || i2 === -1) throw new Error(`Wrong hex: ${s}`); arr[i] = (i1 << 4) + i2; } + return new Uint8Array(arr); }; @@ -75,7 +77,6 @@ export const decryptForceVend = (key, data) => ), data ); - // Recovery service certificates decryption export const decryptRecoveryRegularVend = decryptRegularVend; export const decryptRecoveryForceVend = (key, data) => { @@ -84,7 +85,6 @@ export const decryptRecoveryForceVend = (key, data) => { // 2) hex string // 3) numeric array // ...therefore we need to try all 3 decryption methods - const trimmedKey = key.trim(); let decryptedData = null; let bufferKey; @@ -94,8 +94,9 @@ export const decryptRecoveryForceVend = (key, data) => { const decodedKey = trimmedKey.replace(/-/g, '+').replace(/_/g, '/'); bufferKey = Buffer.from(decodedKey, 'base64'); decryptedData = decryptWithAES(bufferKey, data); - } catch (e) {} // eslint-disable-line + } catch (e) {} + // eslint-disable-line // 2) hex string: "A974160F123726B94546D0B849E423786CCB6D55D60689983DB34ED557E6D53E" if (decryptedData === null) { try { diff --git a/source/common/config/downloadManagerConfig.ts b/source/common/config/downloadManagerConfig.ts index 45137528f6..2a80234806 100644 --- a/source/common/config/downloadManagerConfig.ts +++ b/source/common/config/downloadManagerConfig.ts @@ -1,23 +1,19 @@ -// @flow // https://www.npmjs.com/package/node-downloader-helper import type { AllowedDownloadDirectories, DownloadState, DownloadEventType, } from '../types/downloadManager.types'; - -export const ALLOWED_DOWNLOAD_DIRECTORIES: { - [key: string]: AllowedDownloadDirectories, -} = { +export const ALLOWED_DOWNLOAD_DIRECTORIES: Record< + string, + AllowedDownloadDirectories +> = { DOWNLOADS: 'downloads', DESKTOP: 'desktop', STATE_DIRECTORY: 'stateDirectory', }; - // DH_STATES in 'node-downloader-helper/src'; -export const DOWNLOAD_STATES: { - [key: string]: DownloadState, -} = { +export const DOWNLOAD_STATES: Record = { IDLE: 'IDLE', SKIPPED: 'SKIPPED', STARTED: 'STARTED', @@ -29,10 +25,7 @@ export const DOWNLOAD_STATES: { FINISHED: 'FINISHED', FAILED: 'FAILED', }; - -export const DOWNLOAD_EVENT_TYPES: { - [key: string]: DownloadEventType, -} = { +export const DOWNLOAD_EVENT_TYPES: Record = { START: 'start', DOWNLOAD: 'download', PROGRESS: 'progress', @@ -42,15 +35,12 @@ export const DOWNLOAD_EVENT_TYPES: { PAUSE: 'pause', ERROR: 'error', }; - export const DEFAULT_DIRECTORY_NAME = ALLOWED_DOWNLOAD_DIRECTORIES.STATE_DIRECTORY; - export const TEMPORARY_FILENAME = { prefix: 'Unconfirmed', extension: 'crdownload', }; - export const DOWNLOAD_DATA_DEFAULT = { state: DOWNLOAD_STATES.IDLE, remainingSize: 0, @@ -62,5 +52,4 @@ export const DOWNLOAD_DATA_DEFAULT = { incomplete: false, isResumed: false, }; - export const ERROR_TIME_AFTER_NO_END_EVENT = 10 * 1000; // 10 seconds | unit: milliseconds diff --git a/source/common/config/electron-store.config.ts b/source/common/config/electron-store.config.ts index c18b83d727..6d6bddce8f 100644 --- a/source/common/config/electron-store.config.ts +++ b/source/common/config/electron-store.config.ts @@ -1,18 +1,11 @@ -// @flow import type { StorageType, StorageKey } from '../types/electron-store.types'; - -export const STORAGE_TYPES: { - [key: string]: StorageType, -} = { +export const STORAGE_TYPES: Record = { GET: 'get', SET: 'set', DELETE: 'delete', RESET: 'reset', }; - -export const STORAGE_KEYS: { - [key: string]: StorageKey, -} = { +export const STORAGE_KEYS: Record = { APP_AUTOMATIC_UPDATE_FAILED: 'APP-AUTOMATIC-UPDATE-FAILED', APP_UPDATE_COMPLETED: 'APP-UPDATE-COMPLETED', ASSET_DATA: 'ASSET-DATA', diff --git a/source/common/ipc/api.ts b/source/common/ipc/api.ts index e35eec6df1..dd9180d93b 100644 --- a/source/common/ipc/api.ts +++ b/source/common/ipc/api.ts @@ -1,4 +1,3 @@ -// @flow import type { BugReportRequestHttpOptions, BugReportRequestPayload, @@ -70,25 +69,21 @@ import type { * Complex types are referenced from common/types to keep this api readable. * ================================================================== */ - export const GET_LOGS_CHANNEL = 'GET_LOGS_CHANNEL'; export type GetLogsRendererRequest = void; export type GetLogsMainResponse = LogFiles; - export const COMPRESS_LOGS_CHANNEL = 'COMPRESS_LOGS_CHANNEL'; export type CompressLogsRendererRequest = { - logs: LogFiles, - compressedFileName: string, + logs: LogFiles; + compressedFileName: string; }; export type CompressLogsMainResponse = string; - export const DOWNLOAD_LOGS_CHANNEL = 'DOWNLOAD_LOGS_CHANNEL'; export type DownloadLogsRendererRequest = { - compressedLogsFilePath: string, - destinationPath: string, + compressedLogsFilePath: string; + destinationPath: string; }; export type DownloadLogsMainResponse = void; - export const GET_GPU_STATUS_CHANNEL = 'GET_GPU_STATUS_CHANNEL'; export type GetGPUStatusRendererRequest = void; export type GetGPUStatusMainResponse = GpuStatus; @@ -149,7 +144,9 @@ export type SetStateSnapshotLogMainResponse = StateSnapshotLogParams; * Channel for loading a base64 encoded asset from within the `source/renderer` folder */ export const LOAD_ASSET_CHANNEL = 'LoadAssetChannel'; -export type LoadAssetRendererRequest = { fileName: string }; +export type LoadAssetRendererRequest = { + fileName: string; +}; export type LoadAssetMainResponse = string; /** @@ -172,8 +169,8 @@ export type OpenLocalDirectoryMainResponse = void; export const SUBMIT_BUG_REPORT_REQUEST_CHANNEL = 'SUBMIT_BUG_REPORT_REQUEST_CHANNEL'; export type SubmitBugReportRendererRequest = { - httpOptions: BugReportRequestHttpOptions, - requestPayload?: BugReportRequestPayload, + httpOptions: BugReportRequestHttpOptions; + requestPayload?: BugReportRequestPayload; }; export type SubmitBugReportRequestMainResponse = void; @@ -182,7 +179,7 @@ export type SubmitBugReportRequestMainResponse = void; */ export const REBUILD_APP_MENU_CHANNEL = 'REBUILD_APP_MENU_CHANNEL'; export type RebuildAppMenuRendererRequest = { - isNavigationEnabled: boolean, + isNavigationEnabled: boolean; }; export type RebuildAppMenuMainResponse = void; @@ -254,7 +251,7 @@ export type CardanoStateRendererResponse = CardanoNodeState; */ export const CARDANO_TLS_CONFIG_CHANNEL = 'CARDANO_TLS_CONFIG_CHANNEL'; export type CardanoTlsConfigRendererRequest = void; -export type CardanoTlsConfigMainResponse = ?TlsConfig; +export type CardanoTlsConfigMainResponse = TlsConfig | null | undefined; /** * Channel where renderer can request a cardano-node restart @@ -277,14 +274,20 @@ export type CardanoFaultInjectionMainResponse = void; export const GET_CACHED_CARDANO_STATUS_CHANNEL = 'GET_CACHED_CARDANO_STATUS_CHANNEL'; export type GetCachedCardanoStatusRendererRequest = void; -export type GetCachedCardanoStatusMainResponse = ?CardanoStatus; +export type GetCachedCardanoStatusMainResponse = + | CardanoStatus + | null + | undefined; /** * Channel where renderer and main process can exchange cardano-node status info */ export const SET_CACHED_CARDANO_STATUS_CHANNEL = 'SET_CACHED_CARDANO_STATUS_CHANNEL'; -export type SetCachedCardanoStatusRendererRequest = ?CardanoStatus; +export type SetCachedCardanoStatusRendererRequest = + | CardanoStatus + | null + | undefined; export type SetCachedCardanoStatusMainResponse = void; /** @@ -292,12 +295,12 @@ export type SetCachedCardanoStatusMainResponse = void; */ export const EXPORT_WALLETS_CHANNEL = 'EXPORT_WALLETS_CHANNEL'; export type ExportWalletsRendererRequest = { - exportSourcePath: string, - locale: string, + exportSourcePath: string; + locale: string; }; export type ExportWalletsMainResponse = { - wallets: Array, - errors: string, + wallets: Array; + errors: string; }; /** @@ -397,50 +400,46 @@ export type CheckFileExistsMainResponse = boolean; */ export const MANAGE_APP_UPDATE = 'MANAGE_APP_UPDATE'; export type ManageAppUpdateRendererRequest = { - filePath: string, - hash: string, + filePath: string; + hash: string; }; export type ManageAppUpdateMainResponse = { - status: 'progress' | 'success' | 'error', + status: 'progress' | 'success' | 'error'; data: { - message?: string, - progress?: number, - code?: number, - error?: Error, - info?: Object, - }, + message?: string; + progress?: number; + code?: number; + error?: Error; + info?: Record; + }; }; - export type DeriveXpubRendererRequestType = { - parentXpubHex: string, - lastIndex: number, - derivationScheme: number, + parentXpubHex: string; + lastIndex: number; + derivationScheme: number; }; - export type StakingBlockchainPointer = { - blockIndex: number, - txIndex: number, - certificateIndex: number, + blockIndex: number; + txIndex: number; + certificateIndex: number; }; - export type deriveAddressRendererRequestType = { - devicePath: ?string, - addressType: number, - networkId: number, - protocolMagic: number, - spendingPathStr: string, - stakingPathStr: ?string, - isTrezor: boolean, + devicePath: string | null | undefined; + addressType: number; + networkId: number; + protocolMagic: number; + spendingPathStr: string; + stakingPathStr: string | null | undefined; + isTrezor: boolean; }; - export type showAddressRendererRequestType = { - devicePath: ?string, - addressType: number, - networkId: number, - protocolMagic: number, - spendingPathStr: string, - stakingPathStr: ?string, - isTrezor: boolean, + devicePath: string | null | undefined; + addressType: number; + networkId: number; + protocolMagic: number; + spendingPathStr: string; + stakingPathStr: string | null | undefined; + isTrezor: boolean; }; /** @@ -464,53 +463,44 @@ export const GET_HARDWARE_WALLET_TRANSPORT_CHANNEL = 'GET_HARDWARE_WALLET_TRANSPORT_CHANNEL'; export type getHardwareWalletTransportRendererRequest = HardwareWalletTransportDeviceRequest; export type getHardwareWalletTransportMainResponse = HardwareWalletTransportDeviceResponse; - export const GET_EXTENDED_PUBLIC_KEY_CHANNEL = 'GET_EXTENDED_PUBLIC_KEY_CHANNEL'; export type getExtendedPublicKeyRendererRequest = HardwareWalletExtendedPublicKeyRequest; export type getExtendedPublicKeyMainResponse = HardwareWalletExtendedPublicKeyResponse; - export const GET_CARDANO_ADA_APP_CHANNEL = 'GET_CARDANO_ADA_APP_CHANNEL'; -export type getCardanoAdaAppRendererRequest = { path: ?string }; +export type getCardanoAdaAppRendererRequest = { + path: string | null | undefined; +}; export type getCardanoAdaAppMainResponse = HardwareWalletCardanoAdaAppResponse; - export const GET_HARDWARE_WALLET_CONNECTION_CHANNEL = 'GET_HARDWARE_WALLET_CONNECTION_CHANNEL'; export type getHardwareWalletConnectiontMainRequest = HardwareWalletConnectionRequest; -export type getHardwareWalletConnectiontRendererResponse = Object; - +export type getHardwareWalletConnectiontRendererResponse = Record; export const SIGN_TRANSACTION_LEDGER_CHANNEL = 'SIGN_TRANSACTION_LEDGER_CHANNEL'; export type signTransactionLedgerRendererRequest = LedgerSignTransactionRequest; export type signTransactionLedgerMainResponse = LedgerSignTransactionResponse; - export const SIGN_TRANSACTION_TREZOR_CHANNEL = 'SIGN_TRANSACTION_TREZOR_CHANNEL'; export type signTransactionTrezorRendererRequest = TrezorSignTransactionRequest; export type signTransactionTrezorMainResponse = TrezorSignTransactionResponse; - export const GET_INIT_TREZOR_CONNECT_CHANNEL = 'GET_INIT_TREZOR_CONNECT_CHANNEL'; export type handleInitTrezorConnectRendererRequest = void; export type handleInitTrezorConnectMainResponse = void; - export const GET_INIT_LEDGER_CONNECT_CHANNEL = 'GET_INIT_LEDGER_CONNECT_CHANNEL'; export type handleInitLedgerConnectRendererRequest = void; export type handleInitLedgerConnectMainResponse = void; - export const DERIVE_XPUB_CHANNEL = 'DERIVE_XPUB_CHANNEL'; export type deriveXpubRendererRequest = DeriveXpubRendererRequestType; export type deriveXpubMainResponse = string; - export const RESET_ACTION_TREZOR_CHANNEL = 'RESET_ACTION_TREZOR_CHANNEL'; export type resetTrezorActionRendererRequest = void; export type resetTrezorActionMainResponse = void; - export const DERIVE_ADDRESS_CHANNEL = 'DERIVE_ADDRESS_CHANNEL'; export type deriveAddressRendererRequest = deriveAddressRendererRequestType; export type deriveAddressMainResponse = string; - export const SHOW_ADDRESS_CHANNEL = 'SHOW_ADDRESS_CHANNEL'; export type showAddressRendererRequest = showAddressRendererRequestType; export type showAddressMainResponse = void; diff --git a/source/common/ipc/constants.ts b/source/common/ipc/constants.ts index 18e4d5c834..727b0ca928 100644 --- a/source/common/ipc/constants.ts +++ b/source/common/ipc/constants.ts @@ -1,14 +1,11 @@ -// @flow export const DIALOGS = { ABOUT: 'ABOUT_DIALOG', DAEDALUS_DIAGNOSTICS: 'DAEDALUS_DIAGNOSTICS_DIALOG', ITN_REWARDS_REDEMPTION: 'ITN_REWARDS_REDEMPTION_DIALOG', }; - export const NOTIFICATIONS = { DOWNLOAD_LOGS: 'DOWNLOAD_LOGS_NOTIFICATION', }; - export const PAGES = { SETTINGS: 'SETTINGS', WALLET_SETTINGS: 'WALLET_SETTINGS', diff --git a/source/common/ipc/lib/IpcChannel.ts b/source/common/ipc/lib/IpcChannel.ts index f0694525fd..fe723cb41b 100644 --- a/source/common/ipc/lib/IpcChannel.ts +++ b/source/common/ipc/lib/IpcChannel.ts @@ -1,23 +1,19 @@ -// @flow import { isString } from 'lodash'; - export type IpcSender = { - send: (channel: string, ...args: Array) => void, + send: (channel: string, ...args: Array) => void; }; - export type IpcEvent = { - sender: IpcSender, + sender: IpcSender; }; - export type IpcReceiver = { on: ( channel: string, - (event: IpcEvent, ...args: Array) => Promise - ) => void, + arg1: (event: IpcEvent, ...args: Array) => Promise + ) => void; once: ( channel: string, - (event: IpcEvent, isOk: boolean, ...args: Array) => void - ) => void, + arg1: (event: IpcEvent, isOk: boolean, ...args: Array) => void + ) => void; }; /** @@ -32,21 +28,25 @@ export class IpcChannel { * Here we track the created instances. */ static _instances = {}; + /** * The public broadcast channel (any process will receive these messages) * @private */ _broadcastChannel: string; + /** * The public request channel (any process will receive these messages) * @private */ _requestChannel: string; + /** * The response channel between a main and render process * @private */ _responseChannel: string; + /** * Sets up the ipc channel and checks that its name is valid. * Ensures that only one instance per channel name can exist. @@ -55,11 +55,11 @@ export class IpcChannel { if (!isString(channelName) || channelName === '') { throw new Error(`Invalid channel name ${channelName} provided`); } + // Enforce the singleton pattern based on the channel name const existingChannel = IpcChannel._instances[channelName]; if (existingChannel) return existingChannel; IpcChannel._instances[channelName] = this; - this._broadcastChannel = `${channelName}-broadcast`; this._requestChannel = `${channelName}-request`; this._responseChannel = `${channelName}-response`; @@ -142,7 +142,7 @@ export class IpcChannel { * Sets up a permanent handler for receiving request from the other side. */ onRequest( - handler: (Incoming) => Promise, + handler: (arg0: Incoming) => Promise, receiver: IpcReceiver ): void { receiver.on( diff --git a/source/common/ipc/lib/IpcConversation.ts b/source/common/ipc/lib/IpcConversation.ts index a1b05bc579..3d27ebc2ab 100644 --- a/source/common/ipc/lib/IpcConversation.ts +++ b/source/common/ipc/lib/IpcConversation.ts @@ -1,28 +1,24 @@ -// @flow import { isString } from 'lodash'; import uuid from 'uuid'; - export type IpcSender = { - send: (channel: string, conversationId: string, ...args: Array) => void, + send: (channel: string, conversationId: string, ...args: Array) => void; }; - export type IpcEvent = { - sender: IpcSender, + sender: IpcSender; }; - export type IpcReceiver = { on: ( channel: string, - ( + arg1: ( event: IpcEvent, conversationId: string, ...args: Array ) => Promise | void - ) => void, + ) => void; removeListener: ( channel: string, listener: (...args: Array) => void - ) => void, + ) => void; }; /** @@ -37,6 +33,7 @@ export class IpcConversation { * Here we track the created instances. */ static _instances = {}; + /** * The channel name * @private @@ -47,11 +44,14 @@ export class IpcConversation { if (!isString(channelName) || channelName === '') { throw new Error(`Invalid channel name ${channelName} provided`); } + // Enforce the singleton pattern based on the channel name const existingChannel = IpcConversation._instances[channelName]; + if (existingChannel) { throw new Error(`IPC channel "${channelName}" already exists.`); } + IpcConversation._instances[channelName] = this; this._channelName = channelName; } @@ -68,6 +68,7 @@ export class IpcConversation { ): Promise { return new Promise((resolve, reject) => { const conversationId = uuid(); + const handler = ( event, messageId: string, @@ -76,15 +77,18 @@ export class IpcConversation { ) => { // Only handle messages with matching conversation id! if (messageId !== conversationId) return; + // Simulate promise rejection over IPC (since it's not possible to throw over IPC) if (isOk) { resolve(response); } else { reject(response); } + // Cleanup the lister once the request cycle is finished receiver.removeListener(this._channelName, handler); }; + receiver.on(this._channelName, handler); sender.send(this._channelName, conversationId, message); }); @@ -95,7 +99,7 @@ export class IpcConversation { * from the other side. */ onRequest( - handler: (Incoming) => Promise, + handler: (arg0: Incoming) => Promise, receiver: IpcReceiver ): void { receiver.on( diff --git a/source/common/types/address-introspection.types.ts b/source/common/types/address-introspection.types.ts index 86f96d93a8..fca6abf3cf 100644 --- a/source/common/types/address-introspection.types.ts +++ b/source/common/types/address-introspection.types.ts @@ -1,45 +1,35 @@ -// @flow - export type IntrospectAddressRequest = { - input: string, + input: string; }; - export type AddressStyle = 'Byron' | 'Icarus' | 'Shelley'; - export type AddressType = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 14 | 15; - export type ChainPointer = { - slot_num: number, - transaction_index: number, - output_index: number, + slot_num: number; + transaction_index: number; + output_index: number; }; - export type AddressBase = { - address_type: AddressType, - address_style: AddressStyle, - network_tag: number | null, - stake_reference: 'none' | 'by pointer' | 'by value', + address_type: AddressType; + address_style: AddressStyle; + network_tag: number | null; + stake_reference: 'none' | 'by pointer' | 'by value'; }; - export type ByronAddress = AddressBase & { - address_root: string, - derivation_path: string, + address_root: string; + derivation_path: string; }; - export type IcarusAddress = AddressBase & { - address_root: string, + address_root: string; }; - export type ShelleyAddress = AddressBase & { - pointer?: ChainPointer, - script_hash?: string, - spending_key_hash?: string, - stake_key_hash?: string, - stake_script_hash?: string, + pointer?: ChainPointer; + script_hash?: string; + spending_key_hash?: string; + stake_key_hash?: string; + stake_script_hash?: string; }; - export type IntrospectAddressResponse = | { - introspection: ByronAddress | IcarusAddress | ShelleyAddress, + introspection: ByronAddress | IcarusAddress | ShelleyAddress; } | 'Invalid'; diff --git a/source/common/types/address-pdf-request.types.ts b/source/common/types/address-pdf-request.types.ts index 1189fd7cbf..5ab6498e82 100644 --- a/source/common/types/address-pdf-request.types.ts +++ b/source/common/types/address-pdf-request.types.ts @@ -1,14 +1,13 @@ -// @flow export type GenerateAddressPDFParams = { - title: string, - currentLocale: string, - creationDate: string, - address: string, - noteLabel: string, - note: string, - author: string, - filePath: string, - isMainnet: boolean, - networkLabel: string, - networkName: string, + title: string; + currentLocale: string; + creationDate: string; + address: string; + noteLabel: string; + note: string; + author: string; + filePath: string; + isMainnet: boolean; + networkLabel: string; + networkName: string; }; diff --git a/source/common/types/app-update.types.ts b/source/common/types/app-update.types.ts index 183f5e718a..035968877b 100644 --- a/source/common/types/app-update.types.ts +++ b/source/common/types/app-update.types.ts @@ -1,3 +1 @@ -// @flow - export type UpdateInstallationStatus = 'progress' | 'error' | 'success'; diff --git a/source/common/types/bug-report-request.types.ts b/source/common/types/bug-report-request.types.ts index 7c1142c2a5..ac2de2dce5 100644 --- a/source/common/types/bug-report-request.types.ts +++ b/source/common/types/bug-report-request.types.ts @@ -1,29 +1,27 @@ -// @flow export type BugReportRequestHttpOptions = { - hostname?: string, - method: string, - path: string, - port?: number, + hostname?: string; + method: string; + path: string; + port?: number; headers?: { - 'Content-Type': mixed, - }, + 'Content-Type': unknown; + }; }; - export type BugReportRequestPayload = { - product: string, - frontendVersion: string, - backendVersion: string, - network: string, - build: string, - installerVersion: string, - os: string, - compressedLogsFile: string, - date: string, - magic: number, + product: string; + frontendVersion: string; + backendVersion: string; + network: string; + build: string; + installerVersion: string; + os: string; + compressedLogsFile: string; + date: string; + magic: number; type: { - type: string, - email: string, - subject: string, - problem: string, - }, + type: string; + email: string; + subject: string; + problem: string; + }; }; diff --git a/source/common/types/cardano-node.types.ts b/source/common/types/cardano-node.types.ts index 10082a3758..a2f853c912 100644 --- a/source/common/types/cardano-node.types.ts +++ b/source/common/types/cardano-node.types.ts @@ -1,4 +1,3 @@ -// @flow import { MAINNET, TESTNET, @@ -7,25 +6,21 @@ import { ALONZO_PURPLE, SELFNODE, } from './environment.types'; - export type TlsConfig = { - hostname: string, - port: number, - ca: Uint8Array, - cert: Uint8Array, - key: Uint8Array, + hostname: string; + port: number; + ca: Uint8Array; + cert: Uint8Array; + key: Uint8Array; }; - export type CardanoNodeImplementations = 'cardano' | 'selfnode'; - export const CardanoNodeImplementationOptions: { - CARDANO: CardanoNodeImplementations, - SELFNODE: CardanoNodeImplementations, + CARDANO: CardanoNodeImplementations; + SELFNODE: CardanoNodeImplementations; } = { CARDANO: 'cardano', SELFNODE: 'selfnode', }; - export type NetworkNames = | 'mainnet' | 'testnet' @@ -35,9 +30,7 @@ export type NetworkNames = | 'selfnode' | 'development' | string; - export type PlatformNames = 'win32' | 'linux' | 'darwin' | string; - export const NetworkNameOptions = { mainnet: 'mainnet', testnet: 'testnet', @@ -47,7 +40,6 @@ export const NetworkNameOptions = { selfnode: 'selfnode', development: 'development', }; - export type CardanoNodeState = | 'starting' | 'running' @@ -60,7 +52,6 @@ export type CardanoNodeState = | 'errored' | 'unknown' | 'unrecoverable'; - export const CardanoNodeStates: EnumMap = { STARTING: 'starting', RUNNING: 'running', @@ -73,7 +64,6 @@ export const CardanoNodeStates: EnumMap = { ERRORED: 'errored', UNRECOVERABLE: 'unrecoverable', }; - export type CardanoPidOptions = | 'mainnet-PREVIOUS-CARDANO-PID' | 'testnet-PREVIOUS-CARDANO-PID' @@ -83,28 +73,25 @@ export type CardanoPidOptions = | 'selfnode-PREVIOUS-CARDANO-PID' | 'development-PREVIOUS-CARDANO-PID' | string; - export type CardanoNodeStorageKeys = { - PREVIOUS_CARDANO_PID: CardanoPidOptions, + PREVIOUS_CARDANO_PID: CardanoPidOptions; }; - export type CardanoNodeProcessNames = | 'cardano-node' | 'cardano-node.exe' | 'local-cluster' | 'local-cluster.exe'; - export type ProcessNames = { - CARDANO_PROCESS_NAME: CardanoNodeProcessNames, + CARDANO_PROCESS_NAME: CardanoNodeProcessNames; }; - -export const CardanoProcessNameOptions: { - [CardanoNodeImplementations]: { - win32: CardanoNodeProcessNames, - linux: CardanoNodeProcessNames, - darwin: CardanoNodeProcessNames, - }, -} = { +export const CardanoProcessNameOptions: Record< + CardanoNodeImplementations, + { + win32: CardanoNodeProcessNames; + linux: CardanoNodeProcessNames; + darwin: CardanoNodeProcessNames; + } +> = { cardano: { win32: 'cardano-node.exe', linux: 'cardano-node', @@ -126,40 +113,35 @@ export type FaultInjection = | 'FInjIgnoreAPI' | 'FInjApplyUpdateNoExit' | 'FInjApplyUpdateWrongExitCode'; - export const FaultInjections: { - IgnoreShutdown: FaultInjection, - IgnoreApi: FaultInjection, - ApplyUpdateNoExit: FaultInjection, - ApplyUpdateWrongExitCode: FaultInjection, + IgnoreShutdown: FaultInjection; + IgnoreApi: FaultInjection; + ApplyUpdateNoExit: FaultInjection; + ApplyUpdateWrongExitCode: FaultInjection; } = { IgnoreShutdown: 'FInjIgnoreShutdown', IgnoreApi: 'FInjIgnoreAPI', ApplyUpdateNoExit: 'FInjApplyUpdateNoExit', ApplyUpdateWrongExitCode: 'FInjApplyUpdateWrongExitCode', }; - export type FaultInjectionIpcResponse = Array; export type FaultInjectionIpcRequest = [FaultInjection, boolean]; - export type CardanoStatus = { - isNodeResponding: boolean, - isNodeSyncing: boolean, - isNodeInSync: boolean, - hasBeenConnected: boolean, - cardanoNodePID: number, - cardanoWalletPID: number, + isNodeResponding: boolean; + isNodeSyncing: boolean; + isNodeInSync: boolean; + hasBeenConnected: boolean; + cardanoNodePID: number; + cardanoWalletPID: number; }; - -export type NetworkMagicType = Array; - +export type NetworkMagicType = Array; export const NetworkMagics: { - mainnet: NetworkMagicType, - testnet: NetworkMagicType, - staging: NetworkMagicType, - alonzo_purple: NetworkMagicType, - shelley_qa: NetworkMagicType, - selfnode: NetworkMagicType, + mainnet: NetworkMagicType; + testnet: NetworkMagicType; + staging: NetworkMagicType; + alonzo_purple: NetworkMagicType; + shelley_qa: NetworkMagicType; + selfnode: NetworkMagicType; } = { // Cardano Mainet network magic [MAINNET]: [1, null], diff --git a/source/common/types/csv-request.types.ts b/source/common/types/csv-request.types.ts index cd692314ba..6065af03d9 100644 --- a/source/common/types/csv-request.types.ts +++ b/source/common/types/csv-request.types.ts @@ -1,7 +1,6 @@ -// @flow export type CsvRecord = Array; export type CsvFileContent = Array; export type GenerateCsvParams = { - fileContent: Array, - filePath: string, + fileContent: Array; + filePath: string; }; diff --git a/source/common/types/downloadManager.types.ts b/source/common/types/downloadManager.types.ts index 4d63d37ff3..6b7b2ddd51 100644 --- a/source/common/types/downloadManager.types.ts +++ b/source/common/types/downloadManager.types.ts @@ -1,10 +1,7 @@ -// @flow - export type AllowedDownloadDirectories = | 'stateDirectory' | 'downloads' | 'desktop'; - // https://www.npmjs.com/package/node-downloader-helper export type DownloadRequest = { /** @@ -13,31 +10,46 @@ export type DownloadRequest = { * If not provided, the ID will be the fileName with dots replaced by dashes * */ - id?: string, - fileUrl: string, - destinationDirectoryName?: AllowedDownloadDirectories, - options?: ?DownloadRequestOptions, + id?: string; + fileUrl: string; + destinationDirectoryName?: AllowedDownloadDirectories; + options?: DownloadRequestOptions | null | undefined; resumeDownload?: { - temporaryFilename: string, - originalFilename: string, - }, + temporaryFilename: string; + originalFilename: string; + }; }; - export type DownloadRequestOptions = { - method?: 'GET' | 'POST', // Request Method Verb - headers?: Object, // Custom HTTP Header ex: Authorization, User-Agent - fileName?: string | Function | { name: string, ext: string }, // Custom filename when saved - retry?: Object | boolean, // { maxRetries: number, delay: number in ms } or false to disable (default) - forceResume?: boolean, // If the server does not return the "accept-ranges" header, can be force if it does support it - removeOnStop?: boolean, // remove the file when is stopped (default:true) - removeOnFail?: boolean, // remove the file when fail (default:true) - override?: boolean, // if true it will override the file, otherwise will append '(number)' to the end of file - httpRequestOptions?: Object, // Override the http request options - httpsRequestOptions?: Object, // Override the https request options, ex: to add SSL Certs - progressIsThrottled?: boolean, // by default, the progress is sent every second. if `false` it will be sent every milisecond - persistLocalData?: boolean, // by default, the localdata information is deleted after the end of the download + method?: 'GET' | 'POST'; + // Request Method Verb + headers?: Record; + // Custom HTTP Header ex: Authorization, User-Agent + fileName?: + | string + | ((...args: Array) => any) + | { + name: string; + ext: string; + }; + // Custom filename when saved + retry?: Record | boolean; + // { maxRetries: number, delay: number in ms } or false to disable (default) + forceResume?: boolean; + // If the server does not return the "accept-ranges" header, can be force if it does support it + removeOnStop?: boolean; + // remove the file when is stopped (default:true) + removeOnFail?: boolean; + // remove the file when fail (default:true) + override?: boolean; + // if true it will override the file, otherwise will append '(number)' to the end of file + httpRequestOptions?: Record; + // Override the http request options + httpsRequestOptions?: Record; + // Override the https request options, ex: to add SSL Certs + progressIsThrottled?: boolean; + // by default, the progress is sent every second. if `false` it will be sent every milisecond + persistLocalData?: boolean; // by default, the localdata information is deleted after the end of the download }; - // https://www.npmjs.com/package/node-downloader-helper export type DownloadState = | 'IDLE' @@ -50,7 +62,6 @@ export type DownloadState = | 'STOPPED' | 'FINISHED' | 'FAILED'; - export type DownloadEventType = | 'start' | 'download' @@ -60,48 +71,44 @@ export type DownloadEventType = | 'stop' | 'pause' | 'error'; - export type DownloadResponse = { - eventType: DownloadEventType, - info: DownloadInfo, - data: DownloadData, - error?: string, + eventType: DownloadEventType; + info: DownloadInfo; + data: DownloadData; + error?: string; }; - export type DownloadInfo = { - downloadId: string, - fileUrl: string, - originalFilename: string, - temporaryFilename: string, - destinationDirectoryName: AllowedDownloadDirectories, - destinationPath: string, - options: DownloadRequestOptions, + downloadId: string; + fileUrl: string; + originalFilename: string; + temporaryFilename: string; + destinationDirectoryName: AllowedDownloadDirectories; + destinationPath: string; + options: DownloadRequestOptions; }; - export type DownloadData = { - state: DownloadState, - remainingSize: number, - serverFileSize: number, - diskFileSize: number, - downloadSize: number, - progress: number, - speed: number, - incomplete: boolean, - isResumed: boolean, - error?: string, + state: DownloadState; + remainingSize: number; + serverFileSize: number; + diskFileSize: number; + downloadSize: number; + progress: number; + speed: number; + incomplete: boolean; + isResumed: boolean; + error?: string; }; - export type DownloadDataUpdate = { - state?: DownloadState, - remainingSize?: number, - serverFileSize?: number, - diskFileSize?: number, - downloadSize?: number, - progress?: number, - speed?: number, - incomplete?: boolean, - isResumed?: boolean, - error?: string, + state?: DownloadState; + remainingSize?: number; + serverFileSize?: number; + diskFileSize?: number; + downloadSize?: number; + progress?: number; + speed?: number; + incomplete?: boolean; + isResumed?: boolean; + error?: string; }; /** @@ -111,63 +118,70 @@ export type DownloadDataUpdate = { * response has always the DownloadData shape * */ - // https://www.npmjs.com/package/node-downloader-helper export type DownloadInfoInit = { - totalSize: number, // total file size got from the server - fileName: string, // assigned name - filePath: string, // download path - isResumed: boolean, // if the download is a resume, - downloadedSize: number, // the downloaded amount (only if is resumed otherwise always 0) + totalSize: number; + // total file size got from the server + fileName: string; + // assigned name + filePath: string; + // download path + isResumed: boolean; + // if the download is a resume, + downloadedSize: number; // the downloaded amount (only if is resumed otherwise always 0) }; export type DownloadInfoProgress = { - name: string, // file name - total: number, // total size that needs to be downloaded in bytes - downloaded: number, // downloaded size in bytes - progress: number, // progress porcentage 0-100% - speed: number, // download speed in bytes + name: string; + // file name + total: number; + // total size that needs to be downloaded in bytes + downloaded: number; + // downloaded size in bytes + progress: number; + // progress porcentage 0-100% + speed: number; // download speed in bytes }; export type DownloadInfoEnd = { - fileName: string, - filePath: string, - totalSize: number, // total file size got from the server - incomplete: boolean, // true/false if the download endend but still incomplete - onDiskSize: number, // total size of file on the disk - downloadedSize: number, // the total size downloaded + fileName: string; + filePath: string; + totalSize: number; + // total file size got from the server + incomplete: boolean; + // true/false if the download endend but still incomplete + onDiskSize: number; + // total size of file on the disk + downloadedSize: number; // the total size downloaded }; export type DownloadInfoError = { - message: string, // Error message - status?: string, // Http status response if available - body?: string, // Http body response if available + message: string; + // Error message + status?: string; + // Http status response if available + body?: string; // Http body response if available }; - export type DownloadLocalDataRequest = { - fileName?: string, - id?: string, + fileName?: string; + id?: string; }; export type DownloadLocalDataResponse = { - info?: DownloadInfo, - data?: DownloadData, + info?: DownloadInfo; + data?: DownloadData; }; - export type DownloadsLocalDataRequest = { - state: DownloadState, -}; -export type DownloadsLocalDataResponse = { - [key: string]: DownloadLocalDataResponse, + state: DownloadState; }; - +export type DownloadsLocalDataResponse = Record< + string, + DownloadLocalDataResponse +>; export type ResumeDownloadRequest = DownloadLocalDataRequest; export type ResumeDownloadResponse = DownloadResponse | void; - export type ClearDownloadLocalDataRequest = DownloadLocalDataRequest; export type ClearDownloadLocalDataResponse = void; - export type DeleteDownloadedFileRequest = { - id?: string, + id?: string; }; export type DeleteDownloadedFileResponse = void; - export type CheckFileExistsRequest = { - id?: string, + id?: string; }; diff --git a/source/common/types/electron-store.types.ts b/source/common/types/electron-store.types.ts index aa15fbdfa7..01b13b9c82 100644 --- a/source/common/types/electron-store.types.ts +++ b/source/common/types/electron-store.types.ts @@ -1,7 +1,4 @@ -// @flow - export type StorageType = 'get' | 'set' | 'delete' | 'reset'; - export type StorageKey = | 'ALONZO-INFO-WAS-OPEN' | 'APP-AUTOMATIC-UPDATE-FAILED' @@ -31,10 +28,9 @@ export type StorageKey = | 'WALLET-MIGRATION-STATUS' | 'WALLETS' | 'WINDOW-BOUNDS'; - export type StoreMessage = { - type: StorageType, - key: StorageKey, - data?: any, - id?: string, + type: StorageType; + key: StorageKey; + data?: any; + id?: string; }; diff --git a/source/common/types/environment.types.ts b/source/common/types/environment.types.ts index 90a5097812..9e3816e622 100644 --- a/source/common/types/environment.types.ts +++ b/source/common/types/environment.types.ts @@ -1,44 +1,41 @@ -// @flow export type Environment = { - network: Network, - apiVersion: string, - nodeVersion: string, - mobxDevTools: boolean | string, - current: string, - isDev: boolean, - isTest: boolean, - isProduction: boolean, - isMainnet: boolean, - isStaging: boolean, - isTestnet: boolean, - isAlonzoPurple: boolean, - isShelleyQA: boolean, - isSelfnode: boolean, - isDevelopment: boolean, - isWatchMode: boolean, - build: string, - buildNumber: string, - platform: string, - platformVersion: string, - mainProcessID: string, - rendererProcessID: string, - os: string, - cpu: Cpu, - ram: number, - installerVersion: string, - version: string, - isWindows: boolean, - isMacOS: boolean, - isLinux: boolean, - isBlankScreenFixActive: boolean, - keepLocalClusterRunning: boolean, + network: Network; + apiVersion: string; + nodeVersion: string; + mobxDevTools: boolean | string; + current: string; + isDev: boolean; + isTest: boolean; + isProduction: boolean; + isMainnet: boolean; + isStaging: boolean; + isTestnet: boolean; + isAlonzoPurple: boolean; + isShelleyQA: boolean; + isSelfnode: boolean; + isDevelopment: boolean; + isWatchMode: boolean; + build: string; + buildNumber: string; + platform: string; + platformVersion: string; + mainProcessID: string; + rendererProcessID: string; + os: string; + cpu: Cpu; + ram: number; + installerVersion: string; + version: string; + isWindows: boolean; + isMacOS: boolean; + isLinux: boolean; + isBlankScreenFixActive: boolean; + keepLocalClusterRunning: boolean; }; - // constants export const PRODUCTION = 'production'; export const DEVELOPMENT = 'development'; export const TEST = 'test'; - // cardano-node networks export const MAINNET = 'mainnet'; export const MAINNET_FLIGHT = 'mainnet_flight'; @@ -47,7 +44,6 @@ export const STAGING = 'staging'; export const SHELLEY_QA = 'shelley_qa'; export const ALONZO_PURPLE = 'alonzo_purple'; export const SELFNODE = 'selfnode'; - export const MAC_OS = 'darwin'; export const WINDOWS = 'win32'; export const LINUX = 'linux'; @@ -56,9 +52,7 @@ export const OS_NAMES = { [WINDOWS]: 'Windows', [LINUX]: 'Linux', }; - export type Platform = 'darwin' | 'win32' | 'linux'; - export type Network = | 'mainnet' | 'mainnet_flight' @@ -68,7 +62,6 @@ export type Network = | 'alonzo_purple' | 'selfnode' | 'development'; - export const networkPrettyNames = { mainnet: 'Mainnet', testnet: 'Testnet', @@ -78,13 +71,9 @@ export const networkPrettyNames = { selfnode: 'Selfnode', development: 'Development', }; - export type CpuThreadData = { - model: string, - speed: number, - times: { - [string]: number, - }, + model: string; + speed: number; + times: Record; }; - export type Cpu = Array; diff --git a/source/common/types/file-dialog.types.ts b/source/common/types/file-dialog.types.ts index 862f59e2ab..3ab88bf5f1 100644 --- a/source/common/types/file-dialog.types.ts +++ b/source/common/types/file-dialog.types.ts @@ -1,30 +1,26 @@ -// @flow export type FilterType = { - name?: string, - extensions: string[], + name?: string; + extensions: string[]; }; - export type FileDialogRequestParams = { - name?: string, - title?: string, - defaultPath?: string, - buttonLabel?: string, - filters?: Array, - properties?: Array, - message?: string, - nameFieldLabel?: string, - showsTagField?: boolean, - securityScopedBookmarks?: boolean, + name?: string; + title?: string; + defaultPath?: string; + buttonLabel?: string; + filters?: Array; + properties?: Array; + message?: string; + nameFieldLabel?: string; + showsTagField?: boolean; + securityScopedBookmarks?: boolean; }; - export type OpenFileDialogResponseParams = { - canceled: boolean, - filePaths: string[], - bookmarks?: string[], + canceled: boolean; + filePaths: string[]; + bookmarks?: string[]; }; - export type SaveFileDialogResponseParams = { - canceled: boolean, - filePath?: string, - bookmark?: string, + canceled: boolean; + filePath?: string; + bookmark?: string; }; diff --git a/source/common/types/file-meta-request.types.ts b/source/common/types/file-meta-request.types.ts index 9235203b6a..a45a5afb51 100644 --- a/source/common/types/file-meta-request.types.ts +++ b/source/common/types/file-meta-request.types.ts @@ -1,4 +1,3 @@ -// @flow export type GenerateFileMetaParams = { - filePath: string, + filePath: string; }; diff --git a/source/common/types/hardware-wallets.types.ts b/source/common/types/hardware-wallets.types.ts index 31337e36bc..1cf779b407 100644 --- a/source/common/types/hardware-wallets.types.ts +++ b/source/common/types/hardware-wallets.types.ts @@ -1,5 +1,3 @@ -// @flow - export type BIP32Path = Array; export type LedgerModel = 'nanoS' | 'nanoX'; export type TrezorModel = '1' | 'T'; @@ -22,45 +20,42 @@ export type DeviceEvent = | 'word' | 'device-wait_for_selection' | 'unreadable-device'; - export const DeviceModels: { - LEDGER_NANO_S: LedgerModel, - LEDGER_NANO_X: LedgerModel, - TREZOR_ONE: TrezorModel, - TREZOR_T: TrezorModel, + LEDGER_NANO_S: LedgerModel; + LEDGER_NANO_X: LedgerModel; + TREZOR_ONE: TrezorModel; + TREZOR_T: TrezorModel; } = { LEDGER_NANO_S: 'nanoS', LEDGER_NANO_X: 'nanoX', TREZOR_ONE: '1', TREZOR_T: 'T', }; - export const DeviceTypes: { - LEDGER: DeviceType, - TREZOR: DeviceType, + LEDGER: DeviceType; + TREZOR: DeviceType; } = { LEDGER: 'ledger', TREZOR: 'trezor', }; - export const DeviceEvents: { - CONNECT: DeviceEvent, - CONNECT_UNACQUIRED: DeviceEvent, - DISCONNECT: DeviceEvent, - CHANGED: DeviceEvent, - ACQUIRE: DeviceEvent, - RELEASE: DeviceEvent, - ACQUIRED: DeviceEvent, - RELEASED: DeviceEvent, - USED_ELSEWHERE: DeviceEvent, - LOADING: DeviceEvent, - BUTTON: DeviceEvent, - PIN: DeviceEvent, - PASSPHRASE: DeviceEvent, - PASSPHRASE_ON_DEVICE: DeviceEvent, - WORD: DeviceEvent, - WAIT_FOR_SELECTION: DeviceEvent, - UNREADABLE: DeviceEvent, + CONNECT: DeviceEvent; + CONNECT_UNACQUIRED: DeviceEvent; + DISCONNECT: DeviceEvent; + CHANGED: DeviceEvent; + ACQUIRE: DeviceEvent; + RELEASE: DeviceEvent; + ACQUIRED: DeviceEvent; + RELEASED: DeviceEvent; + USED_ELSEWHERE: DeviceEvent; + LOADING: DeviceEvent; + BUTTON: DeviceEvent; + PIN: DeviceEvent; + PASSPHRASE: DeviceEvent; + PASSPHRASE_ON_DEVICE: DeviceEvent; + WORD: DeviceEvent; + WAIT_FOR_SELECTION: DeviceEvent; + UNREADABLE: DeviceEvent; } = { CONNECT: 'device-connect', CONNECT_UNACQUIRED: 'device-connect_unacquired', @@ -80,15 +75,13 @@ export const DeviceEvents: { WAIT_FOR_SELECTION: 'device-wait_for_selection', UNREADABLE: 'unreadable-device', }; - -export type AddressTypeNibble = 0b0000 | 0b0100 | 0b0110 | 0b1000 | 0b1110; - +export type AddressTypeNibble = 0 | 4 | 6 | 8 | 14; export const AddressTypeNibbles: { - BASE: AddressTypeNibble, - POINTER: AddressTypeNibble, - ENTERPRISE: AddressTypeNibble, - BYRON: AddressTypeNibble, - REWARD: AddressTypeNibble, + BASE: AddressTypeNibble; + POINTER: AddressTypeNibble; + ENTERPRISE: AddressTypeNibble; + BYRON: AddressTypeNibble; + REWARD: AddressTypeNibble; } = { BASE: 0b0000, POINTER: 0b0100, @@ -96,238 +89,212 @@ export const AddressTypeNibbles: { BYRON: 0b1000, REWARD: 0b1110, }; - export type CertificateType = 0 | 1 | 2; - export const CertificateTypes: { - STAKE_REGISTRATION: CertificateType, - STAKE_DEREGISTRATION: CertificateType, - STAKE_DELEGATION: CertificateType, + STAKE_REGISTRATION: CertificateType; + STAKE_DEREGISTRATION: CertificateType; + STAKE_DELEGATION: CertificateType; } = { STAKE_REGISTRATION: 0, STAKE_DEREGISTRATION: 1, STAKE_DELEGATION: 2, }; - export type TransportDevice = { - deviceId: ?string, // @TODO - mark as mandatory parameter once Ledger improver - deviceType: DeviceType, - deviceModel: string, - deviceName: string, - path: ?string, - firmwareVersion: ?string, + deviceId: string | null | undefined; + // @TODO - mark as mandatory parameter once Ledger improver + deviceType: DeviceType; + deviceModel: string; + deviceName: string; + path: string | null | undefined; + firmwareVersion: string | null | undefined; }; - export type Certificate = { - address: string, - type: string, - accountAddress: string, - poolHash: ?string, - encodeCBOR: Function, + address: string; + type: string; + accountAddress: string; + poolHash: string | null | undefined; + encodeCBOR: (...args: Array) => any; }; - -export type Withdrawal = {| - path: BIP32Path, - amountStr: string, -|}; - -export type LedgerSignTransactionInputType = {| - txHashHex: string, - outputIndex: number, - path: BIP32Path, -|}; - -export type LedgerOutputTypeAddress = {| - amountStr: string, - addressHex: string, -|}; - -export type LedgerOutputTypeChange = {| - addressTypeNibble: AddressTypeNibble, - spendingPath: BIP32Path, - amountStr: string, - stakingPath: ?BIP32Path, - stakingKeyHashHex: ?string, - stakingBlockchainPointer: ?StakingBlockchainPointer, -|}; - -export type StakingBlockchainPointer = {| - blockIndex: number, - txIndex: number, - certificateIndex: number, -|}; - -export type LedgerSignTransactionInputsType = Array; - +export type Withdrawal = { + path: BIP32Path; + amountStr: string; +}; +export type LedgerSignTransactionInputType = { + txHashHex: string; + outputIndex: number; + path: BIP32Path; +}; +export type LedgerOutputTypeAddress = { + amountStr: string; + addressHex: string; +}; +export type LedgerOutputTypeChange = { + addressTypeNibble: AddressTypeNibble; + spendingPath: BIP32Path; + amountStr: string; + stakingPath: BIP32Path | null | undefined; + stakingKeyHashHex: string | null | undefined; + stakingBlockchainPointer: StakingBlockchainPointer | null | undefined; +}; +export type StakingBlockchainPointer = { + blockIndex: number; + txIndex: number; + certificateIndex: number; +}; +export type LedgerSignTransactionInputsType = Array< + LedgerSignTransactionInputType +>; export type LedgerSignTransactionOutputsType = | [] | Array; - export type LedgerAuxiliaryDataType = { - type: string, + type: string; params: { - votingPublicKeyHex: string, - stakingPath: BIP32Path, + votingPublicKeyHex: string; + stakingPath: BIP32Path; rewardsDestination: { - type: number, + type: number; params: { - stakingPath: BIP32Path, - }, - }, - nonce: string, - }, + stakingPath: BIP32Path; + }; + }; + nonce: string; + }; }; - export type TrezorAuxiliaryDataType = { catalystRegistrationParameters: { - votingPublicKey: string, - stakingPath: string | Array, + votingPublicKey: string; + stakingPath: string | Array; rewardAddressParameters: { - addressType: number, - path: string, - }, - nonce: string, - }, + addressType: number; + path: string; + }; + nonce: string; + }; }; - export type TrezorSignTransactionInputType = { - path: string, - prev_hash: number, - prev_index: number, + path: string; + prev_hash: number; + prev_index: number; }; - export type TrezorOutputTypeAddress = { - address: string, - amount: string, + address: string; + amount: string; }; - export type TrezorOutputTypeChange = { - amount: string, + amount: string; addressParameters: { - addressType: number, - path: string, - stakingPath: string, - }, + addressType: number; + path: string; + stakingPath: string; + }; }; - -export type TrezorSignTransactionInputsType = Array; - +export type TrezorSignTransactionInputsType = Array< + TrezorSignTransactionInputType +>; export type TrezorSignTransactionOutputsType = Array< TrezorOutputTypeAddress | TrezorOutputTypeChange >; - -export type Witness = {| - path: BIP32Path, - witnessSignatureHex: string, -|}; - +export type Witness = { + path: BIP32Path; + witnessSignatureHex: string; +}; export type HardwareWalletTransportDeviceRequest = { - isTrezor: boolean, - devicePath: ?string, - reset?: boolean, + isTrezor: boolean; + devicePath: string | null | undefined; + reset?: boolean; }; - export type HardwareWalletTransportDeviceResponse = TransportDevice; - export type HardwareWalletExtendedPublicKeyRequest = { - path: string, - devicePath: ?string, - isTrezor: boolean, + path: string; + devicePath: string | null | undefined; + isTrezor: boolean; }; - export type HardwareWalletExtendedPublicKeyResponse = { - publicKeyHex: string, - chainCodeHex: string, - deviceId?: string, + publicKeyHex: string; + chainCodeHex: string; + deviceId?: string; }; - export type HardwareWalletCardanoAdaAppResponse = { - major: string, - minor: string, - patch: string, - deviceId: string, + major: string; + minor: string; + patch: string; + deviceId: string; }; - export type LedgerSignTransactionRequest = { - inputs: LedgerSignTransactionInputsType, - outputs: LedgerSignTransactionOutputsType, - fee: string, - ttl?: string, - networkId: number, - protocolMagic: number, - certificates: Array, - withdrawals: Array, - reset?: boolean, - devicePath: ?string, - validityIntervalStartStr?: ?string, // It is disabled for now - signingMode: string, - auxiliaryData: ?LedgerAuxiliaryDataType, - additionalWitnessPaths: Array, + inputs: LedgerSignTransactionInputsType; + outputs: LedgerSignTransactionOutputsType; + fee: string; + ttl?: string; + networkId: number; + protocolMagic: number; + certificates: Array; + withdrawals: Array; + reset?: boolean; + devicePath: string | null | undefined; + validityIntervalStartStr?: string | null | undefined; + // It is disabled for now + signingMode: string; + auxiliaryData: LedgerAuxiliaryDataType | null | undefined; + additionalWitnessPaths: Array; }; - export type TrezorSignTransactionRequest = { - inputs: TrezorSignTransactionInputsType, - outputs: TrezorSignTransactionOutputsType, - fee?: string, - ttl: string, - networkId: number, - protocolMagic: number, - certificates: Array, - withdrawals: Array, - reset?: boolean, - devicePath: string, - validityIntervalStartStr?: string, - signingMode: number, - auxiliaryData: ?TrezorAuxiliaryDataType, + inputs: TrezorSignTransactionInputsType; + outputs: TrezorSignTransactionOutputsType; + fee?: string; + ttl: string; + networkId: number; + protocolMagic: number; + certificates: Array; + withdrawals: Array; + reset?: boolean; + devicePath: string; + validityIntervalStartStr?: string; + signingMode: number; + auxiliaryData: TrezorAuxiliaryDataType | null | undefined; }; - export type LedgerSignTransactionResponse = { - txHashHex: string, - witnesses: Array, + txHashHex: string; + witnesses: Array; auxiliaryDataSupplement?: { - catalystRegistrationSignatureHex: string, - auxiliaryDataHashHex: string, - type: 'catalyst_registration', - }, + catalystRegistrationSignatureHex: string; + auxiliaryDataHashHex: string; + type: 'catalyst_registration'; + }; +}; +export type TrezorWitness = { + type: number; + pubKey: string; + signature: string; + chainCode: string | null | undefined; +}; +export type TrezorSerializedTxPayload = { + serializedTx: string; }; - -export type TrezorWitness = {| - type: number, - pubKey: string, - signature: string, - chainCode: ?string, -|}; - -export type TrezorSerializedTxPayload = {| - serializedTx: string, -|}; - export type TrezorRawTxPayload = { - witnesses: Array, + witnesses: Array; auxiliaryDataSupplement?: { - type: number, - auxiliaryDataHash: string, - catalystSignature: string, - }, + type: number; + auxiliaryDataHash: string; + catalystSignature: string; + }; }; - export type TrezorSignTransactionResponse = { - success: boolean, - payload: TrezorSerializedTxPayload | TrezorRawTxPayload, + success: boolean; + payload: TrezorSerializedTxPayload | TrezorRawTxPayload; }; - export type HardwareWalletConnectionRequest = { - disconnected: boolean, - deviceType: DeviceType, - deviceId: ?string, - deviceModel: string, - deviceName: string, - path: ?string, + disconnected: boolean; + deviceType: DeviceType; + deviceId: string | null | undefined; + deviceModel: string; + deviceName: string; + path: string | null | undefined; error?: { payload: { - code: string, - error: string, - }, - }, - eventType?: DeviceEvent, + code: string; + error: string; + }; + }; + eventType?: DeviceEvent; }; diff --git a/source/common/types/locales.types.ts b/source/common/types/locales.types.ts index b695c9be1e..bb3d214597 100644 --- a/source/common/types/locales.types.ts +++ b/source/common/types/locales.types.ts @@ -1,22 +1,16 @@ -// @flow export type Locale = 'en-US' | 'ja-JP'; - export const LOCALES: { - english: Locale, - japanese: Locale, + english: Locale; + japanese: Locale; } = { english: 'en-US', japanese: 'ja-JP', }; - export const humanizedDurationLanguages = { 'en-US': 'en', 'ja-JP': 'ja', }; - -export const momentLocales: { - [key: Locale]: string, -} = { +export const momentLocales: Record = { 'en-US': 'en-us', 'ja-JP': 'ja', }; diff --git a/source/common/types/logging.types.ts b/source/common/types/logging.types.ts index e374c5b8f3..7711c0eb8f 100644 --- a/source/common/types/logging.types.ts +++ b/source/common/types/logging.types.ts @@ -1,4 +1,3 @@ -// @flow import type { CardanoNodeState, CardanoStatus } from './cardano-node.types'; import type { SystemInfo } from '../../renderer/app/types/systemInfoTypes'; import type { CoreSystemInfo } from '../../renderer/app/types/coreSystemInfoTypes'; @@ -17,151 +16,137 @@ import type { Address } from '../../renderer/app/api/addresses/types'; import type { GetTransactionsRequest } from '../../renderer/app/api/transactions/types'; import type { HardwareWalletLocalData } from '../../renderer/app/api/utils/localStorage'; import type { AdaApiStakePool } from '../../renderer/app/api/staking/types'; - export type LoggingLevel = 'debug' | 'info' | 'error' | 'warn'; - export type Logger = { - debug: (string, ?Object) => void, - info: (string, ?Object) => void, - error: (string, ?Object) => void, - warn: (string, ?Object) => void, + debug: (arg0: string, arg1: Record | null | undefined) => void; + info: (arg0: string, arg1: Record | null | undefined) => void; + error: (arg0: string, arg1: Record | null | undefined) => void; + warn: (arg0: string, arg1: Record | null | undefined) => void; }; - export type FormatMessageContextParams = { - appName: string, - electronProcess: string, - level: string, - network: string, + appName: string; + electronProcess: string; + level: string; + network: string; }; - type Process = { - exe: string, - code: string | null, - signal: string, - err: string | null, + exe: string; + code: string | null; + signal: string; + err: string | null; }; - type Currency = { - code?: string, - decimalDigits?: number, - name?: string, - symbolNative: string, + code?: string; + decimalDigits?: number; + name?: string; + symbolNative: string; }; - type BodyData = { - response?: Currency[], - networkParameters?: GetNetworkParametersApiResponse, - networkInfo?: ?NetworkInfoResponse, - transactions?: ?(TransferFundsResponse[]), - addresses?: ?(Address[]), - parameters?: ?GetTransactionsRequest, - wallets?: ?AdaWallet, - legacyWallets?: ?LegacyAdaWallet, - hwLocalData?: ?HardwareWalletLocalData, - stakePools?: ?(AdaApiStakePool[]), - code?: string, - state?: CardanoNodeState, - status?: CardanoStatus, - name?: string, - processName?: string, - wallet?: Process, - node?: Process, - command?: string, - args?: string[], - shutdownMethod?: string, - cwd?: string, - apiPort?: number, - extraEnv?: ?(string[]), + response?: Currency[]; + networkParameters?: GetNetworkParametersApiResponse; + networkInfo?: NetworkInfoResponse | null | undefined; + transactions?: TransferFundsResponse[] | null | undefined; + addresses?: Address[] | null | undefined; + parameters?: GetTransactionsRequest | null | undefined; + wallets?: AdaWallet | null | undefined; + legacyWallets?: LegacyAdaWallet | null | undefined; + hwLocalData?: HardwareWalletLocalData | null | undefined; + stakePools?: AdaApiStakePool[] | null | undefined; + code?: string; + state?: CardanoNodeState; + status?: CardanoStatus; + name?: string; + processName?: string; + wallet?: Process; + node?: Process; + command?: string; + args?: string[]; + shutdownMethod?: string; + cwd?: string; + apiPort?: number; + extraEnv?: string[] | null | undefined; }; - export type ConstructMessageBodyParams = { - at: string, - env: string, - ns?: Array, - data?: BodyData, - app?: Array, - msg: string, - pid: number | string, - sev: string, - thread: number | string, + at: string; + env: string; + ns?: Array; + data?: BodyData; + app?: Array; + msg: string; + pid: number | string; + sev: string; + thread: number | string; }; - export type MessageBody = { - at: string, - env: string, - ns: Array, - data: BodyData, - app: Array, - msg: string, - pid: number | string, - sev: string, - thread: number | string, + at: string; + env: string; + ns: Array; + data: BodyData; + app: Array; + msg: string; + pid: number | string; + sev: string; + thread: number | string; }; - export type ElectronLoggerMessage = { - date: Date, - data: LogSystemInfoParams, - level: string, + date: Date; + data: LogSystemInfoParams; + level: string; }; - export type LogSystemInfoParams = { - cardanoNodeVersion: string, - cardanoWalletVersion: string, - cpu: Array, - daedalusVersion: string, - isBlankScreenFixActive: boolean, - network: string, - osName: string, - platformVersion: string, - ram: string, - startTime: string, + cardanoNodeVersion: string; + cardanoWalletVersion: string; + cpu: Array>; + daedalusVersion: string; + isBlankScreenFixActive: boolean; + network: string; + osName: string; + platformVersion: string; + ram: string; + startTime: string; }; - export type StateSnapshotLogParams = { - systemInfo: SystemInfo, - coreInfo: CoreSystemInfo, - cardanoNodeState: CardanoNodeState, - currentLocale: string, - isConnected: boolean, - isDev: boolean, - isMainnet: boolean, - isNodeInSync: boolean, - isNodeResponding: boolean, - isNodeSyncing: boolean, - isStaging: boolean, - isSynced: boolean, - isTestnet: boolean, - currentTime: string, - syncPercentage: string, - localTip: ?Object, - networkTip: ?Object, + systemInfo: SystemInfo; + coreInfo: CoreSystemInfo; + cardanoNodeState: CardanoNodeState; + currentLocale: string; + isConnected: boolean; + isDev: boolean; + isMainnet: boolean; + isNodeInSync: boolean; + isNodeResponding: boolean; + isNodeSyncing: boolean; + isStaging: boolean; + isSynced: boolean; + isTestnet: boolean; + currentTime: string; + syncPercentage: string; + localTip: Record | null | undefined; + networkTip: Record | null | undefined; }; - export type ExportedWalletData = { - id: string, - name: ?string, - hasPassword: boolean, + id: string; + name: string | null | undefined; + hasPassword: boolean; import?: { - status: WalletImportStatus, - error?: string, - }, + status: WalletImportStatus; + error?: string; + }; }; - export type RestoredWalletData = { - id: string, - name: string, - hasPassword: boolean, + id: string; + name: string; + hasPassword: boolean; }; - export type WalletMigrationReportData = { - exportedWalletsData: Array, - exportedWalletsCount: number, - exportErrors: string, - restoredWalletsData: Array, - restoredWalletsCount: number, + exportedWalletsData: Array; + exportedWalletsCount: number; + exportErrors: string; + restoredWalletsData: Array; + restoredWalletsCount: number; restorationErrors: Array<{ - error: string, - wallet: ExportedWalletData, - }>, - finalMigrationStatus: WalletMigrationStatus, + error: string; + wallet: ExportedWalletData; + }>; + finalMigrationStatus: WalletMigrationStatus; }; diff --git a/source/common/types/no-disk-space.types.ts b/source/common/types/no-disk-space.types.ts index 3ab600a052..0caf11f3da 100644 --- a/source/common/types/no-disk-space.types.ts +++ b/source/common/types/no-disk-space.types.ts @@ -1,12 +1,11 @@ -// @flow export type CheckDiskSpaceResponse = { - isNotEnoughDiskSpace: boolean, - diskSpaceRequired: string, - diskSpaceMissing: string, - diskSpaceRecommended: string, - diskSpaceAvailable: string, - hadNotEnoughSpaceLeft: boolean, - diskSpaceAvailableRaw: number, - diskTotalSpaceRaw: number, - isError: boolean, + isNotEnoughDiskSpace: boolean; + diskSpaceRequired: string; + diskSpaceMissing: string; + diskSpaceRecommended: string; + diskSpaceAvailable: string; + hadNotEnoughSpaceLeft: boolean; + diskSpaceAvailableRaw: number; + diskTotalSpaceRaw: number; + isError: boolean; }; diff --git a/source/common/types/number.types.ts b/source/common/types/number.types.ts index 07b7dba79b..e8b7c54581 100644 --- a/source/common/types/number.types.ts +++ b/source/common/types/number.types.ts @@ -1,13 +1,8 @@ -// @flow export type NumberFormat = { - groupSeparator: '.' | ',' | ' ', - decimalSeparator: '.' | ',' | ' ', + groupSeparator: '.' | ',' | ' '; + decimalSeparator: '.' | ',' | ' '; }; - -type NumbersFormat = { - [key: string]: NumberFormat, -}; - +type NumbersFormat = Record; export const NUMBER_FORMATS: NumbersFormat = { 'number-1': { groupSeparator: ',', @@ -22,8 +17,7 @@ export const NUMBER_FORMATS: NumbersFormat = { decimalSeparator: '.', }, }; - -export const DEFAULT_NUMBER_FORMAT: Object = { +export const DEFAULT_NUMBER_FORMAT: Record = { decimalSeparator: '.', groupSeparator: ',', groupSize: 3, diff --git a/source/common/types/paper-wallet-request.types.ts b/source/common/types/paper-wallet-request.types.ts index 8db7b95e22..ea273535ed 100644 --- a/source/common/types/paper-wallet-request.types.ts +++ b/source/common/types/paper-wallet-request.types.ts @@ -1,15 +1,14 @@ -// @flow export type GeneratePaperWalletParams = { - address: string, - filePath: string, - mnemonics: Array, - isMainnet: boolean, - buildLabel: string, - timestamp: string, + address: string; + filePath: string; + mnemonics: Array; + isMainnet: boolean; + buildLabel: string; + timestamp: string; messages: { - walletAddressLabel: string, - recoveryPhraseLabel: string, - infoTitle: string, - infoAuthor: string, - }, + walletAddressLabel: string; + recoveryPhraseLabel: string; + infoTitle: string; + infoAuthor: string; + }; }; diff --git a/source/common/types/save-qrCode.types.ts b/source/common/types/save-qrCode.types.ts index 48e075e00e..9b09c9e1a2 100644 --- a/source/common/types/save-qrCode.types.ts +++ b/source/common/types/save-qrCode.types.ts @@ -1,5 +1,4 @@ -// @flow export type GenerateQRCodeParams = { - address: string, - filePath: string, + address: string; + filePath: string; }; diff --git a/source/common/types/stateDirectoryPath.types.ts b/source/common/types/stateDirectoryPath.types.ts index e4e2377a0b..468bf98d70 100644 --- a/source/common/types/stateDirectoryPath.types.ts +++ b/source/common/types/stateDirectoryPath.types.ts @@ -1,4 +1,3 @@ -// @flow export type CheckStateDirectoryPathResponse = { - stateDirectoryPath: string, + stateDirectoryPath: string; }; diff --git a/source/common/types/support-requests.types.ts b/source/common/types/support-requests.types.ts index 8e415de268..b8d5552b86 100644 --- a/source/common/types/support-requests.types.ts +++ b/source/common/types/support-requests.types.ts @@ -1,13 +1,12 @@ -// @flow export type SupportRequests = { - frontendVersion: string, - backendVersion: string, - network: string, - build: string, - installerVersion: string, - os: string, - locale: string, - product: string, - supportLanguage: string, - productVersion: string, + frontendVersion: string; + backendVersion: string; + network: string; + build: string; + installerVersion: string; + os: string; + locale: string; + product: string; + supportLanguage: string; + productVersion: string; }; diff --git a/source/common/types/voting-pdf-request.types.ts b/source/common/types/voting-pdf-request.types.ts index ffe4f953b7..9526bf858f 100644 --- a/source/common/types/voting-pdf-request.types.ts +++ b/source/common/types/voting-pdf-request.types.ts @@ -1,14 +1,13 @@ -// @flow export type GenerateVotingPDFParams = { - title: string, - currentLocale: string, - creationDate: string, - qrCode: string, - walletNameLabel: string, - walletName: string, - isMainnet: boolean, - networkLabel: string, - networkName: string, - filePath: string, - author: string, + title: string; + currentLocale: string; + creationDate: string; + qrCode: string; + walletNameLabel: string; + walletName: string; + isMainnet: boolean; + networkLabel: string; + networkName: string; + filePath: string; + author: string; }; diff --git a/source/common/utils/environmentCheckers.ts b/source/common/utils/environmentCheckers.ts index aa62fe5f64..4965c5f5e7 100644 --- a/source/common/utils/environmentCheckers.ts +++ b/source/common/utils/environmentCheckers.ts @@ -1,4 +1,3 @@ -// @flow import { upperFirst } from 'lodash'; import { ALONZO_PURPLE, @@ -20,18 +19,19 @@ import { /* ================================================================== = Static checks and generators = ================================================================== */ - -export const evaluateNetwork = (network: ?string) => { +export const evaluateNetwork = (network: string | null | undefined) => { let currentNetwork = network || DEVELOPMENT; + if (network === MAINNET_FLIGHT) { currentNetwork = MAINNET; } + if (network === 'alonzo-purple') { currentNetwork = ALONZO_PURPLE; } + return currentNetwork; }; - export const getBuildLabel = ( build: string, network: string, @@ -45,7 +45,6 @@ export const getBuildLabel = ( buildLabel += ` ${upperFirst(currentNodeEnv)}`; return buildLabel; }; - export const checkIsDev = (currentNodeEnv: string) => currentNodeEnv === DEVELOPMENT; export const checkIsTest = (currentNodeEnv: string) => currentNodeEnv === TEST; diff --git a/source/common/utils/files.ts b/source/common/utils/files.ts index 0f117a82fc..216a661522 100644 --- a/source/common/utils/files.ts +++ b/source/common/utils/files.ts @@ -1,41 +1,35 @@ -// @flow import moment from 'moment'; import sanitizeFilename from 'sanitize-filename'; - export const defaultProps = { prefix: 'logs', extension: 'zip', isUTC: true, sanitize: true, }; - type Props = { - prefix?: string, - extension?: string, - date?: moment, - isUTC?: boolean, - sanitize?: boolean, + prefix?: string; + extension?: string; + date?: moment; + isUTC?: boolean; + sanitize?: boolean; }; - -export const generateFileNameWithTimestamp = (props?: Props = {}) => { - const { prefix, extension, isUTC, sanitize } = { - ...defaultProps, - ...props, - }; +export const generateFileNameWithTimestamp = (props: Props = {}) => { + const { prefix, extension, isUTC, sanitize } = { ...defaultProps, ...props }; let date = props.date || moment(); let z = ''; + if (isUTC === true) { if (!props || !Object.prototype.hasOwnProperty.call(props, 'date')) date = date.utc(); z = 'Z'; } + let fileName = `${prefix}-${`${date.format('YYYY-MM-DDTHHmmss.0SSS')}${z}`}${ extension ? '.' : '' }${extension}`; if (sanitize) fileName = sanitizeFilename(fileName); return fileName; }; - export const isFileNameWithTimestamp = ( prefix: string = 'logs', extension: string = 'zip' @@ -45,9 +39,7 @@ export const isFileNameWithTimestamp = ( `(${prefix}-)([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{6}.0[0-9]{3}Z)(.${extension})` ) ); - export const getPathSlash = (path: string) => path.indexOf('/') > -1 ? '/' : '\\'; - export const extractFileNameFromPath = (path: string) => path.substr(path.lastIndexOf(getPathSlash(path)) + 1); diff --git a/source/common/utils/helper.ts b/source/common/utils/helper.ts index 133291f1ad..8226b71671 100644 --- a/source/common/utils/helper.ts +++ b/source/common/utils/helper.ts @@ -1,3 +1,2 @@ -// @flow -export const toJS = (object: ?any): any => +export const toJS = (object: any | null | undefined): any => typeof object === 'object' ? JSON.parse(JSON.stringify(object)) : object; diff --git a/source/common/utils/logging.ts b/source/common/utils/logging.ts index 19e9007886..2d11eb8b11 100644 --- a/source/common/utils/logging.ts +++ b/source/common/utils/logging.ts @@ -1,4 +1,3 @@ -// @flow import omitDeep from 'omit-deep-lodash'; import type { FormatMessageContextParams, @@ -6,13 +5,11 @@ import type { MessageBody, ElectronLoggerMessage, } from '../types/logging.types'; - const DEFAULT_MESSAGE_BODY = { ns: ['daedalus'], data: {}, app: ['daedalus'], }; - const isProd = process.env.NODE_ENV === 'production'; const isSilentMode = process.env.NODE_ENV === 'silence'; @@ -21,7 +18,9 @@ const stringifyMessageBody = (messageBody: MessageBody): string => { return JSON.stringify(messageBody, null, spacing); }; -export const filterLogData = (data: Object): Object => { +export const filterLogData = ( + data: Record +): Record => { const sensitiveData = [ 'spendingPassword', 'oldPassword', @@ -42,57 +41,65 @@ export const filterLogData = (data: Object): Object => { ]; return omitDeep(data, ...sensitiveData); }; - export const stringifyData = (data: any) => JSON.stringify(data, null, 2); - export const stringifyError = (error: any) => JSON.stringify(error, Object.getOwnPropertyNames(error), 2); - export const formatContext = (context: FormatMessageContextParams): string => { const { appName, electronProcess, level, network } = context; return `[${appName}.*${network}*:${level}:${electronProcess}]`; }; - export const formatMessageTime = (date: Date): string => { const [year, time] = date.toISOString().split('T'); return `[${year}T${time.slice(0, -1)}Z]`; }; - export const constructMessageBody = ( bodyData: ConstructMessageBodyParams ): MessageBody => { let messageBody = { ...DEFAULT_MESSAGE_BODY, ...bodyData }; + if (typeof messageBody.data === 'string') { - messageBody = { ...messageBody, data: { response: messageBody.data } }; + messageBody = { + ...messageBody, + data: { + response: messageBody.data, + }, + }; } + const { at, env, ns, data, app, msg, pid, sev, thread } = messageBody; - return { at, env, ns, data, app, msg, pid, sev, thread }; + return { + at, + env, + ns, + data, + app, + msg, + pid, + sev, + thread, + }; }; - export const formatMessage = (loggerMessage: ElectronLoggerMessage): string => { const at = loggerMessage.date.toISOString(); const [context, messageData] = loggerMessage.data; const { level } = loggerMessage; const { message: msg, environmentData } = messageData; const { network, os, platformVersion, version } = environmentData; - const messageBodyParams: ConstructMessageBodyParams = { at, env: `${network}:${os}:${platformVersion}`, ns: ['daedalus', `v${version}`, `*${network}*`], - ...(!!messageData.data && { data: messageData.data }), + ...(!!messageData.data && { + data: messageData.data, + }), msg, pid: '', sev: level, thread: '', }; - const messageBody: MessageBody = constructMessageBody(messageBodyParams); - if (isSilentMode) return ''; - if (isProd) return stringifyMessageBody(messageBody); - const messageTime: string = formatMessageTime(loggerMessage.date); return `${messageTime} ${context} ${stringifyMessageBody(messageBody)}`; }; diff --git a/source/common/utils/reporting.ts b/source/common/utils/reporting.ts index cc45c9c4c5..438b718e25 100644 --- a/source/common/utils/reporting.ts +++ b/source/common/utils/reporting.ts @@ -1,13 +1,9 @@ -// @flow - import type { SupportRequests } from '../types/support-requests.types'; import type { Environment } from '../types/environment.types'; - const localesFillForm = { 'en-US': 'English', 'ja-JP': 'Japanese', }; - export const generateSupportRequestLink = ( baseUrl: string, environmentData: Environment, @@ -22,7 +18,6 @@ export const generateSupportRequestLink = ( os, buildNumber, } = environmentData; - const supportRequestData: SupportRequests = { frontendVersion: version, backendVersion: apiVersion, @@ -35,7 +30,6 @@ export const generateSupportRequestLink = ( supportLanguage: localesFillForm[locale], productVersion: `Daedalus ${version}+Cardano ${buildNumber}`, }; - return `${baseUrl}?${Object.entries(supportRequestData) .map( ([key, val]: [string, any]) => diff --git a/source/main/cardano/CardanoNode.ts b/source/main/cardano/CardanoNode.ts index 3d614ac5bb..ff3e53db71 100644 --- a/source/main/cardano/CardanoNode.ts +++ b/source/main/cardano/CardanoNode.ts @@ -1,4 +1,3 @@ -// @flow import Store from 'electron-store'; import { spawn, exec } from 'child_process'; import type { ChildProcess } from 'child_process'; @@ -32,54 +31,61 @@ import type { NodeConfig } from '../config'; import type { Logger } from '../../common/types/logging.types'; /* eslint-disable consistent-return */ - type Actions = { - spawn: typeof spawn, - exec: typeof exec, - readFileSync: (path: string) => Buffer, - createWriteStream: (path: string, options?: Object) => WriteStream, - broadcastTlsConfig: (config: ?TlsConfig) => void, - broadcastStateChange: (state: CardanoNodeState) => void, + spawn: typeof spawn; + exec: typeof exec; + readFileSync: (path: string) => Buffer; + createWriteStream: ( + path: string, + options?: Record + ) => WriteStream; + broadcastTlsConfig: (config: TlsConfig | null | undefined) => void; + broadcastStateChange: (state: CardanoNodeState) => void; }; - type StateTransitions = { - onStarting: () => void, - onRunning: () => void, - onStopping: () => void, - onStopped: () => void, - onUpdating: () => void, - onUpdated: () => void, - onCrashed: (code: number, signal: string) => void, - onError: (code: number, signal: string) => void, - onUnrecoverable: () => void, + onStarting: () => void; + onRunning: () => void; + onStopping: () => void; + onStopped: () => void; + onUpdating: () => void; + onUpdated: () => void; + onCrashed: (code: number, signal: string) => void; + onError: (code: number, signal: string) => void; + onUnrecoverable: () => void; }; - type CardanoNodeIpcMessage = { - Started?: Array, - ReplyPort?: number, - FInjects?: FaultInjectionIpcResponse, + Started?: Array; + ReplyPort?: number; + FInjects?: FaultInjectionIpcResponse; }; - export type CardanoNodeConfig = { - stateDir: string, // Path to the state directory - nodeImplementation: CardanoNodeImplementations, - nodeConfig: NodeConfig, - logFilePath: string, // Log file path for cardano-sl - tlsPath: string, // Path to cardano-node TLS folder - startupTimeout: number, // Milliseconds to wait for cardano-node to startup - startupMaxRetries: number, // Maximum number of retries for re-starting then ode - shutdownTimeout: number, // Milliseconds to wait for cardano-node to gracefully shutdown - killTimeout: number, // Milliseconds to wait for cardano-node to be killed - updateTimeout: number, // Milliseconds to wait for cardano-node to update itself - cluster: string, - configPath: string, - syncTolerance: string, - cliBin: string, // Path to cardano-cli executable - isStaging: boolean, - metadataUrl?: string, - rtsFlags: Array, + stateDir: string; + // Path to the state directory + nodeImplementation: CardanoNodeImplementations; + nodeConfig: NodeConfig; + logFilePath: string; + // Log file path for cardano-sl + tlsPath: string; + // Path to cardano-node TLS folder + startupTimeout: number; + // Milliseconds to wait for cardano-node to startup + startupMaxRetries: number; + // Maximum number of retries for re-starting then ode + shutdownTimeout: number; + // Milliseconds to wait for cardano-node to gracefully shutdown + killTimeout: number; + // Milliseconds to wait for cardano-node to be killed + updateTimeout: number; + // Milliseconds to wait for cardano-node to update itself + cluster: string; + configPath: string; + syncTolerance: string; + cliBin: string; + // Path to cardano-cli executable + isStaging: boolean; + metadataUrl?: string; + rtsFlags: Array; }; - const CARDANO_UPDATE_EXIT_CODE = 20; // grab the current network on which Daedalus is running const network = String(environment.network); @@ -96,7 +102,6 @@ const { CARDANO_PROCESS_NAME } = deriveProcessNames( ); // create store for persisting CardanoNode and Daedalus PID's in fs const store = new Store(); - export class CardanoNode { /** * The config used to spawn cardano-node @@ -108,7 +113,7 @@ export class CardanoNode { * The managed cardano-node child process * @private */ - _node: ?Launcher; + _node: Launcher | null | undefined; /** * The ipc channel used for broadcasting messages to the outside world @@ -145,7 +150,7 @@ export class CardanoNode { * on each startup and is broadcasted over ipc channel * @private */ - _tlsConfig: ?TlsConfig = null; + _tlsConfig: TlsConfig | null | undefined = null; /** * The current state of the node, used for making decisions @@ -163,7 +168,7 @@ export class CardanoNode { * @type {CardanoStatus} * @private */ - _status: ?CardanoStatus = null; + _status: CardanoStatus | null | undefined = null; /** * Number of retries to startup the node (without ever reaching running state) @@ -205,7 +210,7 @@ export class CardanoNode { * Getter which returns the PID of the child process of cardano-node * @returns {TlsConfig} // I think this returns a number... */ - get pid(): ?number { + get pid(): number | null | undefined { return get(this, '_node.pid', null); } @@ -221,7 +226,7 @@ export class CardanoNode { * Getter for the cached status of the node. * @returns {CardanoStatus} */ - get status(): ?CardanoStatus { + get status(): CardanoStatus | null | undefined { return Object.assign({}, this._status, { cardanoNodePID: get(this, '_node.pid', 0), cardanoWalletPID: get(this, '_node.wpid', 0), @@ -267,7 +272,6 @@ export class CardanoNode { */ start = async (isForced: boolean = false): Promise => { const { _log } = this; - // Guards const nodeCanBeStarted = await this._canBeStarted(); @@ -275,20 +279,27 @@ export class CardanoNode { _log.error('CardanoNode#start: Cannot be started', { startupTries: this._startupTries, }); + return Promise.reject(new Error('CardanoNode: Cannot be started')); } + if (this._isUnrecoverable(this._config) && !isForced) { _log.error('CardanoNode#start: Too many startup retries', { startupTries: this._startupTries, }); + return Promise.reject(new Error('CardanoNode: Too many startup retries')); } this._startupTries++; + this._changeToState(CardanoNodeStates.STARTING); + _log.info( `CardanoNode#start: trying to start cardano-node for the ${this._startupTries} time`, - { startupTries: this._startupTries } + { + startupTries: this._startupTries, + } ); return new Promise(async (resolve, reject) => { @@ -306,7 +317,6 @@ export class CardanoNode { } ); this._cardanoNodeLogFile = nodeLogFile; - const walletLogFile = rfs( (time) => { // The module works by writing to the one file name before it is rotated out. @@ -331,18 +341,29 @@ export class CardanoNode { processName: CARDANO_PROCESS_NAME, onStop: this._ensureProcessIsNotRunning, }); + _log.info( `CardanoNode#start: cardano-node child process spawned with PID ${node.pid}`, - { pid: node.pid } + { + pid: node.pid, + } ); + this._node = node; - this._handleCardanoNodeMessage({ ReplyPort: replyPort }); + + this._handleCardanoNodeMessage({ + ReplyPort: replyPort, + }); + resolve(); } catch (error) { _log.error( 'CardanoNode#start: Unable to initialize cardano-launcher', - { error } + { + error, + } ); + const { code, signal } = error || {}; await this._handleCardanoNodeError(code, signal); reject( @@ -359,7 +380,6 @@ export class CardanoNode { nodeLogFile, walletLogFile, }); - this._node = node; _log.info('Starting cardano-node now...'); @@ -369,39 +389,48 @@ export class CardanoNode { }); // await promisedCondition(() => node.connected, startupTimeout); - node .start() .then((api) => { const processes: { - wallet: ChildProcess, - node: ChildProcess, + wallet: ChildProcess; + node: ChildProcess; } = { wallet: node.walletService.getProcess(), node: node.nodeService.getProcess(), }; - // Setup event handling node.walletBackend.events.on('exit', (exitStatus) => { - _log.info('CardanoNode#exit', { exitStatus }); + _log.info('CardanoNode#exit', { + exitStatus, + }); + const { code, signal } = exitStatus.wallet; + this._handleCardanoNodeExit(code, signal); }); - node.pid = processes.node.pid; node.wpid = processes.wallet.pid; node.connected = true; // TODO: use processes.wallet.connected here + _log.info( `CardanoNode#start: cardano-node child process spawned with PID ${processes.node.pid}`, - { pid: processes.node.pid } + { + pid: processes.node.pid, + } ); + _log.info( `CardanoNode#start: cardano-wallet child process spawned with PID ${processes.wallet.pid}`, - { pid: processes.wallet.pid } + { + pid: processes.wallet.pid, + } ); + this._handleCardanoNodeMessage({ ReplyPort: api.requestParams.port, }); + resolve(); }) .catch(async (exitStatus) => { @@ -411,6 +440,7 @@ export class CardanoNode { exitStatus, } ); + const { code, signal } = exitStatus.wallet || {}; await this._handleCardanoNodeError(code, signal); reject( @@ -426,6 +456,7 @@ export class CardanoNode { error, } ); + const { code, signal } = error || {}; await this._handleCardanoNodeError(code, signal); reject( @@ -447,23 +478,32 @@ export class CardanoNode { */ async stop(): Promise { const { _node, _log, _config } = this; + if (await this._isDead()) { _log.info('CardanoNode#stop: process is not running anymore'); + return Promise.resolve(); } + _log.info('CardanoNode#stop: stopping cardano-node process'); + try { this._changeToState(CardanoNodeStates.STOPPING); + if (_node) await _node.stop(_config.shutdownTimeout / 1000); await this._waitForNodeProcessToExit(_config.shutdownTimeout); await this._storeProcessStates(); + this._changeToState(CardanoNodeStates.STOPPED); + this._reset(); + return Promise.resolve(); } catch (error) { _log.error('CardanoNode#stop: cardano-node did not stop correctly', { error, }); + try { await this.kill(); } catch (killError) { @@ -483,20 +523,29 @@ export class CardanoNode { return new Promise(async (resolve, reject) => { if (await this._isDead()) { _log.info('CardanoNode#kill: process is already dead'); + return Promise.resolve(); } + try { _log.info('CardanoNode#kill: killing cardano-node process'); + if (_node) _node.kill(); await this._waitForCardanoToExitOrKillIt(); await this._storeProcessStates(); + this._changeToState(CardanoNodeStates.STOPPED); + this._reset(); + resolve(); } catch (_) { _log.info('CardanoNode#kill: could not kill cardano-node'); + await this._storeProcessStates(); + this._reset(); + reject(new Error('Could not kill cardano-node.')); } }); @@ -511,30 +560,39 @@ export class CardanoNode { */ async restart(isForced: boolean = false): Promise { const { _log } = this; + try { // Stop cardano nicely if it is still awake if (this._isConnected()) { _log.info('CardanoNode#restart: stopping current node'); + await this.stop(); } + _log.info('CardanoNode#restart: restarting node with previous config', { isForced, }); + await this._waitForCardanoToExitOrKillIt(); + if (this._exitOnStop) { _log.info('Daedalus:safeExit: exiting Daedalus with code 0', { code: 0, }); + safeExitWithCode(0); } else { await this.start(isForced); } } catch (error) { _log.error('CardanoNode#restart: Could not restart cardano-node', error); + if (this._state !== CardanoNodeStates.UNRECOVERABLE) { const { code, signal } = error || {}; + this._changeToState(CardanoNodeStates.ERRORED, code, signal); } + return Promise.reject(error); } } @@ -555,8 +613,11 @@ export class CardanoNode { */ async expectNodeUpdate(): Promise { const { _log, _config } = this; + this._changeToState(CardanoNodeStates.UPDATING); + _log.info('CardanoNode: waiting for node to apply update'); + try { await promisedCondition( () => this._state === CardanoNodeStates.UPDATED, @@ -565,6 +626,7 @@ export class CardanoNode { await this._waitForNodeProcessToExit(_config.updateTimeout); } catch (error) { _log.info('CardanoNode: did not apply update as expected, killing it...'); + return this.kill(); } } @@ -583,10 +645,15 @@ export class CardanoNode { if (!this._node) return; const fault = request[0]; const isEnabled = request[1]; - this._node.send({ SetFInject: request }); + + this._node.send({ + SetFInject: request, + }); + try { return await promisedCondition(() => { const hasFault = this._injectedFaults.includes(fault); + return isEnabled ? hasFault : !hasFault; }); } catch (error) { @@ -596,7 +663,7 @@ export class CardanoNode { } }; - saveStatus(status: ?CardanoStatus) { + saveStatus(status: CardanoStatus | null | undefined) { this._status = status; } @@ -606,8 +673,8 @@ export class CardanoNode { exitOnStop = () => { this._exitOnStop = true; }; - // ================================= PRIVATE =================================== + /** * Handles node ipc messages sent by the cardano-node process. * Updates the tls config where possible and broadcasts it to @@ -620,7 +687,11 @@ export class CardanoNode { */ _handleCardanoNodeMessage = (msg: CardanoNodeIpcMessage) => { if (msg == null) return; - this._log.info('CardanoNode: received message', { msg }); + + this._log.info('CardanoNode: received message', { + msg, + }); + if (msg.ReplyPort != null) this._handleCardanoReplyPortMessage(msg.ReplyPort); if (msg.FInjects != null) @@ -642,9 +713,9 @@ export class CardanoNode { const { tlsPath } = this._config; this._tlsConfig = environment.isSelfnode ? { - ca: ('': any), - key: ('': any), - cert: ('': any), + ca: '' as any, + key: '' as any, + cert: '' as any, hostname: 'localhost', port, } @@ -658,6 +729,7 @@ export class CardanoNode { if (this._state === CardanoNodeStates.STARTING) { this._changeToState(CardanoNodeStates.RUNNING); + this.broadcastTlsConfig(); // Reset the startup tries when we managed to get the node running this._startupTries = 0; @@ -675,41 +747,58 @@ export class CardanoNode { this._log.info('CardanoNode: the following injected faults are active', { injectedFaults: response, }); + this._injectedFaults = response; }; - _handleCardanoNodeError = async (code: number, signal: string) => { const { _log, _config } = this; - _log.error('CardanoNode: error', { code, signal }); + + _log.error('CardanoNode: error', { + code, + signal, + }); + if (this._isUnrecoverable(_config)) { this._changeToState(CardanoNodeStates.UNRECOVERABLE); } else { this._changeToState(CardanoNodeStates.ERRORED); + this._transitionListeners.onError(code, signal); + try { _log.info('CardanoNode: restarting'); + await this.restart(); } catch (error) { _log.error('CardanoNode: cannot be restarted', error); } } }; - _handleCardanoNodeExit = async (code: number, signal: string) => { const { _log, _config, _node } = this; - _log.info('CardanoNode exited', { code, signal }); + + _log.info('CardanoNode exited', { + code, + signal, + }); + // We don't know yet what happened but we can be sure cardano-node is exiting if (this._state === CardanoNodeStates.RUNNING) { this._changeToState(CardanoNodeStates.EXITING); } + try { // Before proceeding with exit procedures, wait until the node is really dead. await this._waitForNodeProcessToExit(_config.shutdownTimeout); } catch (_) { _log.error( `CardanoNode: sent exit code ${code} but was still running after ${_config.shutdownTimeout}ms. Killing it now.`, - { code, shutdownTimeout: _config.shutdownTimeout } + { + code, + shutdownTimeout: _config.shutdownTimeout, + } ); + try { if (_node) await this._ensureProcessIsNotRunning( @@ -720,7 +809,12 @@ export class CardanoNode { _log.info('CardanoNode: did not exit correctly'); } } - _log.info('CardanoNode: process really exited', { code, signal }); + + _log.info('CardanoNode: process really exited', { + code, + signal, + }); + // Handle various exit scenarios if (this._state === CardanoNodeStates.STOPPING) { this._changeToState(CardanoNodeStates.STOPPED); @@ -734,10 +828,11 @@ export class CardanoNode { } else { this._changeToState(CardanoNodeStates.CRASHED, code, signal); } + await this._storeProcessStates(); + this._reset(); }; - _reset = () => { if (this._cardanoNodeLogFile) this._cardanoNodeLogFile.end(); if (this._cardanoWalletLogFile) this._cardanoWalletLogFile.end(); @@ -747,28 +842,43 @@ export class CardanoNode { _changeToState(state: CardanoNodeState, ...args: Array) { const { _log, _transitionListeners } = this; - _log.info(`CardanoNode: transitions to <${state}>`, { state }); + + _log.info(`CardanoNode: transitions to <${state}>`, { + state, + }); + this._state = state; + this._actions.broadcastStateChange(state); + switch (state) { case CardanoNodeStates.STARTING: return _transitionListeners.onStarting(); + case CardanoNodeStates.RUNNING: return _transitionListeners.onRunning(); + case CardanoNodeStates.STOPPING: return _transitionListeners.onStopping(); + case CardanoNodeStates.STOPPED: return _transitionListeners.onStopped(); + case CardanoNodeStates.UPDATING: return _transitionListeners.onUpdating(); + case CardanoNodeStates.UPDATED: return _transitionListeners.onUpdated(); + case CardanoNodeStates.CRASHED: return _transitionListeners.onCrashed(...args); + case CardanoNodeStates.ERRORED: return _transitionListeners.onError(...args); + case CardanoNodeStates.UNRECOVERABLE: return _transitionListeners.onUnrecoverable(); + default: } } @@ -798,6 +908,7 @@ export class CardanoNode { if (this._isConnected() || this.state === CardanoNodeStates.STARTING) { return false; } + try { await this._ensurePreviousCardanoNodeIsNotRunning(); return true; @@ -805,101 +916,133 @@ export class CardanoNode { return false; } }; - _ensureProcessIsNotRunning = async (pid: number, name: string) => { const { _log } = this; + _log.info( `CardanoNode: checking if ${name} process (PID: ${pid}) is still running`, - { name, pid } + { + name, + pid, + } ); + if (await this._isProcessRunning(pid, name)) { _log.info(`CardanoNode: killing ${name} process (PID: ${pid})`, { name, pid, }); + try { await this._killProcessWithName(pid, name); return Promise.resolve(); } catch (error) { _log.error( `CardanoNode: could not kill ${name} process (PID: ${pid})`, - { name, pid, error } + { + name, + pid, + error, + } ); + return Promise.reject(); } } + this._log.info(`CardanoNode: no ${name} process (PID: ${pid}) is running`, { name, pid, }); }; - _ensureCurrentCardanoNodeIsNotRunning = async (): Promise => { const { _log, _node } = this; + _log.info( 'CardanoNode: checking if current cardano-node process is still running' ); + if (_node == null) { return Promise.resolve(); } + return this._ensureProcessIsNotRunning(_node.pid, CARDANO_PROCESS_NAME); }; - _ensurePreviousCardanoNodeIsNotRunning = async (): Promise => { const { _log } = this; - const previousPID: ?number = await this._retrieveData(PREVIOUS_CARDANO_PID); + const previousPID: number | null | undefined = await this._retrieveData( + PREVIOUS_CARDANO_PID + ); + _log.info( 'CardanoNode: checking if previous cardano-node process is still running', - { previousPID } + { + previousPID, + } ); + if (previousPID == null) { return Promise.resolve(); } + return this._ensureProcessIsNotRunning(previousPID, CARDANO_PROCESS_NAME); }; - _isProcessRunning = async ( previousPID: number, processName: string ): Promise => { const { _log } = this; + try { const previousProcess = await getProcess(previousPID, processName); + if (!previousProcess) { _log.info( `CardanoNode: No previous ${processName} process is running anymore`, - { processName } + { + processName, + } ); + return false; } + _log.info(`CardanoNode: previous ${processName} process found`, { processName, previousProcess, }); + return true; } catch (error) { - _log.error('CardanoNode: _isProcessRunning error', { error }); + _log.error('CardanoNode: _isProcessRunning error', { + error, + }); + return false; } }; - // kills running process which did not shut down properly between sessions _killProcessWithName = async (pid: number, name: string): Promise => { const { _config } = this; + try { if (!environment.isWindows) { this._log.info(`CardanoNode: using "process.kill(${pid})" to kill it`, { pid, }); + process.kill(pid); } else { // https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/taskkill const windowsKillCmd = `taskkill /pid ${pid} /t /f`; + this._log.info('CardanoNode (Windows): using kill command to kill it', { windowsKillCmd, }); + this._actions.exec(windowsKillCmd); } + await promisedCondition( async () => (await this._isProcessRunning(pid, name)) === false, _config.killTimeout @@ -907,23 +1050,37 @@ export class CardanoNode { this._log.info( `CardanoNode: successfully killed ${name} process (PID: ${pid})`, - { name, pid } + { + name, + pid, + } ); + return Promise.resolve(); } catch (error) { this._log.error( `CardanoNode: _killProcessWithName returned an error attempting to kill ${name} process (PID: ${pid})`, - { processName: name, pid, error } + { + processName: name, + pid, + error, + } ); + return Promise.reject(error); } }; async _storeProcessStates() { const { _log } = this; + if (this._node != null) { const { pid } = this._node; - _log.info('CardanoNode: storing last cardano-node PID', { pid }); + + _log.info('CardanoNode: storing last cardano-node PID', { + pid, + }); + await this._storeData(PREVIOUS_CARDANO_PID, pid); } } @@ -934,58 +1091,61 @@ export class CardanoNode { try { // saves current port/pid in file system store.set(identifier, data); + this._log.info(`CardanoNode: ${identifier} stored successfully`); + resolve(); } catch (error) { this._log.error(`CardanoNode: failed to store ${identifier}`, { error, }); + reject(error); } }); - // retrieves the last known port/pid on which cardano-node or Daedalus was running - _retrieveData = (identifier: string): Promise => + _retrieveData = (identifier: string): Promise => new Promise((resolve, reject) => { try { // retrieves previous port/pid from file system - const data: ?number = store.get(identifier); + const data: number | null | undefined = store.get(identifier); if (!data) { this._log.info(`CardanoNode: get ${identifier} returned null`); + resolve(null); } this._log.info(`CardanoNode: get ${identifier} success`, { [`${identifier}`]: data, }); + resolve(toInteger(data)); } catch (error) { - this._log.error(`CardanoNode: get ${identifier} failed`, { error }); + this._log.error(`CardanoNode: get ${identifier} failed`, { + error, + }); + reject(error); } }); - _isNodeProcessStillRunning = async (): Promise => this._node != null && this._isProcessRunning(this._node.pid, CARDANO_PROCESS_NAME); - _isNodeProcessNotRunningAnymore = async () => (await this._isNodeProcessStillRunning()) === false; - _waitForNodeProcessToExit = async (timeout: number) => promisedCondition(this._isNodeProcessNotRunningAnymore, timeout); - _waitForCardanoToExitOrKillIt = async () => { const { _config } = this; if (this._isNodeProcessNotRunningAnymore()) return Promise.resolve(); + try { await this._waitForNodeProcessToExit(_config.shutdownTimeout); } catch (_) { await this._ensureCurrentCardanoNodeIsNotRunning(); } }; - _isUnrecoverable = (config: CardanoNodeConfig) => this._startupTries >= config.startupMaxRetries; } diff --git a/source/main/cardano/CardanoSelfnodeLauncher.ts b/source/main/cardano/CardanoSelfnodeLauncher.ts index 7dcd84e3df..c7b70af976 100644 --- a/source/main/cardano/CardanoSelfnodeLauncher.ts +++ b/source/main/cardano/CardanoSelfnodeLauncher.ts @@ -1,4 +1,3 @@ -// @flow import { spawn } from 'child_process'; import find from 'find-process'; import tcpPortUsed from 'tcp-port-used'; @@ -7,27 +6,25 @@ import type { Process } from '../utils/processes'; import type { CardanoNodeProcessNames } from '../../common/types/cardano-node.types'; import { environment } from '../environment'; import { logger } from '../utils/logging'; - export type SelfnodeOptions = { - selfnodeBin: string, - mockTokenMetadataServerBin: string, - processName: CardanoNodeProcessNames, - onStop: Function, + selfnodeBin: string; + mockTokenMetadataServerBin: string; + processName: CardanoNodeProcessNames; + onStop: (...args: Array) => any; }; - export type Selfnode = { - pid: number, - wpid: number, - stop: Function, - connected: boolean, + pid: number; + wpid: number; + stop: (...args: Array) => any; + connected: boolean; }; - let mockTokenMetadataServer = null; const platform = String(environment.platform); - const CARDANO_WALLET_PORT = 8088; const CARDANO_WALLET_START_TIMEOUT = 60 * 1000; // 60 seconds | unit: milliseconds + const CARDANO_WALLET_START_CHECK_INTERVAL = 500; // 500 ms | unit: milliseconds + const SHELLEY_TEST_DATA = '../../utils/cardano/selfnode'; const TOKEN_METADATA_REGISTRY = './utils/cardano/selfnode/token-metadata.json'; const TOKEN_METADATA_SERVER_PORT = 65432; @@ -36,12 +33,11 @@ const TOKEN_METADATA_SERVER_PROCESS_NAME = platform === 'win32' ? 'mock-token-metadata-server.exe' : 'mock-token-metadata-server'; - export async function CardanoSelfnodeLauncher( selfnodeOptions: SelfnodeOptions ): Promise<{ - node: Selfnode, - replyPort: number, + node: Selfnode; + replyPort: number; }> { return new Promise(async (resolve, reject) => { const { @@ -54,6 +50,7 @@ export async function CardanoSelfnodeLauncher( const processList: Array = await find('port', CARDANO_WALLET_PORT); const isSelfnodeRunning = processList.length && processList[0].name === processName; + if (isSelfnodeRunning) { logger.info('Cardano-node is already running...', { selfnodeBin, @@ -68,7 +65,10 @@ export async function CardanoSelfnodeLauncher( onStop, connected: true, }); - resolve({ node, replyPort: CARDANO_WALLET_PORT }); + resolve({ + node, + replyPort: CARDANO_WALLET_PORT, + }); } else { logger.info('Starting cardano-node now...', { selfnodeBin, @@ -83,10 +83,12 @@ export async function CardanoSelfnodeLauncher( SHELLEY_TEST_DATA, TOKEN_METADATA_SERVER, }, - detached: true, // allows Daedalus to exit independently of selfnode (1/3) + detached: true, + // allows Daedalus to exit independently of selfnode (1/3) stdio: 'ignore', // allows Daedalus to exit independently of selfnode (2/3) }); nodeProcess.unref(); // allows Daedalus to exit independently of selfnode (3/3) + const node: Selfnode = setupSelfnode({ processName, nodeProcess, @@ -101,7 +103,10 @@ export async function CardanoSelfnodeLauncher( ) .then(() => { node.connected = true; - resolve({ node, replyPort: CARDANO_WALLET_PORT }); + resolve({ + node, + replyPort: CARDANO_WALLET_PORT, + }); }) .catch((exitStatus) => { reject(exitStatus); @@ -116,10 +121,10 @@ const setupSelfnode = ({ onStop, connected, }: { - processName: CardanoNodeProcessNames, - nodeProcess: ChildProcess | Process, - onStop: Function, - connected: boolean, + processName: CardanoNodeProcessNames; + nodeProcess: ChildProcess | Process; + onStop: (...args: Array) => any; + connected: boolean; }): Selfnode => Object.assign({}, nodeProcess, { wpid: nodeProcess.pid, @@ -130,6 +135,7 @@ const setupSelfnode = ({ TOKEN_METADATA_SERVER_PROCESS_NAME ); } + await onStop(nodeProcess.pid, processName); }, connected, @@ -145,6 +151,7 @@ const setupMockTokenMetadataServer = async ( const isMockTokenMetadataServerRunning = processList.length && processList[0].name === TOKEN_METADATA_SERVER_PROCESS_NAME; + if (isMockTokenMetadataServerRunning) { logger.info('Mock-token-metadata-server is already running...', { mockTokenMetadataServerBin, diff --git a/source/main/cardano/CardanoWalletLauncher.ts b/source/main/cardano/CardanoWalletLauncher.ts index 1498b19810..a2847633f5 100644 --- a/source/main/cardano/CardanoWalletLauncher.ts +++ b/source/main/cardano/CardanoWalletLauncher.ts @@ -1,4 +1,3 @@ -// @flow import { merge } from 'lodash'; import path from 'path'; import * as fs from 'fs-extra'; @@ -22,29 +21,28 @@ import { CardanoNodeImplementationOptions } from '../../common/types/cardano-nod import { createSelfnodeConfig } from './utils'; import { logger } from '../utils/logging'; import type { CardanoNodeImplementations } from '../../common/types/cardano-node.types'; - export type WalletOptions = { - nodeImplementation: CardanoNodeImplementations, - nodeConfig: NodeConfig, - cluster: string, - stateDir: string, - tlsPath: string, - configPath: string, - syncTolerance: string, - nodeLogFile: WriteStream, - walletLogFile: WriteStream, - cliBin: string, - isStaging: boolean, - metadataUrl?: string, - rtsFlags: Array, + nodeImplementation: CardanoNodeImplementations; + nodeConfig: NodeConfig; + cluster: string; + stateDir: string; + tlsPath: string; + configPath: string; + syncTolerance: string; + nodeLogFile: WriteStream; + walletLogFile: WriteStream; + cliBin: string; + isStaging: boolean; + metadataUrl?: string; + rtsFlags: Array; }; - export async function CardanoWalletLauncher( walletOptions: WalletOptions ): Launcher { const { nodeImplementation, - nodeConfig, // For cardano-node / byron only! + nodeConfig, + // For cardano-node / byron only! cluster, stateDir, tlsPath, @@ -59,7 +57,6 @@ export async function CardanoWalletLauncher( } = walletOptions; // TODO: Update launcher config to pass number const syncToleranceSeconds = parseInt(syncTolerance.replace('s', ''), 10); - // Shared launcher config (node implementations agnostic) const launcherConfig = { networkName: cluster, @@ -78,16 +75,15 @@ export async function CardanoWalletLauncher( }, installSignalHandlers: false, }; - // TLS configuration used only for cardano-node const tlsConfiguration = { caCert: path.join(tlsPath, 'server/ca.crt'), svCert: path.join(tlsPath, 'server/server.crt'), svKey: path.join(tlsPath, 'server/server.key'), }; - // Prepare development TLS files const { isProduction } = environment; + if ( !isProduction && nodeImplementation === CardanoNodeImplementationOptions.CARDANO @@ -96,10 +92,12 @@ export async function CardanoWalletLauncher( } let tokenMetadataServer; - // This switch statement handles any node specific // configuration, prior to spawning the child process - logger.info('Node implementation', { nodeImplementation }); + logger.info('Node implementation', { + nodeImplementation, + }); + switch (nodeImplementation) { case CardanoNodeImplementationOptions.CARDANO: if (cluster === SELFNODE) { @@ -117,8 +115,11 @@ export async function CardanoWalletLauncher( nodeConfig.network.configFile = selfnodeConfigPath; nodeConfig.network.genesisFile = selfnodeGenesisPath; nodeConfig.network.genesisHash = selfnodeGenesisHash; - merge(launcherConfig, { apiPort: 8088 }); + merge(launcherConfig, { + apiPort: 8088, + }); } + if (cluster === MAINNET) { launcherConfig.networkName = MAINNET; logger.info('Launching Wallet with --mainnet flag'); @@ -130,6 +131,7 @@ export async function CardanoWalletLauncher( launcherConfig.networkName = TESTNET; logger.info('Launching Wallet with --testnet flag'); } + if (MOCK_TOKEN_METADATA_SERVER_PORT) { tokenMetadataServer = `${MOCK_TOKEN_METADATA_SERVER_URL}:${MOCK_TOKEN_METADATA_SERVER_PORT}`; } else if (metadataUrl) { @@ -137,6 +139,7 @@ export async function CardanoWalletLauncher( } else { tokenMetadataServer = FALLBACK_TOKEN_METADATA_SERVER_URL; } + logger.info('Launching Wallet with --token-metadata-server flag', { tokenMetadataServer, }); @@ -159,6 +162,7 @@ export async function CardanoWalletLauncher( tokenMetadataServer, }); break; + default: break; } @@ -167,6 +171,5 @@ export async function CardanoWalletLauncher( walletOptions, launcherConfig, }); - return new cardanoLauncher.Launcher(launcherConfig, logger); } diff --git a/source/main/cardano/config.ts b/source/main/cardano/config.ts index 48caaa2736..96ccbd6667 100644 --- a/source/main/cardano/config.ts +++ b/source/main/cardano/config.ts @@ -1,4 +1,3 @@ -// @flow export const ensureXDGDataIsSet = () => { if (process.env.HOME && process.env.XDG_DATA_HOME === undefined) { process.env.XDG_DATA_HOME = `${process.env.HOME}/.local/share/`; diff --git a/source/main/cardano/setup.ts b/source/main/cardano/setup.ts index 28c77821ab..06fd0f01ec 100644 --- a/source/main/cardano/setup.ts +++ b/source/main/cardano/setup.ts @@ -1,4 +1,3 @@ -// @flow import { BrowserWindow } from 'electron'; import { createWriteStream, readFileSync } from 'fs'; import { exec, spawn } from 'child_process'; @@ -38,7 +37,9 @@ const restartCardanoNode = async (node: CardanoNode) => { try { await node.restart(); } catch (error) { - logger.error('Could not restart CardanoNode', { error }); + logger.error('Could not restart CardanoNode', { + error, + }); } }; @@ -88,7 +89,6 @@ export const setupCardanoNode = ( killTimeout: NODE_KILL_TIMEOUT, updateTimeout: NODE_UPDATE_TIMEOUT, }; - const cardanoNode = new CardanoNode( logger, { @@ -97,7 +97,7 @@ export const setupCardanoNode = ( exec, readFileSync, createWriteStream, - broadcastTlsConfig: (tlsConfig: ?TlsConfig) => { + broadcastTlsConfig: (tlsConfig: TlsConfig | null | undefined) => { if (!mainWindow.isDestroyed()) cardanoTlsConfigChannel.send(tlsConfig, mainWindow); }, @@ -118,7 +118,10 @@ export const setupCardanoNode = ( const restartTimeout = cardanoNode.startupTries > 0 ? 30000 : 1000; logger.info( `CardanoNode crashed with code ${code}. Restarting in ${restartTimeout}ms...`, - { code, restartTimeout } + { + code, + restartTimeout, + } ); setTimeout(() => restartCardanoNode(cardanoNode), restartTimeout); }, @@ -127,35 +130,34 @@ export const setupCardanoNode = ( }, config ); - getCachedCardanoStatusChannel.onRequest(() => { logger.info('ipcMain: Received request from renderer for cardano status', { status: cardanoNode.status, }); return Promise.resolve(cardanoNode.status); }); - - setCachedCardanoStatusChannel.onReceive((status: ?CardanoStatus) => { - logger.info( - 'ipcMain: Received request from renderer to cache cardano status', - { status } - ); - cardanoNode.saveStatus(status); - return Promise.resolve(); - }); - + setCachedCardanoStatusChannel.onReceive( + (status: CardanoStatus | null | undefined) => { + logger.info( + 'ipcMain: Received request from renderer to cache cardano status', + { + status, + } + ); + cardanoNode.saveStatus(status); + return Promise.resolve(); + } + ); cardanoStateChangeChannel.onRequest(() => { logger.info('ipcMain: Received request from renderer for node state', { state: cardanoNode.state, }); return Promise.resolve(cardanoNode.state); }); - cardanoTlsConfigChannel.onRequest(() => { logger.info('ipcMain: Received request from renderer for tls config'); return Promise.resolve(cardanoNode.tlsConfig); }); - cardanoAwaitUpdateChannel.onReceive(() => { logger.info('ipcMain: Received request from renderer to await update'); setTimeout(async () => { @@ -167,22 +169,21 @@ export const setupCardanoNode = ( }); return Promise.resolve(); }); - cardanoRestartChannel.onReceive(() => { logger.info('ipcMain: Received request from renderer to restart node'); return cardanoNode.restart(true); // forced restart }); - cardanoFaultInjectionChannel.onReceive( (fault: CardanoFaultInjectionRendererRequest) => { logger.info( 'ipcMain: Received request to inject a fault into cardano node', - { fault } + { + fault, + } ); return cardanoNode.setFault(fault); } ); - exportWalletsChannel.onRequest( ({ exportSourcePath, locale }: ExportWalletsRendererRequest) => { logger.info('ipcMain: Received request from renderer to export wallets', { @@ -193,6 +194,5 @@ export const setupCardanoNode = ( ); } ); - return cardanoNode; }; diff --git a/source/main/cardano/utils.ts b/source/main/cardano/utils.ts index b75c10473a..3b31ac685f 100644 --- a/source/main/cardano/utils.ts +++ b/source/main/cardano/utils.ts @@ -1,4 +1,3 @@ -// @flow import * as fs from 'fs-extra'; import path from 'path'; import { BrowserWindow, dialog } from 'electron'; @@ -21,25 +20,25 @@ import { CardanoNodeImplementationOptions, NetworkNameOptions, } from '../../common/types/cardano-node.types'; - export type Process = { - pid: number, - name: string, - cmd: string, - ppid?: number, - cpu: number, - memory: number, + pid: number; + name: string; + cmd: string; + ppid?: number; + cpu: number; + memory: number; }; const checkCondition = async ( condition: () => boolean, - resolve: Function, - reject: Function, + resolve: (...args: Array) => any, + reject: (...args: Array) => any, timeout: number, retryEvery: number, timeWaited: number = 0 ): Promise => { const result = await condition(); + if (result) { resolve(); } else if (timeWaited >= timeout) { @@ -61,7 +60,7 @@ const checkCondition = async ( }; export const promisedCondition = ( - cond: Function, + cond: (...args: Array) => any, timeout: number = 5000, retryEvery: number = 1000 ): Promise => @@ -77,7 +76,6 @@ export const deriveStorageKeys = ( ): CardanoNodeStorageKeys => ({ PREVIOUS_CARDANO_PID: `${getNetworkName(network)}-PREVIOUS-CARDANO-PID`, }); - export const deriveProcessNames = ( platform: PlatformNames, nodeImplementation: CardanoNodeImplementations, @@ -90,40 +88,37 @@ export const deriveProcessNames = ( : nodeImplementation ][platform] || 'cardano-node', }); - export const createSelfnodeConfig = async ( configFilePath: string, genesisFilePath: string, stateDir: string, cliBin: string ): Promise<{ - configPath: string, - genesisPath: string, - genesisHash: string, + configPath: string; + genesisPath: string; + genesisHash: string; }> => { const genesisFileExists = await fs.pathExists(genesisFilePath); + if (!genesisFileExists) { throw new Error('No genesis file found'); } const genesisFileContent = await fs.readJson(genesisFilePath); const startTime = Math.floor((Date.now() + 3000) / 1000); - const genesisFile = JSON.stringify({ - ...genesisFileContent, - startTime, - }); + const genesisFile = JSON.stringify({ ...genesisFileContent, startTime }); const genesisPath = path.join(stateDir, 'genesis.json'); - logger.info('Creating selfnode genesis file...', { inputPath: genesisFilePath, outputPath: genesisPath, startTime, }); - await fs.remove(genesisPath); await fs.writeFile(genesisPath, genesisFile); - - logger.info('Generating selfnode genesis hash...', { cliBin, genesisPath }); + logger.info('Generating selfnode genesis hash...', { + cliBin, + genesisPath, + }); const { stdout: genesisHashBuffer } = spawnSync(cliBin, [ 'print-genesis-hash', '--genesis-json', @@ -133,9 +128,11 @@ export const createSelfnodeConfig = async ( .toString() .replace('\r', '') .replace('\n', ''); - logger.info('Generated selfnode genesis hash', { genesisHash }); - + logger.info('Generated selfnode genesis hash', { + genesisHash, + }); const configFileExists = await fs.pathExists(configFilePath); + if (!configFileExists) { throw new Error('No config file found'); } @@ -146,14 +143,12 @@ export const createSelfnodeConfig = async ( GenesisFile: genesisPath, }); const configPath = path.join(stateDir, 'config.yaml'); - logger.info('Creating selfnode config file...', { inputPath: configFilePath, outputPath: configPath, genesisPath, genesisHash, }); - await fs.remove(configPath); await fs.writeFile(configPath, configFile); const chainDir = path.join(stateDir, 'chain'); @@ -161,16 +156,17 @@ export const createSelfnodeConfig = async ( chainDir, }); await fs.remove(chainDir); - const walletsDir = path.join(stateDir, 'wallets'); logger.info('Removing selfnode wallets folder...', { walletsDir, }); await fs.remove(walletsDir); - - return { configPath, genesisPath, genesisHash }; + return { + configPath, + genesisPath, + genesisHash, + }; }; - export const exportWallets = async ( exportSourcePath: string, launcherConfig: LauncherConfig, @@ -184,7 +180,6 @@ export const exportWallets = async ( cluster, isFlight, } = launcherConfig; - logger.info('ipcMain: Starting wallets export...', { exportSourcePath, legacySecretKey, @@ -193,7 +188,6 @@ export const exportWallets = async ( cluster, isFlight, }); - let legacySecretKeyPath; let legacyWalletDBPath; @@ -218,26 +212,29 @@ export const exportWallets = async ( legacyWalletDBPath = response.legacyWalletDBPath; } catch (error) { const { code } = error || {}; + if (code === 'EBUSY') { logger.info('ipcMain: Exporting wallets failed', { errors: error, }); - return Promise.resolve({ wallets: [], errors: error }); + return Promise.resolve({ + wallets: [], + errors: error, + }); } } const legacyWalletDBPathExists = await fs.pathExists( `${legacyWalletDBPath}-acid` ); - logger.info('ipcMain: Exporting wallets...', { legacySecretKeyPath, legacyWalletDBPath, legacyWalletDBPathExists, }); - let wallets = []; let errors = ''; + try { const legacySecretKeyFile = fs.readFileSync(legacySecretKeyPath); // @ts-ignore @@ -261,11 +258,12 @@ export const exportWallets = async ( })), errors, }); - // Remove Daedalus migration data await removeMigrationData(stateDir); - - return Promise.resolve({ wallets, errors }); + return Promise.resolve({ + wallets, + errors, + }); }; const prepareMigrationData = async ( @@ -275,12 +273,13 @@ const prepareMigrationData = async ( legacyWalletDB: string, locale: string ): Promise<{ - legacySecretKeyPath: string, - legacyWalletDBPath: string, + legacySecretKeyPath: string; + legacyWalletDBPath: string; }> => new Promise(async (resolve, reject) => { let legacySecretKeyPath = ''; let legacyWalletDBPath = ''; + try { // Remove migration data dir if it exists const migrationDataDirPath = path.join(stateDir, 'migration-data'); @@ -289,8 +288,8 @@ const prepareMigrationData = async ( logger.info('ipcMain: Preparing Daedalus Flight migration data...', { migrationDataDirPath, }); - const legacySecretKeyExists = await fs.pathExists(legacySecretKey); + if (legacySecretKeyExists) { logger.info('ipcMain: Copying secret key file...', { legacySecretKey, @@ -310,6 +309,7 @@ const prepareMigrationData = async ( const legacyWalletDBPathExists = await fs.pathExists( legacyWalletDBFullPath ); + if (legacyWalletDBPathExists) { logger.info('ipcMain: Copying wallet db directory...', { legacyWalletDBFullPath, @@ -328,17 +328,23 @@ const prepareMigrationData = async ( legacyWalletDBFullPath, }); } - resolve({ legacySecretKeyPath, legacyWalletDBPath }); + + resolve({ + legacySecretKeyPath, + legacyWalletDBPath, + }); } catch (error) { logger.info('ipcMain: Preparing Daedalus Flight migration data failed', { error, }); const { code } = error || {}; + if (code === 'EBUSY') { // "EBUSY" error happens on Windows when Daedalus mainnet is running during preparation // of Daedalus Flight wallet migration data as this prevents the files from being copied. logger.info('ipcMain: Showing "Automatic wallet migration" warning...'); const { response } = await showExportWalletsWarning(mainWindow, locale); + if (response === 0) { // User confirmed migration retry logger.info('ipcMain: User confirmed wallet migration retry'); @@ -383,8 +389,11 @@ const removeMigrationData = async (stateDir: string) => { const showExportWalletsWarning = ( mainWindow: BrowserWindow, locale: string -): Promise<{ response: number }> => { +): Promise<{ + response: number; +}> => { const translations = require(`../locales/${locale}`); + const translation = getTranslation(translations, 'dialog'); const exportWalletsDialogOptions = { buttons: [ diff --git a/source/main/config.ts b/source/main/config.ts index ea22886830..564e8be61b 100644 --- a/source/main/config.ts +++ b/source/main/config.ts @@ -1,11 +1,9 @@ -// @flow import path from 'path'; import { app, dialog } from 'electron'; import { environment } from './environment'; import { readLauncherConfig } from './utils/config'; import { getBuildLabel } from '../common/utils/environmentCheckers'; import type { CardanoNodeImplementations } from '../common/types/cardano-node.types'; - const { isTest, isProduction, @@ -15,14 +13,15 @@ const { network, version, } = environment; - // Make sure Daedalus is started with required configuration const { LAUNCHER_CONFIG } = process.env; const isStartedByLauncher = !!LAUNCHER_CONFIG; const isWindows = process.platform === 'win32'; + if (!isStartedByLauncher) { const dialogTitle = 'Daedalus improperly started!'; let dialogMessage; + if (isProduction) { dialogMessage = isWindows ? 'Please start Daedalus using the icon in the Windows start menu or using Daedalus icon on your desktop.' @@ -31,6 +30,7 @@ if (!isStartedByLauncher) { dialogMessage = 'Daedalus should be started using nix-shell. Find more details here: https://github.com/input-output-hk/daedalus/blob/develop/README.md'; } + try { // app may not be available at this moment so we need to use try-catch dialog.showErrorBox(dialogTitle, dialogMessage); @@ -41,62 +41,59 @@ if (!isStartedByLauncher) { } export type NodeConfig = { - configurationDir: string, - delegationCertificate?: string, - kind: 'byron' | 'shelley', + configurationDir: string; + delegationCertificate?: string; + kind: 'byron' | 'shelley'; network: { - configFile: string, - genesisFile: string, - genesisHash: string, - topologyFile: string, - }, - signingKey?: string, - rtsOpts?: Array, + configFile: string; + genesisFile: string; + genesisHash: string; + topologyFile: string; + }; + signingKey?: string; + rtsOpts?: Array; }; /** * The shape of the config params, usually provided to the cardano-node launcher */ export type LauncherConfig = { - stateDir: string, - nodeImplementation: CardanoNodeImplementations, - nodeConfig: NodeConfig, - tlsPath: string, - logsPrefix: string, - cluster: string, - configPath: string, - syncTolerance: string, - cliBin: string, - legacyStateDir: string, - legacySecretKey: string, - legacyWalletDB: string, - isFlight: boolean, - isStaging: boolean, - smashUrl?: string, - metadataUrl?: string, - updateRunnerBin: string, - selfnodeBin: string, - mockTokenMetadataServerBin: string, + stateDir: string; + nodeImplementation: CardanoNodeImplementations; + nodeConfig: NodeConfig; + tlsPath: string; + logsPrefix: string; + cluster: string; + configPath: string; + syncTolerance: string; + cliBin: string; + legacyStateDir: string; + legacySecretKey: string; + legacyWalletDB: string; + isFlight: boolean; + isStaging: boolean; + smashUrl?: string; + metadataUrl?: string; + updateRunnerBin: string; + selfnodeBin: string; + mockTokenMetadataServerBin: string; }; - type WindowOptionsType = { - show: boolean, - width: number, - height: number, + show: boolean; + width: number; + height: number; webPreferences: { - nodeIntegration: boolean, - webviewTag: boolean, - enableRemoteModule: boolean, - preload: string, - }, - icon?: string, + nodeIntegration: boolean; + webviewTag: boolean; + enableRemoteModule: boolean; + preload: string; + }; + icon?: string; }; - export const DEFAULT_WINDOW_WIDTH = 1150; export const DEFAULT_WINDOW_HEIGHT = 870; export const MIN_WINDOW_CONTENT_WIDTH = 905; export const MIN_WINDOW_CONTENT_HEIGHT = 564; - export const windowOptions: WindowOptionsType = { show: false, width: DEFAULT_WINDOW_WIDTH, @@ -110,7 +107,6 @@ export const windowOptions: WindowOptionsType = { }, useContentSize: true, }; - export const launcherConfig: LauncherConfig = readLauncherConfig( LAUNCHER_CONFIG ); @@ -133,7 +129,6 @@ export const buildLabel = getBuildLabel( isFlight, version ); - // Logging config export const ALLOWED_LOGS = [ 'Daedalus.json', @@ -150,21 +145,29 @@ export const ALLOWED_LAUNCHER_LOGS = new RegExp(/(launcher-)(\d{14}$)/); export const MAX_NODE_LOGS_ALLOWED = 3; export const MAX_WALLET_LOGS_ALLOWED = 3; export const MAX_LAUNCHER_LOGS_ALLOWED = 3; - // CardanoNode config export const NODE_STARTUP_TIMEOUT = 5000; export const NODE_STARTUP_MAX_RETRIES = 5; export const NODE_SHUTDOWN_TIMEOUT = isTest ? 5000 : 5 * 60 * 1000; // 5 minutes | unit: milliseconds + export const NODE_KILL_TIMEOUT = isTest ? 5000 : 5 * 60 * 1000; // 5 minutes | unit: milliseconds + export const NODE_UPDATE_TIMEOUT = isTest ? 10000 : 5 * 60 * 1000; // 5 minutes | unit: milliseconds export const DISK_SPACE_REQUIRED = 2 * 1073741274; // 2 GB | unit: bytes + export const DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE = 10; // 10% of the available disk space + export const DISK_SPACE_CHECK_DONT_BOTHER_ME_INTERVAL = Number.MAX_SAFE_INTEGER; // Maximum interval + export const DISK_SPACE_CHECK_LONG_INTERVAL = 10 * 60 * 1000; // 10 minutes | unit: milliseconds + export const DISK_SPACE_CHECK_MEDIUM_INTERVAL = 60 * 1000; // 1 minute | unit: milliseconds + export const DISK_SPACE_CHECK_SHORT_INTERVAL = isTest ? 2000 : 10 * 1000; // 10 seconds | unit: milliseconds + export const DISK_SPACE_RECOMMENDED_PERCENTAGE = 15; // 15% of the total disk space + export const DISK_SPACE_CHECK_TIMEOUT = 9 * 1000; // Timeout for checking disks pace export const BLOCK_REPLAY_PROGRESS_CHECK_INTERVAL = 1 * 1000; // 1 seconds | unit: milliseconds @@ -172,12 +175,10 @@ export const BLOCK_REPLAY_PROGRESS_CHECK_INTERVAL = 1 * 1000; // 1 seconds | uni // Used if token metadata server URL is not defined in launcher config export const FALLBACK_TOKEN_METADATA_SERVER_URL = 'https://metadata.cardano-testnet.iohkdev.io'; - export const MINIMUM_AMOUNT_OF_RAM_FOR_RTS_FLAGS = 16 * 1024 * 1024 * 1024; // 16gb RAM // Used by mock-token-metadata-server export const MOCK_TOKEN_METADATA_SERVER_URL = 'http://localhost'; export const MOCK_TOKEN_METADATA_SERVER_PORT = process.env.MOCK_TOKEN_METADATA_SERVER_PORT || 0; - export const RTS_FLAGS = ['-c']; diff --git a/source/main/environment.ts b/source/main/environment.ts index 17b15a4ff9..72ce8e8cd5 100644 --- a/source/main/environment.ts +++ b/source/main/environment.ts @@ -1,4 +1,3 @@ -// @flow import os from 'os'; import { get, includes, uniq } from 'lodash'; import { version } from '../../package.json'; @@ -24,7 +23,6 @@ import { /* ================================================================== = Evaluations = ================================================================== */ - // environment variables const CURRENT_NODE_ENV = process.env.NODE_ENV || DEVELOPMENT; const NETWORK = evaluateNetwork(process.env.NETWORK); @@ -42,6 +40,7 @@ const isWatchMode = process.env.IS_WATCH_MODE; const keepLocalClusterRunning = process.env.KEEP_LOCAL_CLUSTER_RUNNING; const API_VERSION = process.env.API_VERSION || 'dev'; const NODE_VERSION = '1.33.0'; // TODO: pick up this value from process.env + const mainProcessID = get(process, 'ppid', '-'); const rendererProcessID = process.pid; const PLATFORM = os.platform(); @@ -61,7 +60,6 @@ const isLinux = checkIsLinux(PLATFORM); /* ================================================================== = Compose environment = ================================================================== */ - export const environment: Environment = Object.assign( {}, { diff --git a/source/main/index.ts b/source/main/index.ts index fcf6526184..5be067d635 100644 --- a/source/main/index.ts +++ b/source/main/index.ts @@ -1,4 +1,3 @@ -// @flow import os from 'os'; import path from 'path'; import { app, dialog, BrowserWindow, screen, shell } from 'electron'; @@ -53,11 +52,9 @@ import { } from './windows/windowBounds'; /* eslint-disable consistent-return */ - // Global references to windows to prevent them from being garbage collected let mainWindow: BrowserWindow; let cardanoNode: CardanoNode; - const { isDev, isTest, @@ -83,24 +80,32 @@ if (isBlankScreenFixActive) { EventEmitter.defaultMaxListeners = 100; // Default: 10 app.allowRendererProcessReuse = true; + const safeExit = async () => { pauseActiveDownloads(); + if (!cardanoNode || cardanoNode.state === CardanoNodeStates.STOPPED) { - logger.info('Daedalus:safeExit: exiting Daedalus with code 0', { code: 0 }); + logger.info('Daedalus:safeExit: exiting Daedalus with code 0', { + code: 0, + }); return safeExitWithCode(0); } + if (cardanoNode.state === CardanoNodeStates.STOPPING) { logger.info('Daedalus:safeExit: waiting for cardano-node to stop...'); cardanoNode.exitOnStop(); return; } + try { const pid = cardanoNode.pid || 'null'; logger.info(`Daedalus:safeExit: stopping cardano-node with PID: ${pid}`, { pid, }); await cardanoNode.stop(); - logger.info('Daedalus:safeExit: exiting Daedalus with code 0', { code: 0 }); + logger.info('Daedalus:safeExit: exiting Daedalus with code 0', { + code: 0, + }); safeExitWithCode(0); } catch (error) { logger.error('Daedalus:safeExit: cardano-node did not exit correctly', { @@ -116,16 +121,13 @@ const onAppReady = async () => { environment.version, path.join(pubLogsFolderPath, 'Daedalus-versions.json') ); - const cpu = os.cpus(); const platformVersion = os.release(); const ram = JSON.stringify(os.totalmem(), null, 2); - const startTime = new Date().toISOString(); // first checks for Japanese locale, otherwise returns english const systemLocale = detectSystemLocale(); const userLocale = getLocale(network); - const systemInfo = logSystemInfo({ cardanoNodeVersion, cardanoWalletVersion, @@ -138,27 +140,25 @@ const onAppReady = async () => { ram, startTime, }); - // We need DAEDALUS_INSTALL_DIRECTORY in PATH in order for the // cardano-launcher to find cardano-wallet and cardano-node executables process.env.PATH = [ process.env.PATH, process.env.DAEDALUS_INSTALL_DIRECTORY, ].join(path.delimiter); - - logger.info(`Daedalus is starting at ${startTime}`, { startTime }); - + logger.info(`Daedalus is starting at ${startTime}`, { + startTime, + }); logger.info('Updating System-info.json file', { ...systemInfo.data }); - logger.info(`Current working directory is: ${process.cwd()}`, { cwd: process.cwd(), }); - - logger.info('System and user locale', { systemLocale, userLocale }); - + logger.info('System and user locale', { + systemLocale, + userLocale, + }); ensureXDGDataIsSet(); await installChromeExtensions(isDev); - logger.info('Setting up Main Window...'); mainWindow = createMainWindow( userLocale, @@ -168,13 +168,16 @@ const onAppReady = async () => { const getCurrentRtsFlags = () => { const rtsFlagsFromStorage = getRtsFlags(network); + if (!rtsFlagsFromStorage) { if (os.totalmem() < MINIMUM_AMOUNT_OF_RAM_FOR_RTS_FLAGS) { setRtsFlagsAndRestart(environment.network, RTS_FLAGS); return RTS_FLAGS; } + return []; } + return rtsFlagsFromStorage; }; @@ -183,11 +186,9 @@ const onAppReady = async () => { `Setting up Cardano Node... with flags: ${JSON.stringify(rtsFlags)}` ); cardanoNode = setupCardanoNode(launcherConfig, mainWindow, rtsFlags); - buildAppMenus(mainWindow, cardanoNode, userLocale, { isNavigationEnabled: false, }); - enableApplicationMenuNavigationChannel.onReceive( () => new Promise((resolve) => { @@ -198,7 +199,6 @@ const onAppReady = async () => { resolve(); }) ); - rebuildApplicationMenu.onReceive( (data) => new Promise((resolve) => { @@ -210,36 +210,32 @@ const onAppReady = async () => { resolve(); }) ); - setStateSnapshotLogChannel.onReceive( (data: SetStateSnapshotLogMainResponse) => { return Promise.resolve(logStateSnapshot(data)); } ); - generateWalletMigrationReportChannel.onReceive( (data: GenerateWalletMigrationReportRendererRequest) => { return Promise.resolve(generateWalletMigrationReport(data)); } ); - getStateDirectoryPathChannel.onRequest(() => Promise.resolve(stateDirectoryPath) ); - getDesktopDirectoryPathChannel.onRequest(() => Promise.resolve(app.getPath('desktop')) ); - getSystemLocaleChannel.onRequest(() => Promise.resolve(systemLocale)); - const handleCheckDiskSpace = handleDiskSpace(mainWindow, cardanoNode); + const onMainError = (error: string) => { if (error.indexOf('ENOSPC') > -1) { handleCheckDiskSpace(); return false; } }; + mainErrorHandler(onMainError); await handleCheckDiskSpace(); await handleCheckBlockReplayProgress(mainWindow, launcherConfig.logsPrefix); @@ -256,19 +252,19 @@ const onAppReady = async () => { event.preventDefault(); await safeExit(); }); - // Security feature: Prevent creation of new browser windows // https://github.com/electron/electron/blob/master/docs/tutorial/security.md#14-disable-or-limit-creation-of-new-windows app.on('web-contents-created', (_, contents) => { contents.on('new-window', (event, url) => { // Prevent creation of new BrowserWindows via links / window.open event.preventDefault(); - logger.info('Prevented creation of new browser window', { url }); + logger.info('Prevented creation of new browser window', { + url, + }); // Open these links with the default browser shell.openExternal(url); }); }); - // Wait for controlled cardano-node shutdown before quitting the app app.on('before-quit', async (event) => { logger.info('app received event. Safe exiting Daedalus now.'); @@ -298,12 +294,14 @@ const onAppReady = async () => { mainWindow, exitSelfnodeDialogOptions ); + if (response === 0) { logger.info( 'ipcMain: Keeping the local cluster running while exiting Daedalus' ); return safeExitWithCode(0); } + logger.info('ipcMain: Exiting local cluster together with Daedalus'); } diff --git a/source/main/ipc/bugReportRequestChannel.ts b/source/main/ipc/bugReportRequestChannel.ts index 6e417e278f..fdd3cac6ae 100644 --- a/source/main/ipc/bugReportRequestChannel.ts +++ b/source/main/ipc/bugReportRequestChannel.ts @@ -1,4 +1,3 @@ -// @flow import http from 'http'; import FormData from 'form-data/lib/form_data'; import fs from 'fs'; @@ -12,18 +11,18 @@ import type { import { logger } from '../utils/logging'; /* eslint-disable consistent-return */ - export const bugReportRequestChannel: // IpcChannel MainIpcChannel< SubmitBugReportRendererRequest, SubmitBugReportRequestMainResponse > = new MainIpcChannel(SUBMIT_BUG_REPORT_REQUEST_CHANNEL); - export const handleBugReportRequests = () => { bugReportRequestChannel.onReceive( (request: SubmitBugReportRendererRequest) => new Promise((resolve, reject) => { - logger.info('bugReportRequestChannel::onReceive', { request }); + logger.info('bugReportRequestChannel::onReceive', { + request, + }); const { httpOptions, requestPayload } = request; const options = Object.assign({}, httpOptions); const payload = Object.assign({}, requestPayload); @@ -41,13 +40,15 @@ export const handleBugReportRequests = () => { } options.headers = formData.getHeaders(); - - logger.info('Sending bug report request with options', { options }); + logger.info('Sending bug report request with options', { + options, + }); const httpRequest = http.request(options); httpRequest.on('response', (response) => { if (response.statusCode !== 200) { return reject(); } + response.on('data', () => {}); response.on('error', (error) => { reject(error); @@ -57,7 +58,6 @@ export const handleBugReportRequests = () => { }); }); httpRequest.on('error', (error) => reject(error)); - // Attach form-data and trigger the request formData.pipe(httpRequest); }) diff --git a/source/main/ipc/cardano.ipc.ts b/source/main/ipc/cardano.ipc.ts index 4259dc5913..25c4722aca 100644 --- a/source/main/ipc/cardano.ipc.ts +++ b/source/main/ipc/cardano.ipc.ts @@ -1,4 +1,3 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { CARDANO_FAULT_INJECTION_CHANNEL, @@ -28,44 +27,35 @@ import type { ExportWalletsRendererRequest, ExportWalletsMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const cardanoRestartChannel: MainIpcChannel< CardanoRestartRendererRequest, CardanoRestartMainResponse > = new MainIpcChannel(CARDANO_RESTART_CHANNEL); - export const cardanoTlsConfigChannel: MainIpcChannel< CardanoTlsConfigRendererRequest, CardanoTlsConfigMainResponse > = new MainIpcChannel(CARDANO_TLS_CONFIG_CHANNEL); - export const cardanoAwaitUpdateChannel: MainIpcChannel< CardanoAwaitUpdateRendererRequest, CardanoAwaitUpdateMainResponse > = new MainIpcChannel(CARDANO_AWAIT_UPDATE_CHANNEL); - export const cardanoStateChangeChannel: MainIpcChannel< CardanoStateRendererRequest, CardanoStateRendererResponse > = new MainIpcChannel(CARDANO_STATE_CHANNEL); - export const cardanoFaultInjectionChannel: MainIpcChannel< CardanoFaultInjectionRendererRequest, CardanoFaultInjectionMainResponse > = new MainIpcChannel(CARDANO_FAULT_INJECTION_CHANNEL); - export const getCachedCardanoStatusChannel: MainIpcChannel< GetCachedCardanoStatusRendererRequest, GetCachedCardanoStatusMainResponse > = new MainIpcChannel(GET_CACHED_CARDANO_STATUS_CHANNEL); - export const setCachedCardanoStatusChannel: MainIpcChannel< SetCachedCardanoStatusRendererRequest, SetCachedCardanoStatusMainResponse > = new MainIpcChannel(SET_CACHED_CARDANO_STATUS_CHANNEL); - export const exportWalletsChannel: MainIpcChannel< ExportWalletsRendererRequest, ExportWalletsMainResponse diff --git a/source/main/ipc/compress-logs.ts b/source/main/ipc/compress-logs.ts index 0c4c25495e..84d0c93ef6 100644 --- a/source/main/ipc/compress-logs.ts +++ b/source/main/ipc/compress-logs.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import archiver from 'archiver'; import path from 'path'; @@ -11,12 +10,10 @@ import type { CompressLogsRendererRequest, CompressLogsMainResponse, } from '../../common/ipc/api'; - export const compressLogsChannel: MainIpcChannel< CompressLogsRendererRequest, CompressLogsMainResponse > = new MainIpcChannel(COMPRESS_LOGS_CHANNEL); - export default () => { compressLogsChannel.onRequest( ({ logs, compressedFileName }) => @@ -24,37 +21,43 @@ export default () => { const outputPath = path.join(appLogsFolderPath, compressedFileName); const output = fs.createWriteStream(outputPath); const archive = archiver('zip', { - zlib: { level: 9 }, // Sets the compression level + zlib: { + level: 9, + }, // Sets the compression level }); - output.on('close', () => { - logger.debug('COMPRESS_LOGS.SUCCESS', { outputPath }); + logger.debug('COMPRESS_LOGS.SUCCESS', { + outputPath, + }); resolve(outputPath); }); - archive.on('error', (error) => { - logger.error('COMPRESS_LOGS.ERROR', { error }); + logger.error('COMPRESS_LOGS.ERROR', { + error, + }); reject(error); }); - logger.debug('COMPRESS_LOGS.START'); - // compress files const logFiles = get(logs, ['files'], []); + for (let i = 0; i < logFiles.length; i++) { const stream = fs.readFileSync( path.join(pubLogsFolderPath, logFiles[i]) ); - archive.append(stream, { name: logFiles[i] }); + archive.append(stream, { + name: logFiles[i], + }); } archive.finalize((error) => { if (error) { - logger.error('COMPRESS_LOGS.ERROR', { error }); + logger.error('COMPRESS_LOGS.ERROR', { + error, + }); reject(error); } }); - archive.pipe(output); }) ); diff --git a/source/main/ipc/control-ui-parts.ts b/source/main/ipc/control-ui-parts.ts index b8c31dcbeb..e406b20f44 100644 --- a/source/main/ipc/control-ui-parts.ts +++ b/source/main/ipc/control-ui-parts.ts @@ -1,4 +1,3 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import type { ShowUiPartMainRequest, @@ -10,12 +9,10 @@ import { SHOW_UI_PART_CHANNEL, TOGGLE_UI_PART_CHANNEL, } from '../../common/ipc/api'; - export const showUiPartChannel: MainIpcChannel< ShowUiPartRendererResponse, ShowUiPartMainRequest > = new MainIpcChannel(SHOW_UI_PART_CHANNEL); - export const toggleUiPartChannel: MainIpcChannel< ToggleUiPartRendererResponse, ToggleUiPartMainRequest diff --git a/source/main/ipc/download-logs.ts b/source/main/ipc/download-logs.ts index 1677b0dd29..8019614efe 100644 --- a/source/main/ipc/download-logs.ts +++ b/source/main/ipc/download-logs.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import { MainIpcChannel } from './lib/MainIpcChannel'; import type { @@ -6,12 +5,10 @@ import type { DownloadLogsMainResponse, } from '../../common/ipc/api'; import { DOWNLOAD_LOGS_CHANNEL } from '../../common/ipc/api'; - export const downloadLogsChannel: MainIpcChannel< DownloadLogsRendererRequest, DownloadLogsMainResponse > = new MainIpcChannel(DOWNLOAD_LOGS_CHANNEL); - export default () => { downloadLogsChannel.onRequest((request) => { const { compressedLogsFilePath, destinationPath } = request; @@ -22,7 +19,6 @@ export default () => { const file = fs.readFileSync(compressedLogsFilePath); fs.writeFileSync(destinationPath, file); - return Promise.resolve(); }); }; diff --git a/source/main/ipc/downloadManagerChannel.ts b/source/main/ipc/downloadManagerChannel.ts index 51d0cefa2e..74bf93f13d 100644 --- a/source/main/ipc/downloadManagerChannel.ts +++ b/source/main/ipc/downloadManagerChannel.ts @@ -1,4 +1,3 @@ -// @flow import { DownloaderHelper } from 'node-downloader-helper'; import fs from 'fs'; import { forEach, omit } from 'lodash'; @@ -26,7 +25,7 @@ import { TEMPORARY_FILENAME, DOWNLOAD_STATES, } from '../../common/config/downloadManagerConfig'; -import { generateFileNameWithTimestamp } from '../../common/utils/files.js'; +import { generateFileNameWithTimestamp } from '../../common/utils/files'; import { downloadManagerLocalStorage as localStorage } from '../utils/mainLocalStorage'; import type { DownloadRendererRequest, @@ -44,7 +43,6 @@ import type { CheckFileExistsMainResponse, CheckFileExistsRendererRequest, } from '../../common/ipc/api'; - localStorage.setAllPaused(); const requestDownload = async ( @@ -63,10 +61,7 @@ const requestDownload = async ( : generateFileNameWithTimestamp(TEMPORARY_FILENAME); const originalFilename = getOriginalFilename(downloadRequestPayload); const destinationPath = getPathFromDirectoryName(destinationDirectoryName); - const options = { - ..._options, - fileName: temporaryFilename, - }; + const options = { ..._options, fileName: temporaryFilename }; const downloadId = getIdFromFileName(id || originalFilename); const info = { downloadId, @@ -77,13 +72,17 @@ const requestDownload = async ( originalFilename, options, }; + if (downloads[downloadId]) { logger.info( `DownloadManager: Preventing download "${downloadId}" duplicity`, - { downloadId } + { + downloadId, + } ); return false; } + const eventActions = await getEventActions( info, window, @@ -94,6 +93,7 @@ const requestDownload = async ( if (resumeDownload) { const { total: downloadSize } = await download.getTotalSize(); // get the total size from the server + download.__total = downloadSize; download.__filePath = `${info.destinationPath}/${info.temporaryFilename}`; download.__downloaded = download.__getFilesizeInBytes(download.__filePath); @@ -101,10 +101,8 @@ const requestDownload = async ( } let currentDownloadData = 0; - const progressType = options.progressIsThrottled === false ? 'progress' : 'progress.throttled'; - download.on('start', eventActions.start); download.on('download', eventActions.download); download.on(progressType, (evt) => { @@ -121,6 +119,7 @@ const requestDownload = async ( } else { download.start(); } + return download; }; @@ -148,11 +147,15 @@ const requestResumeDownload = async ( destinationDirectoryName, options, }; + // Check if the file to be resumed still exists if (fs.existsSync(filePath)) { requestDownloadPayload = { ...requestDownloadPayload, - resumeDownload: { temporaryFilename, originalFilename }, + resumeDownload: { + temporaryFilename, + originalFilename, + }, }; } else { // Otherwise: @@ -165,19 +168,18 @@ const requestResumeDownload = async ( }; await localStorage.unset(id); } - return requestDownload( - { - ...requestDownloadPayload, - override: true, - }, - window - ); + + return requestDownload({ ...requestDownloadPayload, override: true }, window); }; const deleteDownloadedFile = async ({ id, -}: DeleteDownloadedFileRendererRequest): Promise => { - const downloadLocalData = await getDownloadLocalData({ id }); +}: DeleteDownloadedFileRendererRequest): Promise< + DeleteDownloadedFileMainResponse +> => { + const downloadLocalData = await getDownloadLocalData({ + id, + }); if (!downloadLocalData) throw new Error('Download data not found'); const { destinationPath, originalFilename, temporaryFilename } = downloadLocalData.info || {}; @@ -190,19 +192,24 @@ const deleteDownloadedFile = async ({ const getDownloadLocalData = async ({ fileName, id = fileName, -}: DownloadLocalDataRendererRequest): Promise => { +}: DownloadLocalDataRendererRequest): Promise< + DownloadLocalDataMainResponse +> => { if (!id) throw new Error('Requires `id` or `fileName`'); const downloadId: string = getIdFromFileName(String(id)); return localStorage.get(downloadId); }; -const getDownloadsLocalData = async (): Promise => - localStorage.getAll(); +const getDownloadsLocalData = async (): Promise< + DownloadsLocalDataMainResponse +> => localStorage.getAll(); const clearDownloadLocalData = async ({ fileName, id = fileName, -}: ClearDownloadLocalDataRendererRequest): Promise => { +}: ClearDownloadLocalDataRendererRequest): Promise< + ClearDownloadLocalDataMainResponse +> => { if (!id) throw new Error('Requires `id` or `fileName`'); const downloadId: string = getIdFromFileName(String(id)); return localStorage.unset(downloadId); @@ -211,7 +218,9 @@ const clearDownloadLocalData = async ({ const checkFileExists = async ({ id, }: CheckFileExistsRendererRequest): Promise => { - const downloadLocalData = await getDownloadLocalData({ id }); + const downloadLocalData = await getDownloadLocalData({ + id, + }); if (!downloadLocalData) throw new Error('Download data not found'); const { destinationPath, originalFilename, temporaryFilename } = downloadLocalData.info || {}; @@ -232,13 +241,11 @@ MainIpcChannel< ResumeDownloadRendererRequest, ResumeDownloadMainResponse > = new MainIpcChannel(RESUME_DOWNLOAD); - const deleteDownloadedFileChannel: // IpcChannel MainIpcChannel< DeleteDownloadedFileRendererRequest, DeleteDownloadedFileMainResponse > = new MainIpcChannel(DELETE_DOWNLOADED_FILE); - const getDownloadLocalDataChannel: // IpcChannel MainIpcChannel< DownloadLocalDataRendererRequest, @@ -259,7 +266,6 @@ MainIpcChannel< CheckFileExistsRendererRequest, CheckFileExistsMainResponse > = new MainIpcChannel(CHECK_FILE_EXISTS); - export const downloadManagerChannel = (window: BrowserWindow) => { requestDownloadChannel.onRequest( (downloadRequestPayload: DownloadRendererRequest) => @@ -270,13 +276,11 @@ export const downloadManagerChannel = (window: BrowserWindow) => { requestResumeDownload(resumeDownloadRequestPayload, window) ); deleteDownloadedFileChannel.onRequest(deleteDownloadedFile); - getDownloadLocalDataChannel.onRequest(getDownloadLocalData); getDownloadsLocalDataChannel.onRequest(getDownloadsLocalData); clearDownloadLocalDataChannel.onRequest(clearDownloadLocalData); checkFileExistsChannel.onRequest(checkFileExists); }; - export const pauseActiveDownloads = () => { forEach(downloads, (download, downloadId) => { try { @@ -284,7 +288,9 @@ export const pauseActiveDownloads = () => { download.pause(); logger.info( `DownloadManager:PauseDownloads download "${downloadId}" was paused`, - { downloadId } + { + downloadId, + } ); } catch (error) { logger.error( diff --git a/source/main/ipc/electronStoreConversation.ts b/source/main/ipc/electronStoreConversation.ts index 748205e7c9..807d646940 100644 --- a/source/main/ipc/electronStoreConversation.ts +++ b/source/main/ipc/electronStoreConversation.ts @@ -1,17 +1,14 @@ -// @flow import ElectronStore from 'electron-store'; import { ELECTRON_STORE_CHANNEL } from '../../common/ipc/api'; import { MainIpcConversation } from './lib/MainIpcConversation'; -import { environment } from '../environment.js'; +import { environment } from '../environment'; import { STORAGE_TYPES as types, STORAGE_KEYS as keys, } from '../../common/config/electron-store.config'; import type { ElectronStoreMessage } from '../../common/ipc/api'; import type { StorageKey } from '../../common/types/electron-store.types'; - const store = new ElectronStore(); - // MainIpcChannel export const electronStoreConversation: MainIpcConversation< ElectronStoreMessage, @@ -57,21 +54,25 @@ export const requestElectronStore = (request: ElectronStoreMessage) => { const { type, key, data, id } = request; const keyWithId = id ? `${key}.${id}` : key; const networkKey = getNetworkKey(keyWithId); + switch (type) { case types.GET: return store.get(networkKey); + case types.DELETE: return store.delete(networkKey); + case types.SET: return store.set(networkKey, data); + case types.RESET: reset(); return store.get(networkKey); + default: return Promise.reject(new Error(`Invalid type ${type} provided.`)); } }; - export const handleElectronStoreChannel = () => { electronStoreConversation.onRequest(requestElectronStore); }; diff --git a/source/main/ipc/enableApplicationMenuNavigationChannel.ts b/source/main/ipc/enableApplicationMenuNavigationChannel.ts index 4bf790e972..649a4bef47 100644 --- a/source/main/ipc/enableApplicationMenuNavigationChannel.ts +++ b/source/main/ipc/enableApplicationMenuNavigationChannel.ts @@ -1,11 +1,9 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { ENABLE_APPLICATION_MENU_NAVIGATION_CHANNEL } from '../../common/ipc/api'; import type { EnableApplicationMenuNavigationMainResponse, EnableApplicationMenuNavigationRendererRequest, } from '../../common/ipc/api'; - export const enableApplicationMenuNavigationChannel: // IpcChannel MainIpcChannel< EnableApplicationMenuNavigationRendererRequest, diff --git a/source/main/ipc/generateAddressPDFChannel.ts b/source/main/ipc/generateAddressPDFChannel.ts index 586371a5a2..49838998c1 100644 --- a/source/main/ipc/generateAddressPDFChannel.ts +++ b/source/main/ipc/generateAddressPDFChannel.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import path from 'path'; import PDFDocument from 'pdfkit'; @@ -14,13 +13,11 @@ import fontRegularEn from '../../common/assets/pdf/NotoSans-Regular.ttf'; import fontMediumEn from '../../common/assets/pdf/NotoSans-Medium.ttf'; import fontUnicode from '../../common/assets/pdf/arial-unicode.ttf'; import fontMono from '../../common/assets/pdf/NotoSansMono-Regular.ttf'; - export const generateAddressPDFChannel: // IpcChannel MainIpcChannel< GenerateAddressPDFRendererRequest, GenerateAddressPDFMainResponse > = new MainIpcChannel(GENERATE_ADDRESS_PDF_CHANNEL); - export const handleAddressPDFRequests = () => { generateAddressPDFChannel.onReceive( (request: GenerateAddressPDFRendererRequest) => @@ -41,6 +38,7 @@ export const handleAddressPDFRequests = () => { } = request; const readAssetSync = (p) => fs.readFileSync(path.join(__dirname, p)); + let fontRegular; let fontMedium; @@ -65,8 +63,8 @@ export const handleAddressPDFRequests = () => { const fontBufferRegular = readAssetSync(fontRegular); const fontBufferMono = readAssetSync(fontMono); const fontBufferUnicode = readAssetSync(fontUnicode); - let noteHeight = 0; + if (note) { noteHeight = getHeightOfString(note, fontBufferRegular, 14) + 30; } @@ -88,13 +86,11 @@ export const handleAddressPDFRequests = () => { Author: author, }, }).fillColor(textColor); - // Title doc.font(fontBufferMedium).fontSize(18).text(title.toUpperCase(), { align: 'center', characterSpacing: 2, }); - // Creation date doc .font(fontBufferRegular) @@ -103,17 +99,13 @@ export const handleAddressPDFRequests = () => { align: 'center', characterSpacing: 0.6, }); - doc.moveDown(); - // QR Code doc.image(qrCodeImage, { fit: [width - 60, 192], align: 'center', }); - doc.moveDown(); - // Address doc.font(fontBufferMono).fontSize(9).text(address, { align: 'center', @@ -123,7 +115,6 @@ export const handleAddressPDFRequests = () => { doc.moveDown(); // Note title doc.font(fontBufferRegular).fontSize(12).text(noteLabel); - // Note doc.font(fontBufferUnicode).fontSize(12).text(note); } diff --git a/source/main/ipc/generateCsvChannel.ts b/source/main/ipc/generateCsvChannel.ts index 18b9d47977..fa8fd1eb6f 100644 --- a/source/main/ipc/generateCsvChannel.ts +++ b/source/main/ipc/generateCsvChannel.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import csvStringify from 'csv-stringify'; import { MainIpcChannel } from './lib/MainIpcChannel'; @@ -7,19 +6,16 @@ import type { GenerateCsvMainResponse, GenerateCsvRendererRequest, } from '../../common/ipc/api'; - export const generateCsvChannel: // IpcChannel MainIpcChannel< GenerateCsvRendererRequest, GenerateCsvMainResponse > = new MainIpcChannel(GENERATE_CSV_CHANNEL); - export const handleRewardsCsvRequests = () => { generateCsvChannel.onReceive( (request: GenerateCsvRendererRequest) => new Promise((resolve, reject) => { const { fileContent, filePath } = request; - csvStringify(fileContent, (csvErr, output) => { if (csvErr) { return reject(csvErr); diff --git a/source/main/ipc/generateFileMetaChannel.ts b/source/main/ipc/generateFileMetaChannel.ts index 62694febe0..7adf873a12 100644 --- a/source/main/ipc/generateFileMetaChannel.ts +++ b/source/main/ipc/generateFileMetaChannel.ts @@ -1,4 +1,3 @@ -// @flow import mime from 'mime-types'; import path from 'path'; import { MainIpcChannel } from './lib/MainIpcChannel'; @@ -7,18 +6,17 @@ import type { GenerateFileMetaMainResponse, GenerateFileMetaRendererRequest, } from '../../common/ipc/api'; - export const generateFileMetaChannel: // IpcChannel MainIpcChannel< GenerateFileMetaRendererRequest, GenerateFileMetaMainResponse > = new MainIpcChannel(GENERATE_FILE_META_CHANNEL); - export const handleFileMetaRequests = () => { generateFileMetaChannel.onReceive( (request: GenerateFileMetaRendererRequest) => new Promise((resolve, reject) => { const { filePath } = request; + try { resolve({ fileName: path.basename(filePath), diff --git a/source/main/ipc/generatePaperWalletChannel.ts b/source/main/ipc/generatePaperWalletChannel.ts index 2bd9bc617f..4593563a61 100644 --- a/source/main/ipc/generatePaperWalletChannel.ts +++ b/source/main/ipc/generatePaperWalletChannel.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import path from 'path'; import PDFDocument from 'pdfkit'; @@ -15,13 +14,11 @@ import paperWalletPage1PathTestnet from '../../common/assets/pdf/paper-wallet-ce import paperWalletPage2Path from '../../common/assets/pdf/paper-wallet-certificate-page-2.png'; import paperWalletPage2PathTestnet from '../../common/assets/pdf/paper-wallet-certificate-page-2-testnet.png'; import paperWalletCertificateBgPath from '../../common/assets/pdf/paper-wallet-certificate-background.png'; - export const generatePaperWalletChannel: // IpcChannel MainIpcChannel< GeneratePaperWalletRendererRequest, GeneratePaperWalletMainResponse > = new MainIpcChannel(GENERATE_PAPER_WALLET_CHANNEL); - export const handlePaperWalletRequests = () => { generatePaperWalletChannel.onReceive( (request: GeneratePaperWalletRendererRequest) => @@ -39,6 +36,7 @@ export const handlePaperWalletRequests = () => { // Helpers const printMnemonic = (index) => `${index + 1}. ${mnemonics[index]}`; + const readAssetSync = (p) => fs.readFileSync(path.join(__dirname, p)); // Generate QR image for wallet address @@ -64,54 +62,61 @@ export const handlePaperWalletRequests = () => { Author: messages.infoAuthor, }, }); + try { // font family const fontBuffer = readAssetSync(paperWalletFontPath); doc.font(fontBuffer); - // background images const backgroundUri = readAssetSync(paperWalletCertificateBgPath); - doc.image(backgroundUri, 0, 0, { fit: [width, height] }); - + doc.image(backgroundUri, 0, 0, { + fit: [width, height], + }); // first page const page1Uri = readAssetSync( isMainnet ? paperWalletPage1Path : paperWalletPage1PathTestnet ); - doc.fillColor(textColor); - // Timestamp doc.fontSize(8).text(timestamp, 119, 484); - - doc.image(page1Uri, 0, 0, { fit: [width, height] }); - doc.rotate(180, { origin: [width / 2, height / 2] }); + doc.image(page1Uri, 0, 0, { + fit: [width, height], + }); + doc.rotate(180, { + origin: [width / 2, height / 2], + }); doc.fontSize(10).text(messages.walletAddressLabel, 0, 160, { width: 595, align: 'center', }); - doc.image(qrCodeImage, width / 2 - 80 / 2, 180, { fit: [80, 80] }); + doc.image(qrCodeImage, width / 2 - 80 / 2, 180, { + fit: [80, 80], + }); doc.fontSize(8).text(address, (width - 250) / 2, 274, { width: 250, align: 'center', lineGap: 2, }); - // revert document rotation - doc.rotate(-180, { origin: [width / 2, height / 2] }); - + doc.rotate(-180, { + origin: [width / 2, height / 2], + }); // second page doc.addPage(); const page2Uri = readAssetSync( isMainnet ? paperWalletPage2Path : paperWalletPage2PathTestnet ); - doc.image(page2Uri, 0, 0, { fit: [width, height] }); - doc.rotate(180, { origin: [width / 2, height / 2] }); + doc.image(page2Uri, 0, 0, { + fit: [width, height], + }); + doc.rotate(180, { + origin: [width / 2, height / 2], + }); doc.fillColor(textColor); doc.fontSize(10).text(messages.recoveryPhraseLabel, 0, 535, { width: 595, align: 'center', }); - // mnemonics doc.fontSize(7); doc.text(printMnemonic(0), 168, 560); @@ -120,27 +125,25 @@ export const handlePaperWalletRequests = () => { doc.text(printMnemonic(3), 300, 560); doc.text(printMnemonic(4), 344, 560); doc.text(printMnemonic(5), 388, 560); - doc.text(printMnemonic(6), 168, 581); doc.text(printMnemonic(7), 212, 581); doc.text(printMnemonic(8), 256, 581); doc.text(printMnemonic(9), 300, 581); doc.text(printMnemonic(10), 344, 581); doc.text(printMnemonic(11), 388, 581); - doc.text(printMnemonic(12), 168, 602); doc.text(printMnemonic(13), 212, 602); doc.text(printMnemonic(14), 256, 602); doc.text(printMnemonic(15), 300, 602); doc.text(printMnemonic(16), 344, 602); doc.text(printMnemonic(17), 388, 602); - doc.fontSize(7).text(buildLabel, (width - 270) / 2, 705, { width: 270, align: 'left', }); - - doc.rotate(-180, { origin: [width / 2, height / 2] }); + doc.rotate(-180, { + origin: [width / 2, height / 2], + }); } catch (error) { reject(error); } diff --git a/source/main/ipc/generateVotingPDFChannel.ts b/source/main/ipc/generateVotingPDFChannel.ts index 62b9040011..96ad997820 100644 --- a/source/main/ipc/generateVotingPDFChannel.ts +++ b/source/main/ipc/generateVotingPDFChannel.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import path from 'path'; import PDFDocument from 'pdfkit'; @@ -12,13 +11,11 @@ import type { import fontRegularEn from '../../common/assets/pdf/NotoSans-Regular.ttf'; import fontMediumEn from '../../common/assets/pdf/NotoSans-Medium.ttf'; import fontUnicode from '../../common/assets/pdf/arial-unicode.ttf'; - export const generateVotingPDFChannel: // IpcChannel MainIpcChannel< GenerateVotingPDFRendererRequest, GenerateVotingPDFMainResponse > = new MainIpcChannel(GENERATE_VOTING_PDF_CHANNEL); - export const handleVotingPDFRequests = () => { generateVotingPDFChannel.onReceive( (request: GenerateVotingPDFRendererRequest) => @@ -39,6 +36,7 @@ export const handleVotingPDFRequests = () => { } = request; const readAssetSync = (p) => fs.readFileSync(path.join(__dirname, p)); + let fontRegular; let fontMedium; @@ -61,7 +59,6 @@ export const handleVotingPDFRequests = () => { try { const fontBufferMedium = readAssetSync(fontMedium); const fontBufferRegular = readAssetSync(fontRegular); - const textColor = '#5e6066'; const textColorRed = '#ea4c5b'; const width = 640; @@ -79,13 +76,11 @@ export const handleVotingPDFRequests = () => { Author: author, }, }).fillColor(textColor); - // Title doc.font(fontBufferMedium).fontSize(18).text(title.toUpperCase(), { align: 'center', characterSpacing: 2, }); - // Creation date doc .font(fontBufferRegular) @@ -94,17 +89,13 @@ export const handleVotingPDFRequests = () => { align: 'center', characterSpacing: 0.6, }); - doc.moveDown(); - // QR Code doc.image(qrCodeImage, { fit: [width - 60, 192], align: 'center', }); - doc.moveDown(); - // Wallet name doc.font(fontBufferMedium).fontSize(14).text(walletNameLabel, { align: 'center', @@ -114,7 +105,6 @@ export const handleVotingPDFRequests = () => { align: 'center', characterSpacing: 0.6, }); - doc.moveDown(); // Footer diff --git a/source/main/ipc/generateWalletMigrationReportChannel.ts b/source/main/ipc/generateWalletMigrationReportChannel.ts index ade6d76bf7..14f6937eb8 100644 --- a/source/main/ipc/generateWalletMigrationReportChannel.ts +++ b/source/main/ipc/generateWalletMigrationReportChannel.ts @@ -1,11 +1,9 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { GENERATE_WALLET_MIGRATION_REPORT_CHANNEL } from '../../common/ipc/api'; import type { GenerateWalletMigrationReportRendererRequest, GenerateWalletMigrationReportMainResponse, } from '../../common/ipc/api'; - export const generateWalletMigrationReportChannel: // IpcChannel MainIpcChannel< GenerateWalletMigrationReportRendererRequest, diff --git a/source/main/ipc/get-block-replay-progress.ts b/source/main/ipc/get-block-replay-progress.ts index 0f33d4bb73..ca631f4f91 100644 --- a/source/main/ipc/get-block-replay-progress.ts +++ b/source/main/ipc/get-block-replay-progress.ts @@ -1,13 +1,10 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { GET_BLOCK_REPLAY_STATUS_CHANNEL } from '../../common/ipc/api'; import type { GetBlockReplayProgressRendererRequest, GetBlockReplayProgressMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const getBlockReplayProgressChannel: MainIpcChannel< GetBlockReplayProgressRendererRequest, GetBlockReplayProgressMainResponse diff --git a/source/main/ipc/get-disk-space-status.ts b/source/main/ipc/get-disk-space-status.ts index 929a37d892..597918d07e 100644 --- a/source/main/ipc/get-disk-space-status.ts +++ b/source/main/ipc/get-disk-space-status.ts @@ -1,13 +1,10 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { GET_DISK_SPACE_STATUS_CHANNEL } from '../../common/ipc/api'; import type { GetDiskSpaceStatusRendererRequest, GetDiskSpaceStatusMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const getDiskSpaceStatusChannel: MainIpcChannel< GetDiskSpaceStatusRendererRequest, GetDiskSpaceStatusMainResponse diff --git a/source/main/ipc/get-gpu-status.ts b/source/main/ipc/get-gpu-status.ts index 2f7024edbe..e7b1383e0c 100644 --- a/source/main/ipc/get-gpu-status.ts +++ b/source/main/ipc/get-gpu-status.ts @@ -1,4 +1,3 @@ -// @flow import { app } from 'electron'; import { MainIpcChannel } from './lib/MainIpcChannel'; import type { @@ -6,12 +5,10 @@ import type { GetGPUStatusMainResponse, } from '../../common/ipc/api'; import { GET_GPU_STATUS_CHANNEL } from '../../common/ipc/api'; - export const getGPUStatusChannel: MainIpcChannel< GetGPUStatusRendererRequest, GetGPUStatusMainResponse > = new MainIpcChannel(GET_GPU_STATUS_CHANNEL); - export default () => { getGPUStatusChannel.onRequest(() => Promise.resolve(app.getGPUFeatureStatus()) diff --git a/source/main/ipc/get-logs.ts b/source/main/ipc/get-logs.ts index fd69be8969..47aa61e2b9 100644 --- a/source/main/ipc/get-logs.ts +++ b/source/main/ipc/get-logs.ts @@ -1,4 +1,3 @@ -// @flow import { includes, sortBy } from 'lodash'; import fs from 'fs'; import path from 'path'; @@ -19,9 +18,7 @@ import type { GetLogsMainResponse, } from '../../common/ipc/api'; import type { LogFiles } from '../../renderer/app/types/LogTypes'; - // IpcChannel - export const getLogsChannel: MainIpcChannel< GetLogsRendererRequest, GetLogsMainResponse @@ -64,16 +61,19 @@ export default () => { getLogsChannel.onRequest(() => { // check if pub folder exists and create array of log file names const logFiles: Array = []; + if (fs.existsSync(pubLogsFolderPath)) { const files = fs.readdirSync(pubLogsFolderPath).sort().reverse(); - let nodeLogsIncluded = 0; let walletLogsIncluded = 0; let launcherLogsIncluded = 0; + for (let i = 0; i < files.length; i++) { const currentFile = path.join(pubLogsFolderPath, files[i]); + if (fs.statSync(currentFile).isFile()) { const fileName = path.basename(currentFile); + if (isFileAllowed(fileName)) { logFiles.push(fileName); } else if (isFileNodeLog(fileName, nodeLogsIncluded)) { @@ -98,7 +98,6 @@ export default () => { return nameSegments.shift() + nameSegments.join('').length; }), }; - return Promise.resolve(logs); }); }; diff --git a/source/main/ipc/getDesktopDirectoryPathChannel.ts b/source/main/ipc/getDesktopDirectoryPathChannel.ts index 7d1245a752..8f591bc27c 100644 --- a/source/main/ipc/getDesktopDirectoryPathChannel.ts +++ b/source/main/ipc/getDesktopDirectoryPathChannel.ts @@ -1,13 +1,10 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { GET_DESKTOP_DIRECTORY_PATH_CHANNEL } from '../../common/ipc/api'; import type { GetDesktopDirectoryPathRendererRequest, GetDesktopDirectoryPathMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const getDesktopDirectoryPathChannel: MainIpcChannel< GetDesktopDirectoryPathRendererRequest, GetDesktopDirectoryPathMainResponse diff --git a/source/main/ipc/getHardwareWalletChannel.ts b/source/main/ipc/getHardwareWalletChannel.ts index 3ab71a57a8..240f8c80fd 100644 --- a/source/main/ipc/getHardwareWalletChannel.ts +++ b/source/main/ipc/getHardwareWalletChannel.ts @@ -1,4 +1,3 @@ -// @flow import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'; import { getDevices } from '@ledgerhq/hw-transport-node-hid-noevents'; import AppAda, { utils } from '@cardano-foundation/ledgerjs-hw-app-cardano'; @@ -9,8 +8,7 @@ import TrezorConnect, { TRANSPORT, TRANSPORT_EVENT, UI, - UI_EVENT, - // @ts-ignore + UI_EVENT, // @ts-ignore } from 'trezor-connect'; import { find, get, includes, last, omit } from 'lodash'; import { derivePublic as deriveChildXpub } from 'cardano-crypto.js'; @@ -55,84 +53,67 @@ import { SIGN_TRANSACTION_LEDGER_CHANNEL, SIGN_TRANSACTION_TREZOR_CHANNEL, } from '../../common/ipc/api'; - import { logger } from '../utils/logging'; import type { HardwareWalletTransportDeviceRequest } from '../../common/types/hardware-wallets.types'; - type ListenerType = { - unsubscribe: Function, + unsubscribe: (...args: Array) => any; }; - type ledgerStatusType = { - listening: boolean, - Listener: ListenerType | null, + listening: boolean; + Listener: ListenerType | null; }; - export const ledgerStatus: ledgerStatusType = { listening: false, Listener: null, }; - const getHardwareWalletTransportChannel: MainIpcChannel< getHardwareWalletTransportRendererRequest, getHardwareWalletTransportMainResponse > = new MainIpcChannel(GET_HARDWARE_WALLET_TRANSPORT_CHANNEL); - const getExtendedPublicKeyChannel: MainIpcChannel< getExtendedPublicKeyRendererRequest, getExtendedPublicKeyMainResponse > = new MainIpcChannel(GET_EXTENDED_PUBLIC_KEY_CHANNEL); - const getCardanoAdaAppChannel: MainIpcChannel< getCardanoAdaAppRendererRequest, getCardanoAdaAppMainResponse > = new MainIpcChannel(GET_CARDANO_ADA_APP_CHANNEL); - const getHardwareWalletConnectionChannel: MainIpcChannel< getHardwareWalletConnectiontMainRequest, getHardwareWalletConnectiontRendererResponse > = new MainIpcChannel(GET_HARDWARE_WALLET_CONNECTION_CHANNEL); - const signTransactionLedgerChannel: MainIpcChannel< signTransactionLedgerRendererRequest, signTransactionLedgerMainResponse > = new MainIpcChannel(SIGN_TRANSACTION_LEDGER_CHANNEL); - const signTransactionTrezorChannel: MainIpcChannel< signTransactionTrezorRendererRequest, signTransactionTrezorMainResponse > = new MainIpcChannel(SIGN_TRANSACTION_TREZOR_CHANNEL); - const resetTrezorActionChannel: MainIpcChannel< resetTrezorActionRendererRequest, resetTrezorActionMainResponse > = new MainIpcChannel(RESET_ACTION_TREZOR_CHANNEL); - const handleInitTrezorConnectChannel: MainIpcChannel< handleInitTrezorConnectRendererRequest, handleInitTrezorConnectMainResponse > = new MainIpcChannel(GET_INIT_TREZOR_CONNECT_CHANNEL); - const handleInitLedgerConnectChannel: MainIpcChannel< handleInitLedgerConnectRendererRequest, handleInitLedgerConnectMainResponse > = new MainIpcChannel(GET_INIT_LEDGER_CONNECT_CHANNEL); - const deriveXpubChannel: MainIpcChannel< deriveXpubRendererRequest, deriveXpubMainResponse > = new MainIpcChannel(DERIVE_XPUB_CHANNEL); - const deriveAddressChannel: MainIpcChannel< deriveAddressRendererRequest, deriveAddressMainResponse > = new MainIpcChannel(DERIVE_ADDRESS_CHANNEL); - const showAddressChannel: MainIpcChannel< showAddressRendererRequest, showAddressMainResponse > = new MainIpcChannel(SHOW_ADDRESS_CHANNEL); - let devicesMemo = {}; class EventObserver { @@ -161,6 +142,7 @@ class EventObserver { if (event.type === 'add') { if (!devicesMemo[device.path]) { logger.info('[HW-DEBUG] CONSTRUCTOR ADD'); + try { // @ts-ignore const transport = await TransportNodeHid.open(device.path); @@ -174,12 +156,14 @@ class EventObserver { { disconnected: false, deviceType: 'ledger', - deviceId: null, // Available only when Cardano APP opened - deviceModel: deviceModel.id, // e.g. nanoS - deviceName: deviceModel.productName, // e.g. Test Name + deviceId: null, + // Available only when Cardano APP opened + deviceModel: deviceModel.id, + // e.g. nanoS + deviceName: deviceModel.productName, + // e.g. Test Name path: device.path, - }, - // @ts-ignore + }, // @ts-ignore this.mainWindow ); } catch (e) { @@ -193,15 +177,18 @@ class EventObserver { { disconnected: true, deviceType: 'ledger', - deviceId: null, // Available only when Cardano APP opened - deviceModel: deviceModel.id, // e.g. nanoS - deviceName: deviceModel.productName, // e.g. Test Name + deviceId: null, + // Available only when Cardano APP opened + deviceModel: deviceModel.id, + // e.g. nanoS + deviceName: deviceModel.productName, + // e.g. Test Name path: device.path, - }, - // @ts-ignore + }, // @ts-ignore this.mainWindow ); } + logger.info('[HW-DEBUG] CONSTRUCTOR Memo'); } else { logger.info('[HW-DEBUG] Ledger NEXT - connection NOT changed'); @@ -237,7 +224,10 @@ export const handleHardwareWalletRequests = async ( if (event.payload && event.payload.device) { TrezorConnect.uiResponse({ type: UI.RECEIVE_PASSPHRASE, - payload: { value: '', passphraseOnDevice: true }, + payload: { + value: '', + passphraseOnDevice: true, + }, }); } } @@ -250,8 +240,7 @@ export const handleHardwareWalletRequests = async ( error: { payload: event.payload, }, - }, - // @ts-ignore + }, // @ts-ignore mainWindow ); } @@ -273,13 +262,15 @@ export const handleHardwareWalletRequests = async ( { disconnected: event.type === DEVICE.DISCONNECT, deviceType: 'trezor', - deviceId: event.payload.id, // 123456ABCDEF - deviceModel: event.payload.features.model, // e.g. T - deviceName: event.payload.label, // e.g. Test Name + deviceId: event.payload.id, + // 123456ABCDEF + deviceModel: event.payload.features.model, + // e.g. T + deviceName: event.payload.label, + // e.g. Test Name path: event.payload.path, eventType: event.type, - }, - // @ts-ignore + }, // @ts-ignore mainWindow ); } @@ -292,13 +283,18 @@ export const handleHardwareWalletRequests = async ( logger.info('[HW-DEBUG] getHardwareWalletTransportChannel', devicePath); // Connected Trezor device info let deviceFeatures; + if (isTrezor) { logger.info('[HW-DEBUG] getHardwareWalletTransportChannel::TREZOR '); + try { deviceFeatures = await TrezorConnect.getFeatures({ - device: { path: devicePath }, + device: { + path: devicePath, + }, }); logger.info('[HW-DEBUG] Trezor connect success'); + if (deviceFeatures && deviceFeatures.success) { const { major_version: majorVersion, @@ -312,12 +308,14 @@ export const handleHardwareWalletRequests = async ( return Promise.resolve({ deviceId, deviceType: 'trezor', - deviceModel: model, // e.g. "1" or "T" + deviceModel: model, + // e.g. "1" or "T" deviceName: label, path: devicePath, firmwareVersion, }); } + throw deviceFeatures.payload; // Error is in payload } catch (e) { logger.info('[HW-DEBUG] Trezor connect error'); @@ -330,7 +328,6 @@ export const handleHardwareWalletRequests = async ( let transportList = await TransportNodeHid.list(); let hw; let lastConnectedPath; - logger.info( `[HW-DEBUG] getHardwareWalletTransportChannel::transportList=${JSON.stringify( transportList @@ -350,17 +347,14 @@ export const handleHardwareWalletRequests = async ( lastConnectedPath )}` ); - const deviceList = getDevices(); logger.info( `[HW-DEBUG] getHardwareWalletTransportChannel::deviceList=${JSON.stringify( deviceList )}` ); - const device = find(deviceList, ['path', lastConnectedPath]); logger.info('[HW-DEBUG] INIT NEW transport - DONE'); - // @ts-ignore deviceConnection = new AppAda(hw); devicesMemo[lastConnectedPath] = { @@ -377,6 +371,7 @@ export const handleHardwareWalletRequests = async ( logger.info('[HW-DEBUG] USE First'); // @ts-ignore lastConnectedPath = transportList[0]; // eslint-disable-line + if (devicesMemo[lastConnectedPath]) { hw = devicesMemo[lastConnectedPath].transport; deviceConnection = devicesMemo[lastConnectedPath].AdaConnection; @@ -391,20 +386,25 @@ export const handleHardwareWalletRequests = async ( // @ts-ignore const { deviceModel } = hw; + if (deviceModel) { logger.info( '[HW-DEBUG] getHardwareWalletTransportChannel:: LEDGER case RESPONSE' ); const { id, productName } = deviceModel; return Promise.resolve({ - deviceId: null, // @TODO - to be defined + deviceId: null, + // @TODO - to be defined deviceType: 'ledger', - deviceModel: id, // e.g. nanoS - deviceName: productName, // e.g. Ledger Nano S + deviceModel: id, + // e.g. nanoS + deviceName: productName, + // e.g. Ledger Nano S path: lastConnectedPath || devicePath, firmwareVersion: null, }); } + throw new Error('Missing device info'); } catch (error) { logger.info('[HW-DEBUG] ERROR on getHardwareWalletTransportChannel'); @@ -412,7 +412,6 @@ export const handleHardwareWalletRequests = async ( } } ); - handleInitTrezorConnectChannel.onRequest(async () => { logger.info('[HW-DEBUG] INIT TREZOR'); resetTrezorListeners(); @@ -421,14 +420,18 @@ export const handleHardwareWalletRequests = async ( appUrl: 'http://your.application.com', }); TrezorConnect.init({ - popup: false, // render your own UI - webusb: false, // webusb is not supported in electron - debug: true, // see what's going on inside connect + popup: false, + // render your own UI + webusb: false, + // webusb is not supported in electron + debug: true, + // see what's going on inside connect // lazyLoad: true, // set to "false" (default) if you want to start communication with bridge on application start (and detect connected device right away) // set it to "true", then trezor-connect will not be initialized until you call some TrezorConnect.method() // this is useful when you don't know if you are dealing with Trezor user manifest: { - email: 'email@developer.com', // @TODO + email: 'email@developer.com', + // @TODO appUrl: 'http://your.application.com', // @TODO }, }) @@ -437,13 +440,14 @@ export const handleHardwareWalletRequests = async ( throw error; }); }); - handleInitLedgerConnectChannel.onRequest(async () => { logger.info('[HW-DEBUG] INIT LEDGER'); observer = new EventObserver(mainWindow); + try { logger.info('[HW-DEBUG] OBSERVER INIT'); TransportNodeHid.setListenDevicesDebounce(1000); // Defaults to 500ms + ledgerStatus.Listener = TransportNodeHid.listen(observer); ledgerStatus.listening = true; logger.info('[HW-DEBUG] OBSERVER INIT - listener started'); @@ -452,10 +456,10 @@ export const handleHardwareWalletRequests = async ( ledgerStatus.listening = false; } }); - deriveXpubChannel.onRequest(async (params) => { const { parentXpubHex, lastIndex, derivationScheme } = params; const parentXpub = utils.hex_to_buf(parentXpubHex); + try { const xpub = deriveChildXpub(parentXpub, lastIndex, derivationScheme); return utils.buf_to_hex(xpub); @@ -463,7 +467,6 @@ export const handleHardwareWalletRequests = async ( throw e; } }); - deriveAddressChannel.onRequest(async (params) => { const { addressType, @@ -482,6 +485,7 @@ export const handleHardwareWalletRequests = async ( try { deviceConnection = get(devicesMemo, [devicePath, 'AdaConnection']); logger.info('[HW-DEBUG] DERIVE ADDRESS'); + if (isTrezor) { const result = await TrezorConnect.cardanoGetAddress({ device: { @@ -517,7 +521,6 @@ export const handleHardwareWalletRequests = async ( }, }, }); - const encodedAddress = utils.bech32_encodeAddress( utils.hex_to_buf(addressHex) ); @@ -526,7 +529,6 @@ export const handleHardwareWalletRequests = async ( throw e; } }); - showAddressChannel.onRequest(async (params) => { const { addressType, @@ -573,9 +575,9 @@ export const handleHardwareWalletRequests = async ( throw e; } }); - getCardanoAdaAppChannel.onRequest(async (request) => { const { path } = request; + try { if (!path || !devicesMemo[path]) { logger.info('[HW-DEBUG] Device not instantiated!', { @@ -583,8 +585,11 @@ export const handleHardwareWalletRequests = async ( devicesMemo, }); // eslint-disable-next-line - throw { code: 'DEVICE_NOT_CONNECTED' }; + throw { + code: 'DEVICE_NOT_CONNECTED', + }; } + logger.info(`[HW-DEBUG] GET CARDANO APP path:${path}`); deviceConnection = devicesMemo[path].AdaConnection; const { version } = await deviceConnection.getVersion(); @@ -618,6 +623,7 @@ export const handleHardwareWalletRequests = async ( isDisconnectError, isDeviceDisconnected, }); + if (path && !isDeviceDisconnected && isDisconnectError) { // @ts-ignore const oldPath = path; @@ -637,25 +643,24 @@ export const handleHardwareWalletRequests = async ( } ); // eslint-disable-next-line - throw { code: 'NO_DEVICE_PATHS', errorCode, errorName }; + throw { + code: 'NO_DEVICE_PATHS', + errorCode, + errorName, + }; } const { device: oldDevice } = deviceMemo; - // @ts-ignore const newTransport = await TransportNodeHid.open(newPath); const newDeviceConnection = new AppAda(newTransport); - const deviceList = getDevices(); const newDevice = find(deviceList, ['path', newPath]); const hasDeviceChanged = newDevice.productId !== oldDevice.productId; - // TODO: remove deviceConnection = newDeviceConnection; - // Purge old device memo devicesMemo = omit(devicesMemo, [oldPath]); - logger.info( '[HW-DEBUG] ERROR in Cardano App (Re-establish Connection)', { @@ -667,7 +672,6 @@ export const handleHardwareWalletRequests = async ( newDevice: newDevice || 'NOT_FOUND', } ); - // Update devicesMemo devicesMemo[newPath] = { device: newDevice, @@ -677,24 +681,31 @@ export const handleHardwareWalletRequests = async ( if (hasPathChanged) { // eslint-disable-next-line - throw { code: 'DEVICE_PATH_CHANGED', path: newPath }; + throw { + code: 'DEVICE_PATH_CHANGED', + path: newPath, + }; } } + throw error; } }); - getExtendedPublicKeyChannel.onRequest(async (params) => { // Params example: // { path: "1852'/1815'/0'", isTrezor: false, devicePath: null } logger.info('[HW-DEBUG] getExtendedPublicKeyChannel'); const { path, isTrezor, devicePath } = params; + try { if (isTrezor) { // Check if Trezor instantiated const deviceFeatures = await TrezorConnect.getFeatures({ - device: { path: devicePath }, + device: { + path: devicePath, + }, }); + if (deviceFeatures.success) { const extendedPublicKeyResponse = await TrezorConnect.cardanoGetPublicKey( { @@ -702,9 +713,11 @@ export const handleHardwareWalletRequests = async ( showOnTrezor: true, } ); + if (!extendedPublicKeyResponse.success) { throw extendedPublicKeyResponse.payload; } + const extendedPublicKey = get( extendedPublicKeyResponse, ['payload', 'node'], @@ -715,6 +728,7 @@ export const handleHardwareWalletRequests = async ( chainCodeHex: extendedPublicKey.chain_code, }); } + throw new Error('Trezor device not connected'); } @@ -739,7 +753,6 @@ export const handleHardwareWalletRequests = async ( throw error; } }); - // @TODO - validityIntervalStart is not working with Cardano App 2.1.0 signTransactionLedgerChannel.onRequest(async (params) => { const { @@ -765,6 +778,7 @@ export const handleHardwareWalletRequests = async ( if (!deviceConnection) { throw new Error('Device not connected!'); } + const signedTransaction = await deviceConnection.signTransaction({ signingMode, additionalWitnessPaths, @@ -787,7 +801,6 @@ export const handleHardwareWalletRequests = async ( throw e; } }); - signTransactionTrezorChannel.onRequest(async (params) => { const { inputs, @@ -823,7 +836,9 @@ export const handleHardwareWalletRequests = async ( signingMode, }; const signedTransaction = await TrezorConnect.cardanoSignTransaction({ - device: { path: devicePath }, + device: { + path: devicePath, + }, ...dataToSign, }); return Promise.resolve(signedTransaction); @@ -831,7 +846,6 @@ export const handleHardwareWalletRequests = async ( throw e; } }); - resetTrezorActionChannel.onRequest(async () => { TrezorConnect.cancel('Method_Cancel'); }); diff --git a/source/main/ipc/getRecoveryWalletIdChannel.ts b/source/main/ipc/getRecoveryWalletIdChannel.ts index e4dce21678..fb9187d621 100644 --- a/source/main/ipc/getRecoveryWalletIdChannel.ts +++ b/source/main/ipc/getRecoveryWalletIdChannel.ts @@ -1,4 +1,3 @@ -// @flow import { Byron, Icarus, newPublicId } from 'cardano-js/dist/hd'; import { MainIpcChannel } from './lib/MainIpcChannel'; import { GET_WASM_BINARY_CHANNEL } from '../../common/ipc/api'; @@ -6,23 +5,23 @@ import type { getRecoveryWalletIdRendererRequest, getRecoveryWalletIdMainResponse, } from '../../common/ipc/api'; - const getRecoveryWalletIdChannel: MainIpcChannel< getRecoveryWalletIdRendererRequest, getRecoveryWalletIdMainResponse > = new MainIpcChannel(GET_WASM_BINARY_CHANNEL); - export default () => { getRecoveryWalletIdChannel.onRequest( async (recoveryPhrase: Array) => { try { let xprv; let cc; + if (recoveryPhrase.length === 12) { [xprv, cc] = await Byron.generateMasterKey(recoveryPhrase); } else { [xprv, cc] = await Icarus.generateMasterKey(recoveryPhrase); } + const walletId: string = newPublicId(xprv.to_public(), cc); return Promise.resolve(walletId); } catch (err) { diff --git a/source/main/ipc/getStateDirectoryPathChannel.ts b/source/main/ipc/getStateDirectoryPathChannel.ts index 755df622cd..75e542c7c5 100644 --- a/source/main/ipc/getStateDirectoryPathChannel.ts +++ b/source/main/ipc/getStateDirectoryPathChannel.ts @@ -1,13 +1,10 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { GET_STATE_DIRECTORY_PATH_CHANNEL } from '../../common/ipc/api'; import type { GetStateDirectoryPathRendererRequest, GetStateDirectoryPathMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const getStateDirectoryPathChannel: MainIpcChannel< GetStateDirectoryPathRendererRequest, GetStateDirectoryPathMainResponse diff --git a/source/main/ipc/getSystemLocaleChannel.ts b/source/main/ipc/getSystemLocaleChannel.ts index 9b424eba48..bbece09423 100644 --- a/source/main/ipc/getSystemLocaleChannel.ts +++ b/source/main/ipc/getSystemLocaleChannel.ts @@ -1,13 +1,10 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { GET_SYSTEM_LOCALE_CHANNEL } from '../../common/ipc/api'; import type { GetSystemLocaleRendererRequest, GetSystemLocaleMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const getSystemLocaleChannel: MainIpcChannel< GetSystemLocaleRendererRequest, GetSystemLocaleMainResponse diff --git a/source/main/ipc/index.ts b/source/main/ipc/index.ts index f638aaca28..db47c80a28 100644 --- a/source/main/ipc/index.ts +++ b/source/main/ipc/index.ts @@ -1,4 +1,3 @@ -// @flow import type { BrowserWindow } from 'electron'; import compressLogsApi from './compress-logs'; import downloadLogsApi from './download-logs'; @@ -22,7 +21,6 @@ import { handleAddressIntrospectionRequests } from './introspect-address'; import { handleManageAppUpdateRequests } from './manageAppUpdateChannel'; import { openExternalUrlChannel } from './open-external-url'; import { openLocalDirectoryChannel } from './open-local-directory'; - export default (window: BrowserWindow) => { compressLogsApi(); downloadLogsApi(); diff --git a/source/main/ipc/introspect-address.ts b/source/main/ipc/introspect-address.ts index 7d4d832c77..3642fd50de 100644 --- a/source/main/ipc/introspect-address.ts +++ b/source/main/ipc/introspect-address.ts @@ -1,4 +1,3 @@ -// @flow import { spawnSync } from 'child_process'; import { MainIpcChannel } from './lib/MainIpcChannel'; import { INTROSPECT_ADDRESS_CHANNEL } from '../../common/ipc/api'; @@ -6,14 +5,11 @@ import type { IntrospectAddressRendererRequest, IntrospectAddressMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const introspectAddressChannel: MainIpcChannel< IntrospectAddressRendererRequest, IntrospectAddressMainResponse > = new MainIpcChannel(INTROSPECT_ADDRESS_CHANNEL); - export const handleAddressIntrospectionRequests = () => { introspectAddressChannel.onReceive( ({ input }: IntrospectAddressRendererRequest) => @@ -21,15 +17,22 @@ export const handleAddressIntrospectionRequests = () => { const { stdout, stderr } = spawnSync( 'cardano-address', ['address', 'inspect'], - { input } + { + input, + } ); + if (stderr.toString() !== '') { if (stderr.toString().match(/user error/g) !== null) { return resolve('Invalid'); } + return reject(new Error(stderr.toString())); } - return resolve({ introspection: JSON.parse(stdout.toString()) }); + + return resolve({ + introspection: JSON.parse(stdout.toString()), + }); }) ); }; diff --git a/source/main/ipc/lib/MainIpcChannel.ts b/source/main/ipc/lib/MainIpcChannel.ts index 812d206cfc..3459a949d8 100644 --- a/source/main/ipc/lib/MainIpcChannel.ts +++ b/source/main/ipc/lib/MainIpcChannel.ts @@ -1,4 +1,3 @@ -// @flow import { ipcMain } from 'electron'; import { IpcChannel } from '../../../common/ipc/lib/IpcChannel'; import type { @@ -37,7 +36,7 @@ export class MainIpcChannel extends IpcChannel< } onRequest( - handler: (Incoming) => Promise, + handler: (arg0: Incoming) => Promise, receiver: IpcReceiver = ipcMain ): void { super.onRequest(handler, receiver); diff --git a/source/main/ipc/lib/MainIpcConversation.ts b/source/main/ipc/lib/MainIpcConversation.ts index fb7e927f36..b4f0e50d47 100644 --- a/source/main/ipc/lib/MainIpcConversation.ts +++ b/source/main/ipc/lib/MainIpcConversation.ts @@ -1,4 +1,3 @@ -// @flow import { ipcMain } from 'electron'; import type { IpcReceiver, @@ -37,7 +36,7 @@ export class MainIpcConversation extends IpcConversation< } onRequest( - handler: (Incoming) => Promise, + handler: (arg0: Incoming) => Promise, receiver: IpcReceiver = ipcMain ): void { super.onRequest(handler, receiver); diff --git a/source/main/ipc/load-asset.ts b/source/main/ipc/load-asset.ts index 8767852d59..69fae26331 100644 --- a/source/main/ipc/load-asset.ts +++ b/source/main/ipc/load-asset.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import path from 'path'; import { MainIpcChannel } from './lib/MainIpcChannel'; @@ -7,12 +6,10 @@ import type { LoadAssetRendererRequest, LoadAssetMainResponse, } from '../../common/ipc/api'; - const loadAssetChannel: MainIpcChannel< LoadAssetRendererRequest, LoadAssetMainResponse > = new MainIpcChannel(LOAD_ASSET_CHANNEL); - export default () => { loadAssetChannel.onRequest((request: LoadAssetRendererRequest) => { const asset = path.resolve(__dirname, `../renderer/${request.fileName}`); diff --git a/source/main/ipc/manageAppUpdateChannel.ts b/source/main/ipc/manageAppUpdateChannel.ts index 912914f05f..f49abb9f37 100644 --- a/source/main/ipc/manageAppUpdateChannel.ts +++ b/source/main/ipc/manageAppUpdateChannel.ts @@ -1,4 +1,3 @@ -// @flow import { app, shell } from 'electron'; import fs from 'fs'; import shasum from 'shasum'; @@ -15,14 +14,11 @@ import { environment } from '../environment'; import { safeExitWithCode } from '../utils/safeExitWithCode'; import { logger } from '../utils/logging'; import { launcherConfig } from '../config'; - // IpcChannel - const manageAppUpdateChannel: MainIpcChannel< Request, Response > = new MainIpcChannel(MANAGE_APP_UPDATE); - const logPrefix = 'appUpdateInstall'; const getMessage = (functionPrefix: string, message?: string): string => { @@ -33,10 +29,10 @@ const getMessage = (functionPrefix: string, message?: string): string => { export const handleManageAppUpdateRequests = (window: BrowserWindow) => { const response = ( - success: ?boolean, + success: boolean | null | undefined, functionPrefix: string, - messageText?: string = '', - _data?: Object + messageText: string = '', + _data?: Record ): Response => { let status = statuses.PROGRESS; if (success === true) status = statuses.SUCCESS; @@ -44,10 +40,7 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { const log = success === false ? logger.error : logger.info; const message = getMessage(functionPrefix, messageText); log(getMessage(functionPrefix, message)); - const data = { - ..._data, - message, - }; + const data = { ..._data, message }; manageAppUpdateChannel.send( { status, @@ -66,17 +59,21 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { const checkInstallerHash = (filePath, expectedHash): boolean => { const { name: functionPrefix } = checkInstallerHash; const fileBuffer = fs.readFileSync(filePath); + if (!fileBuffer) { logger.error(getMessage(functionPrefix, 'Unable to read the installer:')); return false; } + const fileHash = shasum(fileBuffer, 'sha256'); + if (fileHash !== expectedHash) { logger.error(getMessage(functionPrefix, 'Hash does not match'), { filePath, }); return false; } + return true; }; @@ -92,6 +89,7 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { const info = progressData.toString().split(/\n/); const progress = info.reduce((prog, infoItem) => { const [, progressStr] = infoItem.split('PROG '); + if (progressStr) { const [item, total] = `${progressStr}`.trim().split('/'); return parseInt( @@ -99,6 +97,7 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { 10 ); } + return prog; }, 0); response(null, functionPrefix, 'installation progress.', { @@ -120,10 +119,13 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { false, functionPrefix, `updater closed with code ${code}`, - { code } + { + code, + } ) ); } + response(null, functionPrefix, 'installation progress.', { info: 'stdio closed', }); @@ -132,7 +134,9 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { success = false; logger.error(`on error with ${error}`); reject( - response(false, functionPrefix, 'installation failed', { error }) + response(false, functionPrefix, 'installation failed', { + error, + }) ); }); updater.on('exit', (code) => { @@ -144,14 +148,18 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { false, functionPrefix, `updater exited with code ${code}`, - { code } + { + code, + } ) ); } + if (!success) { logger.error('exit without success'); return reject(); } + safeExitWithCode(20); return resolve(response(true, functionPrefix)); }); @@ -160,19 +168,17 @@ export const handleManageAppUpdateRequests = (window: BrowserWindow) => { manageAppUpdateChannel.onRequest(async ({ filePath, hash: expectedHash }) => { const functionPrefix = 'onRequest'; - const fileExists = fs.existsSync(filePath); if (!fileExists) return response(false, functionPrefix, 'Installer not found:', { - info: { filePath }, + info: { + filePath, + }, }); - const installerHash = checkInstallerHash(filePath, expectedHash); if (!installerHash) return response(false, functionPrefix); - // For linux we execute the installer file if (environment.isLinux) return installUpdate(filePath); - // For other OS we launch the installer file after the app was closed app.on('quit', () => { shell.openPath(filePath); diff --git a/source/main/ipc/open-external-url.ts b/source/main/ipc/open-external-url.ts index 1c8325589a..c62a6d6f6c 100644 --- a/source/main/ipc/open-external-url.ts +++ b/source/main/ipc/open-external-url.ts @@ -1,4 +1,3 @@ -// @flow import { shell } from 'electron'; import { MainIpcChannel } from './lib/MainIpcChannel'; import { OPEN_EXTERNAL_URL_CHANNEL } from '../../common/ipc/api'; @@ -6,14 +5,11 @@ import type { OpenExternalUrlMainResponse, OpenExternalUrlRendererRequest, } from '../../common/ipc/api'; - // IpcChannel - export const openExternalUrlChannel: MainIpcChannel< OpenExternalUrlRendererRequest, OpenExternalUrlMainResponse > = new MainIpcChannel(OPEN_EXTERNAL_URL_CHANNEL); - openExternalUrlChannel.onReceive((url: OpenExternalUrlRendererRequest) => shell.openExternal(url) ? Promise.resolve() : Promise.reject() ); diff --git a/source/main/ipc/open-local-directory.ts b/source/main/ipc/open-local-directory.ts index fe44b31fcb..31d23ecd45 100644 --- a/source/main/ipc/open-local-directory.ts +++ b/source/main/ipc/open-local-directory.ts @@ -1,4 +1,3 @@ -// @flow import { shell } from 'electron'; import { MainIpcChannel } from './lib/MainIpcChannel'; import { OPEN_LOCAL_DIRECTORY_CHANNEL } from '../../common/ipc/api'; @@ -6,14 +5,11 @@ import type { OpenLocalDirectoryMainResponse, OpenLocalDirectoryRendererRequest, } from '../../common/ipc/api'; - // IpcChannel - export const openLocalDirectoryChannel: MainIpcChannel< OpenLocalDirectoryRendererRequest, OpenLocalDirectoryMainResponse > = new MainIpcChannel(OPEN_LOCAL_DIRECTORY_CHANNEL); - openLocalDirectoryChannel.onReceive((path: OpenLocalDirectoryRendererRequest) => shell.openPath(path) ? Promise.resolve() : Promise.reject() ); diff --git a/source/main/ipc/rebuild-application-menu.ts b/source/main/ipc/rebuild-application-menu.ts index cc65aeb0a6..6fe156825c 100644 --- a/source/main/ipc/rebuild-application-menu.ts +++ b/source/main/ipc/rebuild-application-menu.ts @@ -1,11 +1,9 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { REBUILD_APP_MENU_CHANNEL } from '../../common/ipc/api'; import type { RebuildAppMenuRendererRequest, RebuildAppMenuMainResponse, } from '../../common/ipc/api'; - export const rebuildApplicationMenu: // IpcChannel MainIpcChannel< RebuildAppMenuRendererRequest, diff --git a/source/main/ipc/resize-window.ts b/source/main/ipc/resize-window.ts index 6367451b0c..03f9be3ba8 100644 --- a/source/main/ipc/resize-window.ts +++ b/source/main/ipc/resize-window.ts @@ -1,7 +1,5 @@ -// @flow import { ipcMain } from 'electron'; import type { BrowserWindow } from 'electron'; - export default (window: BrowserWindow) => { ipcMain.on('resize-window', (event, { width, height, animate }) => { if (event.sender !== window.webContents) return; diff --git a/source/main/ipc/saveQRCodeImageChannel.ts b/source/main/ipc/saveQRCodeImageChannel.ts index 12118ebd70..d9e4351e3b 100644 --- a/source/main/ipc/saveQRCodeImageChannel.ts +++ b/source/main/ipc/saveQRCodeImageChannel.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import qr from 'qr-image'; import { MainIpcChannel } from './lib/MainIpcChannel'; @@ -7,18 +6,17 @@ import type { GenerateQRCodeRendererRequest, GenerateQRCodeMainResponse, } from '../../common/ipc/api'; - export const saveQRCodeImageChannel: // IpcChannel MainIpcChannel< GenerateQRCodeRendererRequest, GenerateQRCodeMainResponse > = new MainIpcChannel(GENERATE_QRCODE_CHANNEL); - export const saveQRCodeImageRequests = () => { saveQRCodeImageChannel.onReceive( (request: GenerateQRCodeRendererRequest) => new Promise((resolve, reject) => { const { address, filePath } = request; + try { const qrCodeImage = qr.image(address, { type: 'png', diff --git a/source/main/ipc/set-log-state-snapshot.ts b/source/main/ipc/set-log-state-snapshot.ts index 768907c12d..78a3f75d9e 100644 --- a/source/main/ipc/set-log-state-snapshot.ts +++ b/source/main/ipc/set-log-state-snapshot.ts @@ -1,13 +1,10 @@ -// @flow import { MainIpcChannel } from './lib/MainIpcChannel'; import { SET_STATE_SNAPSHOT_LOG_CHANNEL } from '../../common/ipc/api'; import type { SetStateSnapshotLogRendererRequest, SetStateSnapshotLogMainResponse, } from '../../common/ipc/api'; - // IpcChannel - export const setStateSnapshotLogChannel: MainIpcChannel< SetStateSnapshotLogMainResponse, SetStateSnapshotLogRendererRequest diff --git a/source/main/ipc/show-file-dialog-channels.ts b/source/main/ipc/show-file-dialog-channels.ts index aa89132d87..c489245ae2 100644 --- a/source/main/ipc/show-file-dialog-channels.ts +++ b/source/main/ipc/show-file-dialog-channels.ts @@ -1,4 +1,3 @@ -// @flow import { dialog } from 'electron'; import type { BrowserWindow } from 'electron'; import { MainIpcChannel } from './lib/MainIpcChannel'; @@ -12,19 +11,16 @@ import type { ShowSaveDialogRendererRequest, ShowSaveDialogMainResponse, } from '../../common/ipc/api'; - export const showOpenDialogChannel: // IpcChannel MainIpcChannel< ShowOpenDialogRendererRequest, ShowOpenDialogMainResponse > = new MainIpcChannel(SHOW_OPEN_DIALOG_CHANNEL); - export const showSaveDialogChannel: // IpcChannel MainIpcChannel< ShowSaveDialogRendererRequest, ShowSaveDialogMainResponse > = new MainIpcChannel(SHOW_SAVE_DIALOG_CHANNEL); - export const handleFileDialogRequests = (window: BrowserWindow) => { showOpenDialogChannel.onReceive((request: ShowOpenDialogRendererRequest) => dialog.showOpenDialog(window, request) diff --git a/source/main/menus/MenuActions.types.ts b/source/main/menus/MenuActions.types.ts index 00077dccb3..21f59e3aa6 100644 --- a/source/main/menus/MenuActions.types.ts +++ b/source/main/menus/MenuActions.types.ts @@ -1,10 +1,9 @@ -// @flow export type MenuActions = { - toggleBlankScreenFix: Function, - setRtsFlags: Function, - openAboutDialog: Function, - openDaedalusDiagnosticsDialog: Function, - openItnRewardsRedemptionDialog: Function, - openSettingsPage: Function, - openWalletSettingsPage: Function, + toggleBlankScreenFix: (...args: Array) => any; + setRtsFlags: (...args: Array) => any; + openAboutDialog: (...args: Array) => any; + openDaedalusDiagnosticsDialog: (...args: Array) => any; + openItnRewardsRedemptionDialog: (...args: Array) => any; + openSettingsPage: (...args: Array) => any; + openWalletSettingsPage: (...args: Array) => any; }; diff --git a/source/main/menus/osx.ts b/source/main/menus/osx.ts index 300454e90f..067566f9b6 100644 --- a/source/main/menus/osx.ts +++ b/source/main/menus/osx.ts @@ -1,4 +1,3 @@ -// @flow import { compact } from 'lodash'; import { shell } from 'electron'; import type { App, BrowserWindow } from 'electron'; @@ -9,12 +8,10 @@ import { showUiPartChannel } from '../ipc/control-ui-parts'; import { NOTIFICATIONS } from '../../common/ipc/constants'; import { generateSupportRequestLink } from '../../common/utils/reporting'; import { getRtsFlags } from '../utils/rtsFlags'; - const id = 'menu'; const { isBlankScreenFixActive, network } = environment; const rtsFlags = getRtsFlags(network); const rtsFlagsEnabled: boolean = !!rtsFlags?.length && rtsFlags.length > 0; - export const osxMenu = ( app: App, window: BrowserWindow, @@ -22,45 +19,59 @@ export const osxMenu = ( translations: {}, locale: string, isNavigationEnabled: boolean, - translation: Function = getTranslation(translations, id) + translation: (...args: Array) => any = getTranslation(translations, id) ) => [ { label: translation('daedalus'), submenu: compact([ { label: translation('daedalus.about'), + click() { actions.openAboutDialog(); }, + enabled: isNavigationEnabled, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('daedalus.redeemItnRewards'), accelerator: 'Command+T', + click() { actions.openItnRewardsRedemptionDialog(); }, + enabled: isNavigationEnabled, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('daedalus.settings'), accelerator: 'Command+,', + click() { actions.openSettingsPage(); }, + enabled: isNavigationEnabled, }, { label: translation('daedalus.walletSettings'), accelerator: 'Command+;', + click() { actions.openWalletSettingsPage(); }, + enabled: isNavigationEnabled, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('daedalus.hideDaedalus'), role: 'hide', @@ -73,10 +84,13 @@ export const osxMenu = ( label: translation('daedalus.showAll'), role: 'unhide', }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('daedalus.quit'), accelerator: 'Command+Q', + click() { app.quit(); }, @@ -96,7 +110,9 @@ export const osxMenu = ( accelerator: 'Shift+Command+Z', role: 'redo', }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('edit.cut'), accelerator: 'Command+X', @@ -144,6 +160,7 @@ export const osxMenu = ( submenu: compact([ { label: translation('helpSupport.knownIssues'), + click() { const faqLink = translation('helpSupport.knownIssuesUrl'); shell.openExternal(faqLink); @@ -153,6 +170,7 @@ export const osxMenu = ( label: translation('helpSupport.blankScreenFix'), type: 'checkbox', checked: isBlankScreenFixActive, + click(item) { actions.toggleBlankScreenFix(item); }, @@ -161,14 +179,18 @@ export const osxMenu = ( label: translation('helpSupport.usingRtsFlags'), type: 'checkbox', checked: rtsFlagsEnabled, + click(item) { actions.setRtsFlags(!rtsFlagsEnabled); item.checked = rtsFlagsEnabled; }, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('helpSupport.safetyTips'), + click() { const safetyTipsLinkUrl = translation('helpSupport.safetyTipsUrl'); shell.openExternal(safetyTipsLinkUrl); @@ -176,6 +198,7 @@ export const osxMenu = ( }, { label: translation('helpSupport.supportRequest'), + click() { const supportRequestLinkUrl = translation( 'helpSupport.supportRequestUrl' @@ -190,17 +213,22 @@ export const osxMenu = ( }, { label: translation('helpSupport.downloadLogs'), + click() { showUiPartChannel.send(NOTIFICATIONS.DOWNLOAD_LOGS, window); }, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('helpSupport.daedalusDiagnostics'), accelerator: 'Command+D', + click() { actions.openDaedalusDiagnosticsDialog(); }, + enabled: isNavigationEnabled, }, ]), diff --git a/source/main/menus/win-linux.ts b/source/main/menus/win-linux.ts index 8d8e66199c..0d70aa468c 100644 --- a/source/main/menus/win-linux.ts +++ b/source/main/menus/win-linux.ts @@ -1,4 +1,3 @@ -// @flow import { compact } from 'lodash'; import { shell } from 'electron'; import type { App, BrowserWindow } from 'electron'; @@ -9,12 +8,10 @@ import { NOTIFICATIONS } from '../../common/ipc/constants'; import { showUiPartChannel } from '../ipc/control-ui-parts'; import { generateSupportRequestLink } from '../../common/utils/reporting'; import { getRtsFlags } from '../utils/rtsFlags'; - const id = 'menu'; const { isWindows, isBlankScreenFixActive, network } = environment; const rtsFlags = getRtsFlags(network); const rtsFlagsEnabled: boolean = !!rtsFlags?.length && rtsFlags.length > 0; - export const winLinuxMenu = ( app: App, window: BrowserWindow, @@ -22,31 +19,40 @@ export const winLinuxMenu = ( translations: {}, locale: string, isNavigationEnabled: boolean, - translation: Function = getTranslation(translations, id) + translation: (...args: Array) => any = getTranslation(translations, id) ) => [ { label: translation('daedalus'), submenu: compact([ { label: translation('daedalus.about'), + click() { actions.openAboutDialog(); }, + enabled: isNavigationEnabled, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('daedalus.redeemItnRewards'), accelerator: 'Ctrl+T', + click() { actions.openItnRewardsRedemptionDialog(); }, + enabled: isNavigationEnabled, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('daedalus.close'), accelerator: 'Ctrl+W', + click() { app.quit(); }, @@ -97,6 +103,7 @@ export const winLinuxMenu = ( { label: translation('view.reload'), accelerator: 'Ctrl+R', + click() { window.webContents.reload(); }, @@ -107,17 +114,21 @@ export const winLinuxMenu = ( { label: translation('daedalus.settings'), accelerator: 'Alt+S', + click() { actions.openSettingsPage(); }, + enabled: isNavigationEnabled, }, { label: translation('daedalus.walletSettings'), accelerator: 'Alt+Ctrl+S', + click() { actions.openWalletSettingsPage(); }, + enabled: isNavigationEnabled, }, { @@ -127,6 +138,7 @@ export const winLinuxMenu = ( ? { label: translation('view.toggleFullScreen'), accelerator: 'F11', + click() { window.setFullScreen(!window.isFullScreen()); }, @@ -134,6 +146,7 @@ export const winLinuxMenu = ( : { label: translation('view.toggleMaximumWindowSize'), accelerator: 'F11', + click() { if (window.isMaximized()) { window.unmaximize(); @@ -145,6 +158,7 @@ export const winLinuxMenu = ( { label: translation('view.toggleDeveloperTools'), accelerator: 'Alt+Ctrl+I', + click() { window.toggleDevTools(); }, @@ -156,6 +170,7 @@ export const winLinuxMenu = ( submenu: compact([ { label: translation('helpSupport.knownIssues'), + click() { const faqLink = translation('helpSupport.knownIssuesUrl'); shell.openExternal(faqLink); @@ -165,6 +180,7 @@ export const winLinuxMenu = ( label: translation('helpSupport.blankScreenFix'), type: 'checkbox', checked: isBlankScreenFixActive, + click(item) { actions.toggleBlankScreenFix(item); }, @@ -173,30 +189,35 @@ export const winLinuxMenu = ( label: translation('helpSupport.usingRtsFlags'), type: 'checkbox', checked: rtsFlagsEnabled, + click(item) { actions.setRtsFlags(!rtsFlagsEnabled); item.checked = rtsFlagsEnabled; }, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('helpSupport.safetyTips'), + click() { const safetyTipsLinkUrl = translation('helpSupport.safetyTipsUrl'); shell.openExternal(safetyTipsLinkUrl); }, }, /* { - label: translation('helpSupport.featureRequest'), - click() { - const featureRequestLinkUrl = translation( - 'helpSupport.featureRequestUrl' - ); - shell.openExternal(featureRequestLinkUrl); - }, - }, */ + label: translation('helpSupport.featureRequest'), + click() { + const featureRequestLinkUrl = translation( + 'helpSupport.featureRequestUrl' + ); + shell.openExternal(featureRequestLinkUrl); + }, + }, */ { label: translation('helpSupport.supportRequest'), + click() { const supportRequestLinkUrl = translation( 'helpSupport.supportRequestUrl' @@ -211,17 +232,22 @@ export const winLinuxMenu = ( }, { label: translation('helpSupport.downloadLogs'), + click() { showUiPartChannel.send(NOTIFICATIONS.DOWNLOAD_LOGS, window); }, }, - { type: 'separator' }, + { + type: 'separator', + }, { label: translation('helpSupport.daedalusDiagnostics'), accelerator: 'Ctrl+D', + click() { actions.openDaedalusDiagnosticsDialog(); }, + enabled: isNavigationEnabled, }, ]), diff --git a/source/main/preload.ts b/source/main/preload.ts index 7199b7207d..ff9e451e0a 100644 --- a/source/main/preload.ts +++ b/source/main/preload.ts @@ -1,4 +1,3 @@ -// @flow import os from 'os'; import _https from 'https'; import _http from 'http'; @@ -7,9 +6,7 @@ import electronLog from 'electron-log-daedalus'; import EventEmitter from 'events'; import { environment } from './environment'; import { buildLabel, legacyStateDir, isFlight, smashUrl } from './config'; - const _process = process; - // Increase maximum event listeners to avoid IPC channel stalling // (2/2) this line increases the limit for the renderer process EventEmitter.defaultMaxListeners = 100; // Default: 10 @@ -51,6 +48,7 @@ process.once('loaded', () => { // @ts-ignore global.spectronRequire = __non_webpack_require__; // eslint-disable-line } + // ESLint will warn about any use of eval(), even this one // eslint-disable-next-line no-eval global.eval = () => { diff --git a/source/main/utils/buildAppMenus.ts b/source/main/utils/buildAppMenus.ts index 0618923471..7aab00da19 100644 --- a/source/main/utils/buildAppMenus.ts +++ b/source/main/utils/buildAppMenus.ts @@ -1,4 +1,3 @@ -// @flow import { app, BrowserWindow, dialog, globalShortcut, Menu } from 'electron'; import { environment } from '../environment'; import { winLinuxMenu } from '../menus/win-linux'; @@ -11,20 +10,19 @@ import { showUiPartChannel } from '../ipc/control-ui-parts'; import { getTranslation } from './getTranslation'; import { setRtsFlagsAndRestart } from './rtsFlags'; import { RTS_FLAGS } from '../config'; - export const buildAppMenus = async ( mainWindow: BrowserWindow, - cardanoNode: ?CardanoNode, + cardanoNode: CardanoNode | null | undefined, locale: string, data: { - isNavigationEnabled: boolean, + isNavigationEnabled: boolean; } ) => { const { ABOUT, DAEDALUS_DIAGNOSTICS, ITN_REWARDS_REDEMPTION } = DIALOGS; const { SETTINGS, WALLET_SETTINGS } = PAGES; const { isNavigationEnabled } = data; - const { isMacOS, isBlankScreenFixActive } = environment; + const translations = require(`../locales/${locale}`); const openAboutDialog = () => { @@ -50,14 +48,18 @@ export const buildAppMenus = async ( const restartWithBlankScreenFix = async () => { logger.info('Restarting in BlankScreenFix...'); if (cardanoNode) await cardanoNode.stop(); - logger.info('Exiting Daedalus with code 21', { code: 21 }); + logger.info('Exiting Daedalus with code 21', { + code: 21, + }); safeExitWithCode(21); }; const restartWithoutBlankScreenFix = async () => { logger.info('Restarting without BlankScreenFix...'); if (cardanoNode) await cardanoNode.stop(); - logger.info('Exiting Daedalus with code 22', { code: 22 }); + logger.info('Exiting Daedalus with code 22', { + code: 22, + }); safeExitWithCode(22); }; @@ -79,11 +81,11 @@ export const buildAppMenus = async ( cancelId: 1, noLink: true, }; - const { response } = await dialog.showMessageBox( mainWindow, blankScreenFixDialogOptions ); + if (response === 0) { if (isBlankScreenFixActive) { restartWithoutBlankScreenFix(); @@ -91,6 +93,7 @@ export const buildAppMenus = async ( restartWithBlankScreenFix(); } } + item.checked = isBlankScreenFixActive; }; @@ -112,11 +115,11 @@ export const buildAppMenus = async ( cancelId: 1, noLink: true, }; - const { response } = await dialog.showMessageBox( mainWindow, rtsFlagsDialogOptions ); + if (response === 0) { if (enable) { setRtsFlagsAndRestart(environment.network, RTS_FLAGS); @@ -135,9 +138,9 @@ export const buildAppMenus = async ( toggleBlankScreenFix, setRtsFlags, }; - // Build app menus let menu; + if (isMacOS) { menu = Menu.buildFromTemplate( osxMenu( @@ -169,11 +172,9 @@ export const buildAppMenus = async ( app.on('activate', () => { if (!mainWindow.isVisible()) app.show(); }); - mainWindow.on('focus', () => { globalShortcut.register('CommandOrControl+H', app.hide); }); - mainWindow.on('blur', () => { globalShortcut.unregister('CommandOrControl+H'); }); diff --git a/source/main/utils/config.ts b/source/main/utils/config.ts index a7c0113797..25ece9edbd 100644 --- a/source/main/utils/config.ts +++ b/source/main/utils/config.ts @@ -1,4 +1,3 @@ -// @flow import { readFileSync } from 'fs'; import yamljs from 'yamljs'; import type { LauncherConfig } from '../config'; @@ -6,35 +5,44 @@ import type { LauncherConfig } from '../config'; function recurseReplace(obj) { if (Array.isArray(obj)) { const out = []; + for (let idx in obj) { if (Object.prototype.hasOwnProperty.call(obj, idx)) { idx = parseInt(idx, 10); out[idx] = recurseReplace(obj[idx]); } } + return out; } + if (obj === null) return null; + switch (typeof obj) { case 'string': { return obj.replace(/\${([^}]+)}/g, (a, b) => { if (process.env[b]) { return process.env[b]; } + // eslint-disable-next-line no-console console.log('readLauncherConfig: warning var undefined:', b); return ''; }); } + case 'object': { const out = {}; + for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { out[key] = recurseReplace(obj[key]); } } + return out; } + default: return obj; } @@ -45,13 +53,17 @@ function recurseReplace(obj) { * @param configPath {String} * @returns {LauncherConfig} */ -export const readLauncherConfig = (configPath: ?string): LauncherConfig => { +export const readLauncherConfig = ( + configPath: string | null | undefined +): LauncherConfig => { const inputYaml = configPath ? readFileSync(configPath, 'utf8') : ''; const parsed = yamljs.parse(inputYaml); const finalYaml = recurseReplace(parsed); + if (finalYaml === null || finalYaml === []) { throw new Error('Daedalus requires a valid launcher config file to work'); } + // @ts-ignore return finalYaml; }; diff --git a/source/main/utils/detectSystemLocale.ts b/source/main/utils/detectSystemLocale.ts index 727b2fff84..7d9eb00477 100644 --- a/source/main/utils/detectSystemLocale.ts +++ b/source/main/utils/detectSystemLocale.ts @@ -1,14 +1,16 @@ -// @flow import { app } from 'electron'; import { logger } from './logging'; -import { LOCALES } from '../../common/types/locales.types.js'; -import type { Locale } from '../../common/types/locales.types.js'; - +import { LOCALES } from '../../common/types/locales.types'; +import type { Locale } from '../../common/types/locales.types'; export const detectSystemLocale = (): Locale => { const systemLocale = app.getLocale(); - logger.info('Detected system locale', { systemLocale }); + logger.info('Detected system locale', { + systemLocale, + }); + if (systemLocale === 'ja') { return LOCALES.japanese; } + return LOCALES.english; }; diff --git a/source/main/utils/downloadManager.ts b/source/main/utils/downloadManager.ts index fbd3287395..5fa7ffff5b 100644 --- a/source/main/utils/downloadManager.ts +++ b/source/main/utils/downloadManager.ts @@ -1,4 +1,3 @@ -// @flow import { app } from 'electron'; import fs from 'fs'; import type { BrowserWindow } from 'electron'; @@ -27,27 +26,26 @@ import type { DownloadDataUpdate, } from '../../common/types/downloadManager.types'; import { stateDirectoryPath } from '../config'; - export const downloads = {}; - export const getIdFromFileName = (fileName: string): string => fileName.replace(/\./g, '-'); - export const getPathFromDirectoryName = ( directoryName: AllowedDownloadDirectories ) => { const downloadsDirectory = `${stateDirectoryPath}/Downloads`; + switch (directoryName) { case ALLOWED_DOWNLOAD_DIRECTORIES.DESKTOP: return app.getPath('desktop'); + case ALLOWED_DOWNLOAD_DIRECTORIES.DOWLOADS: return app.getPath('downloads'); + default: if (!fs.existsSync(downloadsDirectory)) fs.mkdirSync(downloadsDirectory); return downloadsDirectory; } }; - export const getOriginalFilename = ({ fileUrl, options, @@ -63,7 +61,10 @@ export const getOriginalFilename = ({ const getPath = ( info: DownloadInfo -): { temporaryPath: string, newPath: string } => { +): { + temporaryPath: string; + newPath: string; +} => { const { destinationPath, temporaryFilename, originalFilename } = info; const temporaryPath = `${destinationPath}/${temporaryFilename}`; const newPath = `${destinationPath}/${originalFilename}`; @@ -80,7 +81,7 @@ export const getEventActions = async ( DownloadRendererRequest, DownloadMainResponse > -): Promise => { +): Promise> => { const { downloadId } = info; await localStorage.setInfo(info, downloadId); let serverFileSize; @@ -99,6 +100,7 @@ export const getEventActions = async ( window.webContents ); }; + const downloadEvent = async ({ totalSize, downloadedSize: diskFileSize, @@ -123,6 +125,7 @@ export const getEventActions = async ( window.webContents ); }; + const progressEvent = async ({ total, downloaded: downloadSize, @@ -148,16 +151,21 @@ export const getEventActions = async ( }, window.webContents ); + if (progress === 100) { // Checks if the file was delete while the download was in progress checkNoEndEvent = setTimeout(() => { const { temporaryPath, newPath } = getPath(info); + if (!fs.existsSync(temporaryPath) || !fs.existsSync(newPath)) { - errorEvent({ message: 'The download file was manually deleted' }); + errorEvent({ + message: 'The download file was manually deleted', + }); } }, ERROR_TIME_AFTER_NO_END_EVENT); } }; + const endEvent = async ({ totalSize: downloadSize, onDiskSize: diskFileSize, @@ -188,6 +196,7 @@ export const getEventActions = async ( const { persistLocalData } = info.options; if (!persistLocalData) await localStorage.unset(downloadId); }; + const pauseEvent = async () => { logger.info('DownloadManager:pauseEvent.'); const newState: DownloadDataUpdate = { @@ -203,8 +212,11 @@ export const getEventActions = async ( window.webContents ); }; + const errorEvent = async ({ message }: DownloadInfoError) => { - logger.error('DownloadManager:errorEvent', { error: message }); + logger.error('DownloadManager:errorEvent', { + error: message, + }); const rawData: DownloadDataUpdate = { ...{ message, diff --git a/source/main/utils/ensureDirectoryExists.ts b/source/main/utils/ensureDirectoryExists.ts index 7d0da5aa58..a1e96ce114 100644 --- a/source/main/utils/ensureDirectoryExists.ts +++ b/source/main/utils/ensureDirectoryExists.ts @@ -1,7 +1,5 @@ -// @flow import mkdirp from 'mkdirp'; import fs from 'fs'; - export default (filepath: string) => { let stats; diff --git a/source/main/utils/getContentMinimumSize.ts b/source/main/utils/getContentMinimumSize.ts index 6f0e247c8b..0edd88e7fd 100644 --- a/source/main/utils/getContentMinimumSize.ts +++ b/source/main/utils/getContentMinimumSize.ts @@ -1,11 +1,9 @@ -// @flow import { BrowserWindow } from 'electron'; import { environment } from '../environment'; import { MIN_WINDOW_CONTENT_WIDTH, MIN_WINDOW_CONTENT_HEIGHT } from '../config'; - type getContentMinimumSizeResponse = { - minWindowsWidth: number, - minWindowsHeight: number, + minWindowsWidth: number; + minWindowsHeight: number; }; /** @@ -30,12 +28,13 @@ export const getContentMinimumSize = ( } = window.getContentBounds(); const paddingWidth = frameWidth - contentWidth || 0; let paddingHeight = frameHeight - contentHeight || 0; + if (isWindows) { paddingHeight += 20; } + const minWindowsWidth = MIN_WINDOW_CONTENT_WIDTH + paddingWidth; const minWindowsHeight = MIN_WINDOW_CONTENT_HEIGHT + paddingHeight; - return { minWindowsWidth, minWindowsHeight, diff --git a/source/main/utils/getLocale.ts b/source/main/utils/getLocale.ts index e95fc327d9..5d44e9e2b9 100644 --- a/source/main/utils/getLocale.ts +++ b/source/main/utils/getLocale.ts @@ -1,16 +1,16 @@ -// @flow import Store from 'electron-store'; import { detectSystemLocale } from './detectSystemLocale'; - const store = new Store(); - export const getLocale = (network: string) => { const systemLocale = detectSystemLocale(); + try { const locale = store.get(`${network}-USER-LOCALE`); + if (locale) { return locale; } + return systemLocale; } catch (error) { return systemLocale; diff --git a/source/main/utils/getTranslation.ts b/source/main/utils/getTranslation.ts index 0195252b63..7fb35cc73d 100644 --- a/source/main/utils/getTranslation.ts +++ b/source/main/utils/getTranslation.ts @@ -1,3 +1,2 @@ -// @flow export const getTranslation = (translations: {}, id: string) => (key: string) => translations[`${id}.${key}`]; diff --git a/source/main/utils/handleCheckBlockReplayProgress.ts b/source/main/utils/handleCheckBlockReplayProgress.ts index 4e08aefaad..cf03864e18 100644 --- a/source/main/utils/handleCheckBlockReplayProgress.ts +++ b/source/main/utils/handleCheckBlockReplayProgress.ts @@ -1,11 +1,9 @@ -// @flow import { BrowserWindow } from 'electron'; import fs from 'fs'; import readline from 'readline'; import path from 'path'; import { getBlockReplayProgressChannel } from '../ipc/get-block-replay-progress'; import { BLOCK_REPLAY_PROGRESS_CHECK_INTERVAL } from '../config'; - export const handleCheckBlockReplayProgress = ( mainWindow: BrowserWindow, logsDirectoryPath: string @@ -15,21 +13,22 @@ export const handleCheckBlockReplayProgress = ( const logFilePath = `${logsDirectoryPath}/pub/`; const filePath = path.join(logFilePath, filename); if (!fs.existsSync(filePath)) return; - const fileStream = fs.createReadStream(filePath); - const rl = readline.createInterface({ input: fileStream }); + const rl = readline.createInterface({ + input: fileStream, + }); const progress = []; + for await (const line of rl) { if (line.includes('block replay')) { progress.push(line); } } - if (!progress.length) return; + if (!progress.length) return; const finalProgress = progress.slice(-1).pop(); const percentage = finalProgress.split('block replay progress (%) =').pop(); const finalProgressPercentage = parseFloat(percentage); - // Send result to renderer process (NetworkStatusStore) getBlockReplayProgressChannel.send( finalProgressPercentage, @@ -45,6 +44,5 @@ export const handleCheckBlockReplayProgress = ( // Start default interval setBlockReplayProgressCheckingInterval(); - return checkBlockReplayProgress; }; diff --git a/source/main/utils/handleDiskSpace.ts b/source/main/utils/handleDiskSpace.ts index ec4e3804d6..f54b1ebe52 100644 --- a/source/main/utils/handleDiskSpace.ts +++ b/source/main/utils/handleDiskSpace.ts @@ -1,4 +1,3 @@ -// @flow import { BrowserWindow } from 'electron'; import checkDiskSpace from 'check-disk-space'; import prettysize from 'prettysize'; @@ -34,7 +33,6 @@ const getDiskCheckReport = async ( diskTotalSpaceRaw: 0, isError: false, }; - return Promise.race([ // Disk space check promise new Promise((resolve) => { @@ -58,8 +56,7 @@ const getDiskCheckReport = async ( ); resolve({ ...initialReport, isError: true }); }); - }), - // Timeout promise + }), // Timeout promise new Promise((resolve) => { setTimeout(() => { resolve({ ...initialReport, isError: true }); @@ -71,9 +68,10 @@ const getDiskCheckReport = async ( export const handleDiskSpace = ( mainWindow: BrowserWindow, cardanoNode: CardanoNode -): Function => { +): ((...args: Array) => any) => { let diskSpaceCheckInterval; let diskSpaceCheckIntervalLength = DISK_SPACE_CHECK_LONG_INTERVAL; // Default check interval + let isNotEnoughDiskSpace = false; // Default check state const handleCheckDiskSpace = async ( @@ -81,7 +79,6 @@ export const handleDiskSpace = ( forceDiskSpaceRequired?: number ): Promise => { const diskSpaceRequired = forceDiskSpaceRequired || DISK_SPACE_REQUIRED; - const response = await getDiskCheckReport(stateDirectoryPath); if (response.isError) { @@ -111,6 +108,7 @@ export const handleDiskSpace = ( response.diskSpaceAvailableRaw >= diskSpaceRequired * 2 ? DISK_SPACE_CHECK_LONG_INTERVAL : DISK_SPACE_CHECK_MEDIUM_INTERVAL; + if (isNotEnoughDiskSpace) { // State change: transitioning from not-enough to enough disk space setDiskSpaceIntervalChecking(newDiskSpaceCheckIntervalLength); @@ -125,6 +123,7 @@ export const handleDiskSpace = ( setDiskSpaceIntervalChecking(newDiskSpaceCheckIntervalLength); } } + response.isNotEnoughDiskSpace = isNotEnoughDiskSpace; response.diskSpaceRequired = prettysize(diskSpaceRequired); response.diskSpaceMissing = prettysize(diskSpaceMissing); @@ -136,17 +135,16 @@ export const handleDiskSpace = ( isNotEnoughDiskSpace && cardanoNode.state !== CardanoNodeStates.STOPPING && cardanoNode.state !== CardanoNodeStates.STOPPED; - const CARDANO_NODE_CAN_BE_STARTED_FOR_THE_FIRST_TIME = !isNotEnoughDiskSpace && cardanoNode.state === CardanoNodeStates.STOPPED && cardanoNode._startupTries === 0; - const CARDANO_NODE_CAN_BE_STARTED_AFTER_FREEING_SPACE = !isNotEnoughDiskSpace && cardanoNode.state !== CardanoNodeStates.STOPPED && cardanoNode.state !== CardanoNodeStates.STOPPING && hadNotEnoughSpaceLeft; + try { switch (true) { case NO_SPACE_AND_CARDANO_NODE_CAN_BE_STOPPED: @@ -156,10 +154,13 @@ export const handleDiskSpace = ( } catch (error) { logger.error('[DISK-SPACE-DEBUG] Cannot stop cardano node', error); } + break; + case CARDANO_NODE_CAN_BE_STARTED_FOR_THE_FIRST_TIME: await cardanoNode.start(); break; + case CARDANO_NODE_CAN_BE_STARTED_AFTER_FREEING_SPACE: try { logger.info( @@ -174,13 +175,16 @@ export const handleDiskSpace = ( error ); } + break; + default: } } catch (error) { logger.error('[DISK-SPACE-DEBUG] Unknown error', error); resetInterval(DISK_SPACE_CHECK_MEDIUM_INTERVAL); } + await getDiskSpaceStatusChannel.send(response, mainWindow.webContents); return response; }; @@ -207,12 +211,10 @@ export const handleDiskSpace = ( // Start default interval setDiskSpaceIntervalChecking(diskSpaceCheckIntervalLength); - getDiskSpaceStatusChannel.onReceive(async () => { const diskReport = await getDiskCheckReport(stateDirectoryPath); await getDiskSpaceStatusChannel.send(diskReport, mainWindow.webContents); return diskReport; }); - return handleCheckDiskSpace; }; diff --git a/source/main/utils/installChromeExtensions.ts b/source/main/utils/installChromeExtensions.ts index a2f23f8b5c..23605dae68 100644 --- a/source/main/utils/installChromeExtensions.ts +++ b/source/main/utils/installChromeExtensions.ts @@ -1,15 +1,18 @@ -// @flow export const installChromeExtensions = async (isDev: boolean) => { if (isDev) { const { default: installExtension, REACT_DEVELOPER_TOOLS, - } = require('electron-devtools-installer'); // eslint-disable-line global-require + } = require('electron-devtools-installer'); + + // eslint-disable-line global-require const { app } = require('electron'); const extensions = [REACT_DEVELOPER_TOOLS]; const options = { - loadExtensionOptions: { allowFileAccess: true }, + loadExtensionOptions: { + allowFileAccess: true, + }, }; try { diff --git a/source/main/utils/logUsedVersion.ts b/source/main/utils/logUsedVersion.ts index f5aa37aab8..5a26ea5f42 100644 --- a/source/main/utils/logUsedVersion.ts +++ b/source/main/utils/logUsedVersion.ts @@ -1,10 +1,9 @@ -// @flow import fs from 'fs'; - export const logUsedVersion = async (version: string, logFilePath: string) => { let usedVersions = null; const currentVersionData = { - version, // e.g. "0.13.2" + version, + // e.g. "0.13.2" date: new Date().toISOString(), // e.g. "2018-12-11T144501.0177" }; @@ -16,6 +15,7 @@ export const logUsedVersion = async (version: string, logFilePath: string) => { const isAlreadyLogged = versionsData.some( (item) => item.version === version ); + // Add current version if it has not yet been saved if (!isAlreadyLogged) { versionsData.push(currentVersionData); @@ -29,6 +29,7 @@ export const logUsedVersion = async (version: string, logFilePath: string) => { }; } } + if (usedVersions) { await fs.promises.writeFile(logFilePath, JSON.stringify(usedVersions)); } diff --git a/source/main/utils/logging.ts b/source/main/utils/logging.ts index d520853354..b7bf5db72e 100644 --- a/source/main/utils/logging.ts +++ b/source/main/utils/logging.ts @@ -1,4 +1,3 @@ -// @flow import log from 'electron-log-daedalus'; import { environment } from '../environment'; import { formatContext } from '../../common/utils/logging'; @@ -7,18 +6,15 @@ import type { Logger, } from '../../common/types/logging.types'; import { toJS } from '../../common/utils/helper'; - const appName = 'daedalus'; const electronProcess = 'ipcMain'; const { network, os, platformVersion, version } = environment; - const messageContext: FormatMessageContextParams = { appName, electronProcess, network, level: '', }; - const environmentData = { network, os, @@ -26,7 +22,10 @@ const environmentData = { version, }; -const logToLevel = (level: string) => (message: string, data: ?Object) => +const logToLevel = (level: string) => ( + message: string, + data: Record | null | undefined +) => log[level](formatContext({ ...messageContext, level }), { message, data: toJS(data), diff --git a/source/main/utils/mainErrorHandler.ts b/source/main/utils/mainErrorHandler.ts index 8d0a2c5030..0f12b28683 100644 --- a/source/main/utils/mainErrorHandler.ts +++ b/source/main/utils/mainErrorHandler.ts @@ -1,21 +1,20 @@ -// @flow import { app } from 'electron'; import { logger } from './logging'; import { stringifyError } from '../../common/utils/logging'; - -export default (onError?: Function) => { +export default (onError?: (...args: Array) => any) => { logger.info('Main Error Handler started'); const handleError = (title: string, error: any) => { const err = `${stringifyError(error)}`; - logger.error(title, { error }); + logger.error(title, { + error, + }); if (typeof onError === 'function') onError(err); }; process.on('uncaughtException', (error: any) => { handleError('uncaughtException', error); }); - process.on('unhandledRejection', (error: any) => { handleError('unhandledRejection', { error, @@ -23,13 +22,14 @@ export default (onError?: Function) => { message: error.message, }); }); - app.on('gpu-process-crashed', (event: any, killed: boolean) => { logger.error( `uncaughtException::gpu-process-crashed: ${ killed ? 'killed' : 'not-killed' }`, - { error: event } + { + error: event, + } ); }); }; diff --git a/source/main/utils/mainLocalStorage.ts b/source/main/utils/mainLocalStorage.ts index 8a55f06dca..7d16b5d666 100644 --- a/source/main/utils/mainLocalStorage.ts +++ b/source/main/utils/mainLocalStorage.ts @@ -1,4 +1,3 @@ -// @flow import { mergeWith, omit } from 'lodash'; import { STORAGE_TYPES, @@ -15,7 +14,6 @@ import { DOWNLOAD_STATES, } from '../../common/config/downloadManagerConfig'; import { requestElectronStore } from '../ipc/electronStoreConversation'; - export const downloadManagerLocalStorage = { get: async (id: string): Promise => { const { info, data } = @@ -24,7 +22,10 @@ export const downloadManagerLocalStorage = { key: STORAGE_KEYS.DOWNLOAD_MANAGER, id, })) || {}; - return { info, data }; + return { + info, + data, + }; }, getAll: async () => { const info = await requestElectronStore({ @@ -38,7 +39,10 @@ export const downloadManagerLocalStorage = { requestElectronStore({ type: STORAGE_TYPES.SET, key: STORAGE_KEYS.DOWNLOAD_MANAGER, - data: { info, data }, + data: { + info, + data, + }, id, }); }, @@ -55,7 +59,10 @@ export const downloadManagerLocalStorage = { await requestElectronStore({ type: STORAGE_TYPES.SET, key: STORAGE_KEYS.DOWNLOAD_MANAGER, - data: { info, data }, + data: { + info, + data, + }, id, }); return data; @@ -63,10 +70,12 @@ export const downloadManagerLocalStorage = { setAllPaused: async () => { const downloads = await downloadManagerLocalStorage.getAll(); const downloadsArray = Object.keys(downloads); + for (let index = 0; index < downloadsArray.length; index++) { const downloadId = downloadsArray[index]; const { data } = downloads[downloadId]; const { state, progress } = data; + if (state === DOWNLOAD_STATES.DOWNLOADING && progress < 100) { await downloadManagerLocalStorage.setData( { diff --git a/source/main/utils/pdf.ts b/source/main/utils/pdf.ts index 780fcda59c..2f8e1a7af8 100644 --- a/source/main/utils/pdf.ts +++ b/source/main/utils/pdf.ts @@ -1,5 +1,4 @@ import PDFDocument from 'pdfkit'; - const doc = new PDFDocument(); export const getHeightOfString = (text, font, fontSize) => { doc.font(font).fontSize(fontSize); diff --git a/source/main/utils/processes.ts b/source/main/utils/processes.ts index 8876b2bef6..de62c90594 100644 --- a/source/main/utils/processes.ts +++ b/source/main/utils/processes.ts @@ -1,27 +1,22 @@ -// @flow import find from 'find-process'; import { isObject } from 'lodash'; import { logger } from './logging'; /* eslint-disable consistent-return */ - export type Process = { - pid: number, - ppid: number, - name: string, - cmd: string, - bin: string, + pid: number; + ppid: number; + name: string; + cmd: string; + bin: string; }; - export const getProcessById = async (processId: number): Promise => { // finds running processes matching PID const matchingProcesses: Array = await find('pid', processId); return matchingProcesses.length > 0 ? matchingProcesses[0] : Promise.reject(); }; - export const getProcessName = async (processId: number) => (await getProcessById(processId)).name; - export const getProcessesByName = async ( processName: string ): Promise> => { @@ -29,11 +24,10 @@ export const getProcessesByName = async ( const matchingProcesses: Array = await find('name', processName); return matchingProcesses; }; - export const getProcess = async ( processId: number, processName: string -): Promise => { +): Promise => { try { // finds running processes matching PID const matchingProcesses: Array = await find('pid', processId); @@ -41,11 +35,14 @@ export const getProcess = async ( if (!matchingProcesses.length) return null; // Return first matching process if names match const previousProcess: Process = matchingProcesses[0]; + if (isObject(previousProcess) && previousProcess.name === processName) { return previousProcess; } } catch (error) { - logger.error('getProcess error', { error }); + logger.error('getProcess error', { + error, + }); return null; } }; diff --git a/source/main/utils/rendererErrorHandler.ts b/source/main/utils/rendererErrorHandler.ts index 3c1adf4a64..4721823e34 100644 --- a/source/main/utils/rendererErrorHandler.ts +++ b/source/main/utils/rendererErrorHandler.ts @@ -1,21 +1,21 @@ -// @flow import { BrowserWindow } from 'electron'; import { logger } from './logging'; - export default class RendererErrorHandler { count: number = 0; maxReloads: number = 1; - window: ?BrowserWindow = null; - createMainWindow: ?Function = null; + window: BrowserWindow | null | undefined = null; + createMainWindow: ((...args: Array) => any) | null | undefined = null; - setup(window: BrowserWindow, createMainWindow: Function) { + setup(window: BrowserWindow, createMainWindow: (...args: Array) => any) { this.window = window; this.createMainWindow = createMainWindow; logger.info('Renderer Error Handler started'); } onError(errorType: string, error: any) { - logger.error(`RendererError::${errorType}`, { error }); + logger.error(`RendererError::${errorType}`, { + error, + }); if (this.count < this.maxReloads) { this.count++; diff --git a/source/main/utils/restoreKeystore.ts b/source/main/utils/restoreKeystore.ts index 4236dfc1ce..c8f689632b 100644 --- a/source/main/utils/restoreKeystore.ts +++ b/source/main/utils/restoreKeystore.ts @@ -1,19 +1,14 @@ -// @flow import * as cbor from 'cbor'; import * as blake2b from 'blake2b'; import * as crypto from 'crypto'; - export type EncryptedSecretKeys = Array; - export type EncryptedSecretKey = { - encryptedPayload: Buffer, - passphraseHash: Buffer, - isEmptyPassphrase: boolean, - walletId: WalletId, + encryptedPayload: Buffer; + passphraseHash: Buffer; + isEmptyPassphrase: boolean; + walletId: WalletId; }; - export type WalletId = string; - export const decodeKeystore = async ( bytes: Buffer ): Promise => { @@ -75,7 +70,11 @@ const mkWalletId = (xprv: Buffer): WalletId => { const $isEmptyPassphrase = (pwd: Buffer): boolean => { const cborEmptyBytes = Buffer.from('40', 'hex'); const [logN, r, p, salt, hashA] = pwd.toString('utf8').split('|'); - const opts = { N: 2 ** Number(logN), r: Number(r), p: Number(p) }; + const opts = { + N: 2 ** Number(logN), + r: Number(r), + p: Number(p), + }; // @ts-ignore const hashB = crypto .scryptSync(cborEmptyBytes, Buffer.from(salt, 'base64'), 32, opts) diff --git a/source/main/utils/rtsFlags.ts b/source/main/utils/rtsFlags.ts index 0f5cb849ec..d785d23209 100644 --- a/source/main/utils/rtsFlags.ts +++ b/source/main/utils/rtsFlags.ts @@ -1,10 +1,7 @@ -// @flow import Store from 'electron-store'; import { logger } from './logging'; import { relaunch } from './safeExitWithCode'; - const store = new Store(); - export const getRtsFlags = (network: string): string[] | null => { try { const rtsFlags = store.get(`${network}-RTS-FLAGS`); @@ -13,14 +10,17 @@ export const getRtsFlags = (network: string): string[] | null => { } catch (error) { logger.error(`[GET-RTS-FLAGS] Error fetching ${network}-RTS-FLAGS`, error); } + return null; }; - export const setRtsFlagsAndRestart = ( network: string, flags: Array ): void => { - logger.info('[SET-RTS-FLAGS] setting: ', { network, flags }); + logger.info('[SET-RTS-FLAGS] setting: ', { + network, + flags, + }); store.set(`${network}-RTS-FLAGS`, flags); relaunch(); }; diff --git a/source/main/utils/safeExitWithCode.ts b/source/main/utils/safeExitWithCode.ts index 80bc8483d1..fb4bd39e35 100644 --- a/source/main/utils/safeExitWithCode.ts +++ b/source/main/utils/safeExitWithCode.ts @@ -1,7 +1,5 @@ -// @flow import { app } from 'electron'; import log from 'electron-log-daedalus'; - export const safeExitWithCode = (exitCode: number = 0) => { const { file } = log.transports; // Prevent electron-log from writing to stream @@ -13,7 +11,6 @@ export const safeExitWithCode = (exitCode: number = 0) => { app.exit(exitCode); }); }; - export const relaunch = () => { const { file } = log.transports; // Prevent electron-log from writing to stream @@ -22,7 +19,9 @@ export const relaunch = () => { // https://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback file.stream.end('', 'utf8', () => { app.releaseSingleInstanceLock(); - app.relaunch({ args: process.argv.slice(1).concat(['--relaunch']) }); + app.relaunch({ + args: process.argv.slice(1).concat(['--relaunch']), + }); app.exit(0); }); }; diff --git a/source/main/utils/setupLogging.ts b/source/main/utils/setupLogging.ts index bbe3540a2f..10869c15f6 100644 --- a/source/main/utils/setupLogging.ts +++ b/source/main/utils/setupLogging.ts @@ -1,4 +1,3 @@ -// @flow import fs from 'fs'; import path from 'path'; import log from 'electron-log-daedalus'; @@ -18,10 +17,8 @@ import type { StateSnapshotLogParams, WalletMigrationReportData, } from '../../common/types/logging.types'; - const isTest = process.env.NODE_ENV === 'test'; const isDev = process.env.NODE_ENV === 'development'; - export const setupLogging = () => { const logFilePath = path.join(pubLogsFolderPath, 'Daedalus.json'); ensureDirectoryExists(pubLogsFolderPath); @@ -30,30 +27,44 @@ export const setupLogging = () => { log.transports.rendererConsole.level = isDev ? 'info' : 'error'; log.transports.file.level = 'debug'; log.transports.file.maxSize = 5 * 1024 * 1024; // 5MB, unit bytes + log.transports.file.maxItems = 4; log.transports.file.timeStampPostfixFormat = '{y}{m}{d}{h}{i}{s}'; log.transports.file.file = logFilePath; - log.transports.console.format = (message: Object): string => + + log.transports.console.format = (message: Record): string => formatMessage(message); - log.transports.file.format = (message: Object): string => { + log.transports.file.format = (message: Record): string => { // Debug level logging is recorded as "info" in Daedalus log files // but at the same time we do not want to output it to console or terminal window const level = message.level === 'debug' ? 'info' : message.level; return formatMessage({ ...message, level }); }; - log.transports.rendererConsole.format = (message: Object): string => { + log.transports.rendererConsole.format = ( + message: Record + ): string => { // deconstruct message data const date = message.date.toISOString(); const [year, time] = date.split('T'); const [context, messageData] = message.data; const { message: msg, data = {} } = messageData; // log minimal message body in the renderer console - let messageBody = { msg, data }; + let messageBody = { + msg, + data, + }; + if (typeof data === 'string') { - messageBody = { ...messageBody, data: { response: data } }; + messageBody = { + ...messageBody, + data: { + response: data, + }, + }; } + return `[${year}T${time.slice(0, -1)}Z] ${context} ${stringifyData( messageBody )}`; @@ -63,6 +74,7 @@ export const setupLogging = () => { fs.readdir(appLogsFolderPath, (err, files) => { files.filter(isFileNameWithTimestamp()).forEach((fileName) => { const filePath = path.join(appLogsFolderPath, fileName); + try { fs.unlinkSync(filePath); } catch (error) { @@ -74,7 +86,6 @@ export const setupLogging = () => { }); }); }; - export const logSystemInfo = (props: LogSystemInfoParams): MessageBody => { const { ...data } = props; const { @@ -100,7 +111,6 @@ export const logSystemInfo = (props: LogSystemInfoParams): MessageBody => { fs.writeFileSync(systemInfoFilePath, JSON.stringify(messageBody)); return messageBody; }; - export const logStateSnapshot = ( props: StateSnapshotLogParams ): MessageBody => { @@ -161,7 +171,6 @@ export const logStateSnapshot = ( fs.writeFileSync(stateSnapshotFilePath, JSON.stringify(messageBody)); return messageBody; }; - export const generateWalletMigrationReport = ( data: WalletMigrationReportData ) => { diff --git a/source/main/windows/main.ts b/source/main/windows/main.ts index ded6626983..0d1e1f75c4 100644 --- a/source/main/windows/main.ts +++ b/source/main/windows/main.ts @@ -1,4 +1,3 @@ -// @flow import path from 'path'; import { app, BrowserWindow, ipcMain, Menu, Rectangle } from 'electron'; import { environment } from '../environment'; @@ -9,16 +8,14 @@ import { getContentMinimumSize } from '../utils/getContentMinimumSize'; import { buildLabel, launcherConfig } from '../config'; import { ledgerStatus } from '../ipc/getHardwareWalletChannel'; import { getRtsFlags } from '../utils/rtsFlags'; - const rendererErrorHandler = new RendererErrorHandler(); - const { isDev, isTest, isLinux, isBlankScreenFixActive, network } = environment; const rtsFlags = getRtsFlags(network); - const id = 'window'; const getWindowTitle = (locale: string): string => { const translations = require(`../locales/${locale}`); + const translation = getTranslation(translations, id); let title = buildLabel; if (isBlankScreenFixActive) @@ -29,18 +26,17 @@ const getWindowTitle = (locale: string): string => { }; type WindowOptionsType = { - show: boolean, - width: number, - height: number, + show: boolean; + width: number; + height: number; webPreferences: { - nodeIntegration: boolean, - webviewTag: boolean, - enableRemoteModule: boolean, - preload: string, - }, - icon?: string, + nodeIntegration: boolean; + webviewTag: boolean; + enableRemoteModule: boolean; + preload: string; + }; + icon?: string; }; - export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { const windowOptions: WindowOptionsType = { show: false, @@ -50,7 +46,8 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { webPreferences: { nodeIntegration: isTest, webviewTag: false, - contextIsolation: false, // TODO: change to ipc + contextIsolation: false, + // TODO: change to ipc enableRemoteModule: isTest, preload: path.join(__dirname, './preload.js'), additionalArguments: isBlankScreenFixActive ? ['--safe-mode'] : [], @@ -63,36 +60,30 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { // Construct new BrowserWindow const window = new BrowserWindow(windowOptions); - rendererErrorHandler.setup(window, createMainWindow); - const { minWindowsWidth, minWindowsHeight } = getContentMinimumSize(window); window.setMinimumSize(minWindowsWidth, minWindowsHeight); - // Initialize our ipc api methods that can be called by the render processes ipcApi(window); - // Provide render process with an api to resize the main window ipcMain.on('resize-window', (event, { width, height, animate }) => { if (event.sender !== window.webContents) return; window.setSize(width, height, animate); }); - // Provide render process with an api to close the main window ipcMain.on('close-window', (event) => { if (event.sender !== window.webContents) return; window.close(); }); - window.loadURL(`file://${__dirname}/../renderer/index.html`); window.on('page-title-updated', (event) => { event.preventDefault(); }); window.setTitle(getWindowTitle(locale)); - window.webContents.on('context-menu', (e, props) => { const { canCopy, canPaste } = props.editFlags; const contextMenuOptions = []; + if (canCopy && props.selectionText) { contextMenuOptions.push({ label: 'Copy', @@ -100,6 +91,7 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { role: 'copy', }); } + if (canPaste) { contextMenuOptions.push({ label: 'Paste', @@ -112,6 +104,7 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { const { x, y } = props; contextMenuOptions.push({ label: 'Inspect element', + click() { window.inspectElement(x, y); }, @@ -122,7 +115,6 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { Menu.buildFromTemplate(contextMenuOptions).popup(window); } }); - window.webContents.on('did-frame-finish-load', () => { if (isDev) { window.webContents.openDevTools(); @@ -135,7 +127,6 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { }); } }); - window.webContents.on('did-finish-load', () => { if (isTest || isDev) { window.showInactive(); // show without focusing the window @@ -153,9 +144,9 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { window.setBounds(windowBounds); } }); - window.on('closed', (event) => { event.preventDefault(); + if (ledgerStatus.listening && !!ledgerStatus.Listener) { ledgerStatus.Listener.unsubscribe(); setTimeout(() => app.quit(), 5000); @@ -163,11 +154,9 @@ export const createMainWindow = (locale: string, windowBounds?: Rectangle) => { app.quit(); } }); - window.webContents.on('did-fail-load', (err) => { rendererErrorHandler.onError('did-fail-load', err); }); - window.webContents.on('crashed', (err) => { rendererErrorHandler.onError('crashed', err); }); diff --git a/source/main/windows/windowBounds.ts b/source/main/windows/windowBounds.ts index de9cdf9e65..bcc2785fd0 100644 --- a/source/main/windows/windowBounds.ts +++ b/source/main/windows/windowBounds.ts @@ -1,41 +1,35 @@ -// @flow import { debounce } from 'lodash-es/function'; import { STORAGE_KEYS, STORAGE_TYPES, } from '../../common/config/electron-store.config'; import type { StoreMessage } from '../../common/types/electron-store.types'; - interface Rectangle { x: number; y: number; width: number; height: number; } - interface Window { getBounds(): Rectangle; - on(event: string, handler: Function): void; + on(event: string, handler: (...args: Array) => any): void; } - interface Display { workArea: Rectangle; } - interface Screen { getDisplayMatching(rect: Rectangle): Display; workArea: Rectangle; } +type SendStoreRequest = (request: StoreMessage) => unknown; -type SendStoreRequest = (request: StoreMessage) => mixed; - -function maybeRectangle(data: any): ?Rectangle { +function maybeRectangle(data: any): Rectangle | null | undefined { return data != null && typeof data.x === 'number' && typeof data.y === 'number' && typeof data.width === 'number' && typeof data.height === 'number' - ? (data: Rectangle) + ? (data as Rectangle) : null; } @@ -79,7 +73,7 @@ function getCenteredRectInBounds( export function restoreSavedWindowBounds( screen: Screen, sendStoreRequest: SendStoreRequest -): ?Rectangle { +): Rectangle | null | undefined { const savedBounds = maybeRectangle( sendStoreRequest({ type: STORAGE_TYPES.GET, @@ -87,21 +81,22 @@ export function restoreSavedWindowBounds( }) ); if (!savedBounds) return null; - const closestDisplay = screen.getDisplayMatching(savedBounds); const displayBounds = closestDisplay.workArea; + if (isWithinBounds(savedBounds, displayBounds)) { // scenario 1: Size and position of Daedalus are persisted return savedBounds; } + // scenario 2: Size is persisted and position changes (center window) if (isFittingIntoBounds(savedBounds, displayBounds)) { return getCenteredRectInBounds(savedBounds, displayBounds); } + // scenario 3: Size and position change (fit to screen) return displayBounds; } - export function saveWindowBoundsOnSizeAndPositionChange( window: Window, sendStoreRequest: SendStoreRequest, diff --git a/source/renderer/app/App.tsx b/source/renderer/app/App.tsx index d1aee3e866..3c02487a6f 100755 --- a/source/renderer/app/App.tsx +++ b/source/renderer/app/App.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component, Fragment } from 'react'; import { Provider, observer } from 'mobx-react'; import { ThemeProvider } from 'react-polymorph/lib/components/ThemeProvider'; @@ -23,9 +22,9 @@ import NewsFeedContainer from './containers/news/NewsFeedContainer'; @observer class App extends Component<{ - stores: StoresMap, - actions: ActionsMap, - history: Object, + stores: StoresMap; + actions: ActionsMap; + history: Record; }> { componentDidMount() { // Loads app's global environment variables into AppStore via ipc @@ -40,14 +39,16 @@ class App extends Component<{ const locale = stores.profile.currentLocale; const mobxDevTools = global.environment.mobxDevTools ? : null; const { currentTheme } = stores.profile; + const themeVars = require(`./themes/daedalus/${currentTheme}.ts`).default; - const { ABOUT, DAEDALUS_DIAGNOSTICS } = DIALOGS; + const { ABOUT, DAEDALUS_DIAGNOSTICS } = DIALOGS; const canShowNews = !isSetupPage && // Active page is not "Language Selection" or "Terms of Use" !isNodeStopping && // Daedalus is not shutting down - !isNodeStopped; // Daedalus is not shutting down + !isNodeStopped; + // Daedalus is not shutting down if (document.documentElement) { document.documentElement.lang = locale; } @@ -63,7 +64,11 @@ class App extends Component<{ themeOverrides={themeOverrides} > @@ -90,4 +95,4 @@ class App extends Component<{ } } -export default App \ No newline at end of file +export default App; diff --git a/source/renderer/app/Routes.tsx b/source/renderer/app/Routes.tsx index caccb5b113..a36c8f1c4d 100644 --- a/source/renderer/app/Routes.tsx +++ b/source/renderer/app/Routes.tsx @@ -1,8 +1,6 @@ -// @flow import React from 'react'; import { Switch, Route, Redirect, withRouter } from 'react-router-dom'; import { ROUTES } from './routes-config'; - // PAGES import Root from './containers/Root'; import InitialSettingsPage from './containers/profile/InitialSettingsPage'; @@ -36,7 +34,6 @@ import WalletSettingsPage from './containers/wallet/WalletSettingsPage'; import WalletUtxoPage from './containers/wallet/WalletUtxoPage'; import VotingRegistrationPage from './containers/voting/VotingRegistrationPage'; import { IS_STAKING_INFO_PAGE_AVAILABLE } from './config/stakingConfig'; - export const Routes = withRouter(() => ( diff --git a/source/renderer/app/ThemeManager.tsx b/source/renderer/app/ThemeManager.tsx index b87488b50e..6fbc68ae99 100644 --- a/source/renderer/app/ThemeManager.tsx +++ b/source/renderer/app/ThemeManager.tsx @@ -1,7 +1,6 @@ /* eslint-disable react/prop-types */ import React, { Component, Fragment } from 'react'; import { map } from 'lodash'; - export default class ThemeManager extends Component { componentDidMount() { this.updateCSSVariables(this.props.variables); diff --git a/source/renderer/app/WindowSizeManager.tsx b/source/renderer/app/WindowSizeManager.tsx index 745ad8630c..bb6abaad0f 100644 --- a/source/renderer/app/WindowSizeManager.tsx +++ b/source/renderer/app/WindowSizeManager.tsx @@ -1,6 +1,5 @@ /* eslint-disable react/prop-types */ import React, { Component, Fragment } from 'react'; - export default class WindowSizeManager extends Component { componentDidMount() { this.updateMinScreenHeight(this.props.minScreenHeight); @@ -14,6 +13,7 @@ export default class WindowSizeManager extends Component { updateMinScreenHeight(minScreenHeight) { const rootWindowEl = document.getElementById('root'); + if (rootWindowEl) { rootWindowEl.style.minHeight = minScreenHeight; } diff --git a/source/renderer/app/actions/addresses-actions.ts b/source/renderer/app/actions/addresses-actions.ts index 55cd998691..7e3e5dbfe7 100644 --- a/source/renderer/app/actions/addresses-actions.ts +++ b/source/renderer/app/actions/addresses-actions.ts @@ -1,12 +1,9 @@ -// @flow -import Action from './lib/Action'; - -// ======= ADDRESSES ACTIONS ======= +import Action from './lib/Action'; // ======= ADDRESSES ACTIONS ======= export default class AddressesActions { createByronWalletAddress: Action<{ - walletId: string, - passphrase: string, + walletId: string; + passphrase: string; }> = new Action(); resetErrors: Action = new Action(); } diff --git a/source/renderer/app/actions/app-actions.ts b/source/renderer/app/actions/app-actions.ts index c7d6bac45a..50610aab49 100644 --- a/source/renderer/app/actions/app-actions.ts +++ b/source/renderer/app/actions/app-actions.ts @@ -1,7 +1,4 @@ -// @flow -import Action from './lib/Action'; - -// ======= APP ACTIONS ======= +import Action from './lib/Action'; // ======= APP ACTIONS ======= export default class AppActions { downloadLogs: Action = new Action(); @@ -11,11 +8,9 @@ export default class AppActions { toggleNewsFeed: Action = new Action(); closeNewsFeed: Action = new Action(); onUiClicked: Action = new Action(); - // About dialog actions closeAboutDialog: Action = new Action(); openAboutDialog: Action = new Action(); - // Daedalus Diagnostics dialog actions closeDaedalusDiagnosticsDialog: Action = new Action(); openDaedalusDiagnosticsDialog: Action = new Action(); diff --git a/source/renderer/app/actions/app-update-actions.ts b/source/renderer/app/actions/app-update-actions.ts index 19f5dd1737..365f615d43 100644 --- a/source/renderer/app/actions/app-update-actions.ts +++ b/source/renderer/app/actions/app-update-actions.ts @@ -1,7 +1,4 @@ -// @flow -import Action from './lib/Action'; - -// ======= APP UPDATE ACTIONS ======= +import Action from './lib/Action'; // ======= APP UPDATE ACTIONS ======= export default class AppUpdateActions { installUpdate: Action = new Action(); diff --git a/source/renderer/app/actions/assets-actions.ts b/source/renderer/app/actions/assets-actions.ts index 3b8739db01..3ce30aff9f 100644 --- a/source/renderer/app/actions/assets-actions.ts +++ b/source/renderer/app/actions/assets-actions.ts @@ -1,24 +1,28 @@ -// @flow import Action from './lib/Action'; -import type { AssetToken } from '../api/assets/types'; - -// ======= ASSETS ACTIONS ======= +import type { AssetToken } from '../api/assets/types'; // ======= ASSETS ACTIONS ======= export default class AssetsActions { - onAssetSettingsOpen: Action<{ asset: AssetToken }> = new Action(); + onAssetSettingsOpen: Action<{ + asset: AssetToken; + }> = new Action(); onAssetSettingsSubmit: Action<{ - asset: AssetToken, - decimals: number, + asset: AssetToken; + decimals: number; }> = new Action(); onAssetSettingsCancel: Action = new Action(); - onOpenAssetSend: Action<{ uniqueId: string }> = new Action(); - onCopyAssetParam: Action<{ param: string, fullValue: string }> = new Action(); + onOpenAssetSend: Action<{ + uniqueId: string; + }> = new Action(); + onCopyAssetParam: Action<{ + param: string; + fullValue: string; + }> = new Action(); onToggleFavorite: Action<{ - uniqueId: string, - isFavorite: boolean, + uniqueId: string; + isFavorite: boolean; }> = new Action(); copyAssetParamNotification: Action<{ - param: string, - shortValue: string, + param: string; + shortValue: string; }> = new Action(); } diff --git a/source/renderer/app/actions/currency-actions.ts b/source/renderer/app/actions/currency-actions.ts index af128c426c..8bcaa4fd06 100644 --- a/source/renderer/app/actions/currency-actions.ts +++ b/source/renderer/app/actions/currency-actions.ts @@ -1,9 +1,8 @@ -// @flow -import Action from './lib/Action'; - -// ======= CURRENCY ACTIONS ======= +import Action from './lib/Action'; // ======= CURRENCY ACTIONS ======= export default class CurrencyActions { - setCurrencySelected: Action<{ code: string }> = new Action(); + setCurrencySelected: Action<{ + code: string; + }> = new Action(); toggleCurrencyIsActive: Action = new Action(); } diff --git a/source/renderer/app/actions/dialogs-actions.ts b/source/renderer/app/actions/dialogs-actions.ts index a3c8892e61..6ec27212ea 100644 --- a/source/renderer/app/actions/dialogs-actions.ts +++ b/source/renderer/app/actions/dialogs-actions.ts @@ -1,11 +1,12 @@ -// @flow -import Action from './lib/Action'; - -// ======= DIALOGS ACTIONS ======= +import Action from './lib/Action'; // ======= DIALOGS ACTIONS ======= export default class DialogsActions { - open: Action<{ dialog: Function }> = new Action(); - updateDataForActiveDialog: Action<{ data: Object }> = new Action(); + open: Action<{ + dialog: (...args: Array) => any; + }> = new Action(); + updateDataForActiveDialog: Action<{ + data: Record; + }> = new Action(); closeActiveDialog: Action = new Action(); resetActiveDialog: Action = new Action(); } diff --git a/source/renderer/app/actions/hardware-wallets-actions.ts b/source/renderer/app/actions/hardware-wallets-actions.ts index 10f60a6409..37a7a461b7 100644 --- a/source/renderer/app/actions/hardware-wallets-actions.ts +++ b/source/renderer/app/actions/hardware-wallets-actions.ts @@ -1,18 +1,16 @@ -// @flow import Action from './lib/Action'; import type { DelegationAction } from '../types/stakingTypes'; - export default class HardwareWalletsActions { /* ---------- Get hardware wallet device ---------- */ selectCoins: Action<{ - walletId: string, - address: string, - amount: number, + walletId: string; + address: string; + amount: number; }> = new Action(); selectDelegationCoins: Action<{ - walletId: string, - poolId: string, - delegationAction: DelegationAction, + walletId: string; + poolId: string; + delegationAction: DelegationAction; }> = new Action(); sendMoney: Action = new Action(); refreshHardwareWalletsLocalData: Action = new Action(); diff --git a/source/renderer/app/actions/index.ts b/source/renderer/app/actions/index.ts index 254fc4952c..9d102b2642 100644 --- a/source/renderer/app/actions/index.ts +++ b/source/renderer/app/actions/index.ts @@ -1,4 +1,3 @@ -// @flow import AddressesActions from './addresses-actions'; import AppActions from './app-actions'; import AppUpdateActions from './app-update-actions'; @@ -20,31 +19,29 @@ import WalletBackupActions from './wallet-backup-actions'; import WalletMigrationActions from './wallet-migration-actions'; import WalletSettingsActions from './wallet-settings-actions'; import WindowActions from './window-actions'; - export type ActionsMap = { - addresses: AddressesActions, - app: AppActions, - appUpdate: AppUpdateActions, - assets: AssetsActions, - dialogs: DialogsActions, - currency: CurrencyActions, - hardwareWallets: HardwareWalletsActions, - networkStatus: NetworkStatusActions, - notifications: NotificationsActions, - profile: ProfileActions, - router: RouterActions, - sidebar: SidebarActions, - staking: StakingActions, - transactions: TransactionsActions, - voting: VotingActions, - wallets: WalletsActions, - walletsLocal: WalletsLocalAction, - walletBackup: WalletBackupActions, - walletMigration: WalletMigrationActions, - walletSettings: WalletSettingsActions, - window: WindowActions, + addresses: AddressesActions; + app: AppActions; + appUpdate: AppUpdateActions; + assets: AssetsActions; + dialogs: DialogsActions; + currency: CurrencyActions; + hardwareWallets: HardwareWalletsActions; + networkStatus: NetworkStatusActions; + notifications: NotificationsActions; + profile: ProfileActions; + router: RouterActions; + sidebar: SidebarActions; + staking: StakingActions; + transactions: TransactionsActions; + voting: VotingActions; + wallets: WalletsActions; + walletsLocal: WalletsLocalAction; + walletBackup: WalletBackupActions; + walletMigration: WalletMigrationActions; + walletSettings: WalletSettingsActions; + window: WindowActions; }; - const actionsMap: ActionsMap = { addresses: new AddressesActions(), app: new AppActions(), @@ -68,5 +65,4 @@ const actionsMap: ActionsMap = { walletSettings: new WalletSettingsActions(), window: new WindowActions(), }; - export default actionsMap; diff --git a/source/renderer/app/actions/lib/Action.ts b/source/renderer/app/actions/lib/Action.ts index a83ae91d09..34e1fbef6f 100644 --- a/source/renderer/app/actions/lib/Action.ts +++ b/source/renderer/app/actions/lib/Action.ts @@ -1,14 +1,13 @@ -// @flow import { bindAll } from 'lodash'; /** * Listener type as Function that takes specific params

*/ export type Listener

= (params: P) => any; - /** * Action class with typed params */ + export default class Action { /** * Array of all defined actions in the system diff --git a/source/renderer/app/actions/network-status-actions.ts b/source/renderer/app/actions/network-status-actions.ts index 81fd8cf1a3..1daff53f4d 100644 --- a/source/renderer/app/actions/network-status-actions.ts +++ b/source/renderer/app/actions/network-status-actions.ts @@ -1,7 +1,4 @@ -// @flow -import Action from './lib/Action'; - -// ======= NETWORK STATUS ACTIONS ======= +import Action from './lib/Action'; // ======= NETWORK STATUS ACTIONS ======= export default class NetworkStatusActions { isSyncedAndReady: Action = new Action(); diff --git a/source/renderer/app/actions/notifications-actions.ts b/source/renderer/app/actions/notifications-actions.ts index 58576e3153..8e36b2918d 100644 --- a/source/renderer/app/actions/notifications-actions.ts +++ b/source/renderer/app/actions/notifications-actions.ts @@ -1,14 +1,13 @@ -// @flow import Action from './lib/Action'; import type { NotificationConfig, NotificationId, -} from '../types/notificationTypes'; - -// ======= NOTIFICATIONS ACTIONS ======= +} from '../types/notificationTypes'; // ======= NOTIFICATIONS ACTIONS ======= export default class NotificationsActions { registerNotification: Action = new Action(); closeActiveNotification: Action = new Action(); - closeNotification: Action<{ id: NotificationId }> = new Action(); + closeNotification: Action<{ + id: NotificationId; + }> = new Action(); } diff --git a/source/renderer/app/actions/profile-actions.ts b/source/renderer/app/actions/profile-actions.ts index 73cae4c230..8599f0015f 100644 --- a/source/renderer/app/actions/profile-actions.ts +++ b/source/renderer/app/actions/profile-actions.ts @@ -1,7 +1,4 @@ -// @flow -import Action from './lib/Action'; - -// ======= PROFILE ACTIONS ======= +import Action from './lib/Action'; // ======= PROFILE ACTIONS ======= export default class ProfileActions { acceptTermsOfUse: Action = new Action(); @@ -10,15 +7,17 @@ export default class ProfileActions { getLogsAndCompress: Action = new Action(); resetBugReportDialog: Action = new Action(); downloadLogs: Action<{ - fileName: string, - destination: string, - fresh?: boolean, + fileName: string; + destination: string; + fresh?: boolean; }> = new Action(); downloadLogsSuccess: Action = new Action(); updateUserLocalSetting: Action<{ - param: string, - value?: string, + param: string; + value?: string; + }> = new Action(); + updateTheme: Action<{ + theme: string; }> = new Action(); - updateTheme: Action<{ theme: string }> = new Action(); finishInitialScreenSettings: Action = new Action(); } diff --git a/source/renderer/app/actions/router-actions.ts b/source/renderer/app/actions/router-actions.ts index 7446020693..d6053c1b7e 100644 --- a/source/renderer/app/actions/router-actions.ts +++ b/source/renderer/app/actions/router-actions.ts @@ -1,8 +1,8 @@ -// @flow -import Action from './lib/Action'; - -// ======= ROUTER ACTIONS ======= +import Action from './lib/Action'; // ======= ROUTER ACTIONS ======= export default class RouterActions { - goToRoute: Action<{ route: string, params?: ?Object }> = new Action(); + goToRoute: Action<{ + route: string; + params?: Record | null | undefined; + }> = new Action(); } diff --git a/source/renderer/app/actions/sidebar-actions.ts b/source/renderer/app/actions/sidebar-actions.ts index a11ad87a5d..9a8d9873a7 100644 --- a/source/renderer/app/actions/sidebar-actions.ts +++ b/source/renderer/app/actions/sidebar-actions.ts @@ -1,15 +1,13 @@ -// @flow - -import Action from './lib/Action'; - -// ======= SIDEBAR ACTIONS ======= +import Action from './lib/Action'; // ======= SIDEBAR ACTIONS ======= export default class SidebarActions { showSubMenus: Action = new Action(); toggleSubMenus: Action = new Action(); activateSidebarCategory: Action<{ - category: string, - showSubMenu?: boolean, + category: string; + showSubMenu?: boolean; + }> = new Action(); + walletSelected: Action<{ + walletId: string; }> = new Action(); - walletSelected: Action<{ walletId: string }> = new Action(); } diff --git a/source/renderer/app/actions/staking-actions.ts b/source/renderer/app/actions/staking-actions.ts index 38198ff15b..1ced9190f2 100644 --- a/source/renderer/app/actions/staking-actions.ts +++ b/source/renderer/app/actions/staking-actions.ts @@ -1,11 +1,9 @@ -// @flow import Action from './lib/Action'; import type { JoinStakePoolRequest, QuitStakePoolRequest, } from '../api/staking/types'; -import type { CsvFileContent } from '../../../common/types/csv-request.types'; -// ======= STAKING ACTIONS ======= +import type { CsvFileContent } from '../../../common/types/csv-request.types'; // ======= STAKING ACTIONS ======= export default class StakingActions { fakeStakePoolsLoading: Action = new Action(); @@ -17,20 +15,25 @@ export default class StakingActions { rankStakePools: Action = new Action(); selectDelegationWallet: Action = new Action(); requestCSVFile: Action<{ - fileContent: CsvFileContent, - filenamePrefix: string, + fileContent: CsvFileContent; + filenamePrefix: string; }> = new Action(); requestCSVFileSuccess: Action = new Action(); - selectSmashServerUrl: Action<{ smashServerUrl: string }> = new Action(); + selectSmashServerUrl: Action<{ + smashServerUrl: string; + }> = new Action(); resetSmashServerError: Action = new Action(); + /* ---------- Redeem ITN Rewards ---------- */ onRedeemStart: Action = new Action(); onConfigurationContinue: Action = new Action(); onCalculateRedeemWalletFees: Action<{ - walletId: string, - recoveryPhrase: Array, + walletId: string; + recoveryPhrase: Array; + }> = new Action(); + onConfirmationContinue: Action<{ + spendingPassword: string; }> = new Action(); - onConfirmationContinue: Action<{ spendingPassword: string }> = new Action(); onResultContinue: Action = new Action(); closeRedeemDialog: Action = new Action(); setStakingInfoWasOpen: Action = new Action(); diff --git a/source/renderer/app/actions/transactions-actions.ts b/source/renderer/app/actions/transactions-actions.ts index 46548406b3..70dbcaefd5 100644 --- a/source/renderer/app/actions/transactions-actions.ts +++ b/source/renderer/app/actions/transactions-actions.ts @@ -1,8 +1,5 @@ -// @flow import Action from './lib/Action'; -import type { TransactionFilterOptionsType } from '../stores/TransactionsStore'; - -// ======= TRANSACTIONS ACTIONS ======= +import type { TransactionFilterOptionsType } from '../stores/TransactionsStore'; // ======= TRANSACTIONS ACTIONS ======= export default class TransactionsActions { filterTransactions: Action = new Action(); diff --git a/source/renderer/app/actions/voting-actions.ts b/source/renderer/app/actions/voting-actions.ts index 0ee5b863e1..a25e7954ff 100644 --- a/source/renderer/app/actions/voting-actions.ts +++ b/source/renderer/app/actions/voting-actions.ts @@ -1,11 +1,9 @@ -// @flow import Action from './lib/Action'; - export default class VotingActions { selectWallet: Action = new Action(); sendTransaction: Action<{ - amount: number, - passphrase: ?string, + amount: number; + passphrase: string | null | undefined; }> = new Action(); generateQrCode: Action = new Action(); saveAsPDF: Action = new Action(); diff --git a/source/renderer/app/actions/wallet-backup-actions.ts b/source/renderer/app/actions/wallet-backup-actions.ts index 9cb29849af..8ac9364c0a 100644 --- a/source/renderer/app/actions/wallet-backup-actions.ts +++ b/source/renderer/app/actions/wallet-backup-actions.ts @@ -1,17 +1,14 @@ -// @flow -import Action from './lib/Action'; - -// ======= WALLET BACKUP ACTIONS ======= +import Action from './lib/Action'; // ======= WALLET BACKUP ACTIONS ======= export default class WalletBackupActions { startWalletBackup: Action = new Action(); initiateWalletBackup: Action<{ - recoveryPhrase: Array, + recoveryPhrase: Array; }> = new Action(); acceptPrivacyNoticeForWalletBackup: Action = new Action(); continueToRecoveryPhraseForWalletBackup: Action = new Action(); updateWalletBackupVerificationPhrase: Action<{ - verificationPhrase: Array, + verificationPhrase: Array; }> = new Action(); acceptWalletBackupTermOffline: Action = new Action(); acceptWalletBackupTermRecovery: Action = new Action(); diff --git a/source/renderer/app/actions/wallet-migration-actions.ts b/source/renderer/app/actions/wallet-migration-actions.ts index dd630d00c5..e023db8386 100644 --- a/source/renderer/app/actions/wallet-migration-actions.ts +++ b/source/renderer/app/actions/wallet-migration-actions.ts @@ -1,17 +1,20 @@ -// @flow import Action from './lib/Action'; import type { ImportFromOption } from '../types/walletExportTypes'; - export default class WalletMigrationActions { initiateMigration: Action = new Action(); startMigration: Action = new Action(); finishMigration: Action = new Action(); resetMigration: Action = new Action(); - toggleWalletImportSelection: Action<{ index: number }> = new Action(); - updateWalletName: Action<{ index: number, name: string }> = new Action(); + toggleWalletImportSelection: Action<{ + index: number; + }> = new Action(); + updateWalletName: Action<{ + index: number; + name: string; + }> = new Action(); nextStep: Action = new Action(); selectExportSourcePath: Action<{ - importFrom: ImportFromOption, + importFrom: ImportFromOption; }> = new Action(); resetExportSourcePath: Action = new Action(); } diff --git a/source/renderer/app/actions/wallet-settings-actions.ts b/source/renderer/app/actions/wallet-settings-actions.ts index 6da47aa530..944f7c3db1 100644 --- a/source/renderer/app/actions/wallet-settings-actions.ts +++ b/source/renderer/app/actions/wallet-settings-actions.ts @@ -1,23 +1,25 @@ -// @flow import Action from './lib/Action'; - export type WalletExportToFileParams = { - walletId: string, - exportType: string, - filePath: string, - password: ?string, + walletId: string; + exportType: string; + filePath: string; + password: string | null | undefined; }; - export default class WalletSettingsActions { cancelEditingWalletField: Action = new Action(); - startEditingWalletField: Action<{ field: string }> = new Action(); + startEditingWalletField: Action<{ + field: string; + }> = new Action(); stopEditingWalletField: Action = new Action(); - updateWalletField: Action<{ field: string, value: string }> = new Action(); + updateWalletField: Action<{ + field: string; + value: string; + }> = new Action(); updateSpendingPassword: Action<{ - walletId: string, - oldPassword: string, - newPassword: string, - isLegacy: boolean, + walletId: string; + oldPassword: string; + newPassword: string; + isLegacy: boolean; }> = new Action(); exportToFile: Action = new Action(); @@ -28,7 +30,7 @@ export default class WalletSettingsActions { /* ---------- Recovery Phrase Verification ---------- */ recoveryPhraseVerificationContinue: Action = new Action(); recoveryPhraseVerificationCheck: Action<{ - recoveryPhrase: Array, + recoveryPhrase: Array; }> = new Action(); recoveryPhraseVerificationClose: Action = new Action(); toggleShowUsedAddresses: Action = new Action(); diff --git a/source/renderer/app/actions/wallets-actions.ts b/source/renderer/app/actions/wallets-actions.ts index 0a5050fa6a..40d5f0cc1f 100644 --- a/source/renderer/app/actions/wallets-actions.ts +++ b/source/renderer/app/actions/wallets-actions.ts @@ -1,4 +1,3 @@ -// @flow import Action from './lib/Action'; import type { WalletExportTypeChoices } from '../types/walletExportTypes'; import type { @@ -8,21 +7,19 @@ import type { import type { CsvFileContent } from '../../../common/types/csv-request.types'; import type { QuitStakePoolRequest } from '../api/staking/types'; import type { AssetToken } from '../api/assets/types'; - export type WalletImportFromFileParams = { - filePath: string, - walletName: ?string, - spendingPassword: string, -}; - -// ======= WALLET ACTIONS ======= + filePath: string; + walletName: string | null | undefined; + spendingPassword: string; +}; // ======= WALLET ACTIONS ======= export default class WalletsActions { refreshWalletsDataSuccess: Action = new Action(); + /* ---------- Create Wallet ---------- */ createWallet: Action<{ - name: string, - spendingPassword: string, + name: string; + spendingPassword: string; }> = new Action(); createWalletBegin: Action = new Action(); createWalletChangeStep: Action = new Action(); @@ -35,57 +32,80 @@ export default class WalletsActions { restoreWalletChangeStep: Action = new Action(); restoreWalletClose: Action = new Action(); restoreWalletCancelClose: Action = new Action(); - restoreWalletSetKind: Action<{ param?: string, kind: string }> = new Action(); + restoreWalletSetKind: Action<{ + param?: string; + kind: string; + }> = new Action(); restoreWalletSetMnemonics: Action<{ - mnemonics: Array, + mnemonics: Array; }> = new Action(); restoreWalletSetConfig: Action<{ - param: string, - value: string, + param: string; + value: string; }> = new Action(); - restoreWallet: Action = new Action(); importWalletFromFile: Action = new Action(); - deleteWallet: Action<{ walletId: string, isLegacy: boolean }> = new Action(); + deleteWallet: Action<{ + walletId: string; + isLegacy: boolean; + }> = new Action(); undelegateWallet: Action = new Action(); setUndelegateWalletSubmissionSuccess: Action<{ - result: boolean, + result: boolean; }> = new Action(); sendMoney: Action<{ - receiver: string, - amount: string, - passphrase: string, - assets?: Array, - assetsAmounts?: Array, + receiver: string; + amount: string; + passphrase: string; + assets?: Array; + assetsAmounts?: Array; }> = new Action(); chooseWalletExportType: Action<{ - walletExportType: WalletExportTypeChoices, + walletExportType: WalletExportTypeChoices; + }> = new Action(); + generateCertificate: Action<{ + filePath: string; }> = new Action(); - generateCertificate: Action<{ filePath: string }> = new Action(); generateCsv: Action<{ - filePath: string, - fileContent: CsvFileContent, + filePath: string; + fileContent: CsvFileContent; }> = new Action(); generateAddressPDF: Action<{ - note: string, - address: string, - filePath: string, + note: string; + address: string; + filePath: string; + }> = new Action(); + generateAddressPDFSuccess: Action<{ + walletAddress: string; }> = new Action(); - generateAddressPDFSuccess: Action<{ walletAddress: string }> = new Action(); saveQRCodeImage: Action<{ - address: string, - filePath: string, - }> = new Action(); - saveQRCodeImageSuccess: Action<{ walletAddress: string }> = new Action(); - getAccountPublicKey: Action<{ spendingPassword: string }> = new Action(); - getICOPublicKey: Action<{ spendingPassword: string }> = new Action(); - copyWalletPublicKey: Action<{ publicKey: string }> = new Action(); - copyICOPublicKey: Action<{ publicKey: string }> = new Action(); - copyAddress: Action<{ address: string }> = new Action(); + address: string; + filePath: string; + }> = new Action(); + saveQRCodeImageSuccess: Action<{ + walletAddress: string; + }> = new Action(); + getAccountPublicKey: Action<{ + spendingPassword: string; + }> = new Action(); + getICOPublicKey: Action<{ + spendingPassword: string; + }> = new Action(); + copyWalletPublicKey: Action<{ + publicKey: string; + }> = new Action(); + copyICOPublicKey: Action<{ + publicKey: string; + }> = new Action(); + copyAddress: Action<{ + address: string; + }> = new Action(); updateCertificateStep: Action = new Action(); closeCertificateGeneration: Action = new Action(); closeRewardsCsvGeneration: Action = new Action(); - setCertificateTemplate: Action<{ selectedTemplate: string }> = new Action(); + setCertificateTemplate: Action<{ + selectedTemplate: string; + }> = new Action(); finishCertificate: Action = new Action(); finishRewardsCsv: Action = new Action(); @@ -95,18 +115,22 @@ export default class WalletsActions { transferFundsNextStep: Action = new Action(); transferFundsPrevStep: Action = new Action(); transferFundsSetSourceWalletId: Action<{ - sourceWalletId: string, + sourceWalletId: string; }> = new Action(); transferFundsSetTargetWalletId: Action<{ - targetWalletId: string, + targetWalletId: string; }> = new Action(); transferFundsRedeem: Action = new Action(); transferFundsClose: Action = new Action(); - transferFundsCalculateFee: Action<{ sourceWalletId: string }> = new Action(); - transferFunds: Action<{ spendingPassword: string }> = new Action(); + transferFundsCalculateFee: Action<{ + sourceWalletId: string; + }> = new Action(); + transferFunds: Action<{ + spendingPassword: string; + }> = new Action(); createHardwareWallet: Action<{ - walletName: string, - extendedPublicKey: HardwareWalletExtendedPublicKeyResponse, - device: TransportDevice, + walletName: string; + extendedPublicKey: HardwareWalletExtendedPublicKeyResponse; + device: TransportDevice; }> = new Action(); } diff --git a/source/renderer/app/actions/wallets-local-actions.ts b/source/renderer/app/actions/wallets-local-actions.ts index d7154511a3..15aae88fc6 100644 --- a/source/renderer/app/actions/wallets-local-actions.ts +++ b/source/renderer/app/actions/wallets-local-actions.ts @@ -1,12 +1,12 @@ -// @flow import Action from './lib/Action'; - export default class WalletSettingsActions { refreshWalletsLocalData: Action = new Action(); setWalletLocalData: Action<{ - walletId: string, - updatedWalletData?: Object, - skipRefresh?: boolean, + walletId: string; + updatedWalletData?: Record; + skipRefresh?: boolean; + }> = new Action(); + unsetWalletLocalData: Action<{ + walletId: string; }> = new Action(); - unsetWalletLocalData: Action<{ walletId: string }> = new Action(); } diff --git a/source/renderer/app/actions/window-actions.ts b/source/renderer/app/actions/window-actions.ts index fb5143b81a..82de6e993c 100644 --- a/source/renderer/app/actions/window-actions.ts +++ b/source/renderer/app/actions/window-actions.ts @@ -1,7 +1,8 @@ -// @flow import Action from './lib/Action'; - export default class WindowActions { - resizeWindow: Action<{ width: number, height: number }> = new Action(); + resizeWindow: Action<{ + width: number; + height: number; + }> = new Action(); closeWindow: Action<{}> = new Action(); } diff --git a/source/renderer/app/api/addresses/requests/constructAddress.ts b/source/renderer/app/api/addresses/requests/constructAddress.ts index 42cfafe515..76d17c3d23 100644 --- a/source/renderer/app/api/addresses/requests/constructAddress.ts +++ b/source/renderer/app/api/addresses/requests/constructAddress.ts @@ -1,7 +1,5 @@ -// @flow import { request } from '../../utils/request'; import type { RequestConfig } from '../../common/types'; - export const constructAddress = ( config: RequestConfig, { data }: any // @TODO diff --git a/source/renderer/app/api/addresses/requests/createByronWalletAddress.ts b/source/renderer/app/api/addresses/requests/createByronWalletAddress.ts index 65ffcd4ef6..b3394e24bc 100644 --- a/source/renderer/app/api/addresses/requests/createByronWalletAddress.ts +++ b/source/renderer/app/api/addresses/requests/createByronWalletAddress.ts @@ -1,20 +1,19 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Address } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export type CreateAddressParams = { - walletId: string, - passphrase: string, - addressIndex?: number, + walletId: string; + passphrase: string; + addressIndex?: number; }; - export const createByronWalletAddress = ( config: RequestConfig, { passphrase, addressIndex, walletId }: CreateAddressParams ): Promise

=> { - let data = { passphrase }; + let data = { + passphrase, + }; data = addressIndex ? { ...data, address_index: addressIndex } : data; return request( { diff --git a/source/renderer/app/api/addresses/requests/getAddress.ts b/source/renderer/app/api/addresses/requests/getAddress.ts index 4835087db2..255404a127 100644 --- a/source/renderer/app/api/addresses/requests/getAddress.ts +++ b/source/renderer/app/api/addresses/requests/getAddress.ts @@ -1,12 +1,9 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Address } from '../types'; import { request } from '../../utils/request'; - export type GetAddressParams = { - address: string, + address: string; }; - export const getAddress = ( config: RequestConfig, { address }: GetAddressParams diff --git a/source/renderer/app/api/addresses/requests/getAddresses.ts b/source/renderer/app/api/addresses/requests/getAddresses.ts index 1657d55e6b..443469c0af 100644 --- a/source/renderer/app/api/addresses/requests/getAddresses.ts +++ b/source/renderer/app/api/addresses/requests/getAddresses.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Addresses, GetAddressesRequestQueryParams } from '../types'; import { request } from '../../utils/request'; - export const getAddresses = ( config: RequestConfig, walletId: string, diff --git a/source/renderer/app/api/addresses/requests/getByronWalletAddresses.ts b/source/renderer/app/api/addresses/requests/getByronWalletAddresses.ts index 4011c2b460..5f9b3fe03f 100644 --- a/source/renderer/app/api/addresses/requests/getByronWalletAddresses.ts +++ b/source/renderer/app/api/addresses/requests/getByronWalletAddresses.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Addresses, GetAddressesRequestQueryParams } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const getByronWalletAddresses = ( config: RequestConfig, walletId: string, diff --git a/source/renderer/app/api/addresses/requests/inspectAddress.ts b/source/renderer/app/api/addresses/requests/inspectAddress.ts index ae9cbccf29..7320eff19b 100644 --- a/source/renderer/app/api/addresses/requests/inspectAddress.ts +++ b/source/renderer/app/api/addresses/requests/inspectAddress.ts @@ -1,8 +1,6 @@ -// @flow import { request } from '../../utils/request'; import type { RequestConfig } from '../../common/types'; import type { InspectAddressResponse } from '../types'; - export const inspectAddress = ( config: RequestConfig, { addressId }: any // @TODO diff --git a/source/renderer/app/api/addresses/types.ts b/source/renderer/app/api/addresses/types.ts index 26446e6ed7..99f881ca27 100644 --- a/source/renderer/app/api/addresses/types.ts +++ b/source/renderer/app/api/addresses/types.ts @@ -1,49 +1,39 @@ -// @flow export type AddressState = 'used' | 'unused'; - export type AddressStyle = 'Byron' | 'Shelley' | 'Icarus'; - export type StakeReference = 'none' | 'by value' | 'by pointer'; - export type GetAddressesRequestQueryParams = { - state: AddressState, + state: AddressState; }; - export type Address = { - id: string, - state: AddressState, - derivation_path: Array, + id: string; + state: AddressState; + derivation_path: Array; }; - export type Addresses = Array
; - export type GetAddressesRequest = { - walletId: string, - isLegacy: boolean, - queryParams?: GetAddressesRequestQueryParams, - isHardwareWallet?: boolean, + walletId: string; + isLegacy: boolean; + queryParams?: GetAddressesRequestQueryParams; + isHardwareWallet?: boolean; }; - export type InspectAddressResponse = { - address_style: AddressStyle, - stake_reference: StakeReference, - network_tag?: number, - spending_key_hash?: string, - stake_key_hash?: string, - script_hash?: string, + address_style: AddressStyle; + stake_reference: StakeReference; + network_tag?: number; + spending_key_hash?: string; + stake_key_hash?: string; + script_hash?: string; pointer?: { - slot_num: number, - transaction_index: number, - output_index: number, - }, - address_root?: string, - derivation_path?: string, + slot_num: number; + transaction_index: number; + output_index: number; + }; + address_root?: string; + derivation_path?: string; }; - // Byron related types - export type CreateByronWalletAddressRequest = { - walletId: string, - passphrase: string, - addressIndex?: number, + walletId: string; + passphrase: string; + addressIndex?: number; }; diff --git a/source/renderer/app/api/api.ts b/source/renderer/app/api/api.ts index ef3ac3448b..987833cd83 100644 --- a/source/renderer/app/api/api.ts +++ b/source/renderer/app/api/api.ts @@ -1,4 +1,3 @@ -// @flow import { split, get, map, last, size, concat, flatten } from 'lodash'; import { action } from 'mobx'; import BigNumber from 'bignumber.js'; @@ -15,19 +14,16 @@ import { TransactionWithdrawal, } from '../domains/WalletTransaction'; import WalletAddress from '../domains/WalletAddress'; - // Addresses requests import { getAddresses } from './addresses/requests/getAddresses'; import { getByronWalletAddresses } from './addresses/requests/getByronWalletAddresses'; import { createByronWalletAddress } from './addresses/requests/createByronWalletAddress'; import { constructAddress } from './addresses/requests/constructAddress'; import { inspectAddress } from './addresses/requests/inspectAddress'; - // Network requests import { getNetworkInfo } from './network/requests/getNetworkInfo'; import { getNetworkClock } from './network/requests/getNetworkClock'; import { getNetworkParameters } from './network/requests/getNetworkParameters'; - // Transactions requests import { getTransactionFee } from './transactions/requests/getTransactionFee'; import { getByronWalletTransactionFee } from './transactions/requests/getByronWalletTransactionFee'; @@ -42,10 +38,8 @@ import { selectCoins } from './transactions/requests/selectCoins'; import { createExternalTransaction } from './transactions/requests/createExternalTransaction'; import { getPublicKey } from './transactions/requests/getPublicKey'; import { getICOPublicKey } from './transactions/requests/getICOPublicKey'; - // Voting requests import { createWalletSignature } from './voting/requests/createWalletSignature'; - // Wallets requests import { updateSpendingPassword } from './wallets/requests/updateSpendingPassword'; import { updateByronSpendingPassword } from './wallets/requests/updateByronSpendingPassword'; @@ -73,13 +67,10 @@ import { transferFunds } from './wallets/requests/transferFunds'; import { createHardwareWallet } from './wallets/requests/createHardwareWallet'; import { getCurrencyList } from './wallets/requests/getCurrencyList'; import { getCurrencyRate } from './wallets/requests/getCurrencyRate'; - // Staking import StakePool from '../domains/StakePool'; - // News requests import { getNews } from './news/requests/getNews'; - // Stake Pools request import { getStakePools } from './staking/requests/getStakePools'; import { getDelegationFee } from './staking/requests/getDelegationFee'; @@ -88,7 +79,6 @@ import { quitStakePool } from './staking/requests/quitStakePool'; import { getSmashSettings } from './staking/requests/getSmashSettings'; import { checkSmashServerHealth } from './staking/requests/checkSmashServerHealth'; import { updateSmashSettings } from './staking/requests/updateSmashSettings'; - // Utility functions import { cardanoFaultInjectionChannel } from '../ipc/cardano.ipc'; import patchAdaApi from './utils/patchAdaApi'; @@ -103,7 +93,6 @@ import { } from './utils/mnemonics'; import { filterLogData } from '../../../common/utils/logging'; import { derivationPathToAddressPath } from '../utils/hardwareWalletUtils'; - // Config constants import { LOVELACES_PER_ADA } from '../config/numbersConfig'; import { @@ -119,7 +108,6 @@ import { WALLET_RECOVERY_PHRASE_WORD_COUNT, } from '../config/cryptoConfig'; import { currencyConfig } from '../config/currencyConfig'; - // Addresses Types import type { Address, @@ -127,10 +115,8 @@ import type { CreateByronWalletAddressRequest, InspectAddressResponse, } from './addresses/types'; - // Common Types import type { RequestConfig } from './common/types'; - // Network Types import type { GetNetworkInfoResponse, @@ -140,7 +126,6 @@ import type { GetNetworkParametersResponse, GetNetworkParametersApiResponse, } from './network/types'; - // Transactions Types import type { Transaction, @@ -163,7 +148,6 @@ import type { VotingMetadataType, ICOPublicKeyParams, } from './transactions/types'; - // Wallets Types import type { AdaWallet, @@ -198,10 +182,8 @@ import type { GetAccountPublicKeyRequest, } from './wallets/types'; import type { WalletProps } from '../domains/Wallet'; - // News Types import type { GetNewsResponse } from './news/types'; - // Staking Types import type { JoinStakePoolRequest, @@ -218,16 +200,13 @@ import type { CheckSmashServerHealthApiResponse, PoolMetadataSource, } from './staking/types'; - // Voting Types import type { CreateVotingRegistrationRequest, CreateWalletSignatureRequest, } from './voting/types'; - import type { StakePoolProps } from '../domains/StakePool'; import type { FaultInjectionIpcRequest } from '../../../common/types/cardano-node.types'; - import { TlsCertificateNotValidError } from './nodes/errors'; import { getSHA256HexForString } from './utils/hashing'; import { getNewsHash } from './news/requests/getNewsHash'; @@ -245,10 +224,8 @@ import type { AssetLocalData } from './utils/localStorage'; import Asset from '../domains/Asset'; import { getAssets } from './assets/requests/getAssets'; import { getAccountPublicKey } from './wallets/requests/getAccountPublicKey'; - export default class AdaApi { config: RequestConfig; - // We need to preserve all asset metadata during single runtime in order // to avoid losing it in case of Token Metadata Registry server unvailability storedAssetMetadata: StoredAssetMetadata = {}; @@ -268,6 +245,7 @@ export default class AdaApi { getHardwareWalletLocalData, getHardwareWalletsLocalData, } = global.daedalus.api.localStorage; + try { const wallets: AdaWallets = await getWallets(this.config); const legacyWallets: LegacyAdaWallets = await getLegacyWallets( @@ -281,7 +259,8 @@ export default class AdaApi { }); map(legacyWallets, (legacyAdaWallet) => { const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -289,12 +268,8 @@ export default class AdaApi { }, isLegacy: true, }; - wallets.push({ - ...legacyAdaWallet, - ...extraLegacyWalletProps, - }); + wallets.push({ ...legacyAdaWallet, ...extraLegacyWalletProps }); }); - // @TODO - Remove this once we get hardware wallet flag from WBE return await Promise.all( wallets.map(async (wallet) => { @@ -308,25 +283,31 @@ export default class AdaApi { }) ); } catch (error) { - logger.error('AdaApi::getWallets error', { error }); + logger.error('AdaApi::getWallets error', { + error, + }); throw new ApiError(error); } }; - getWallet = async (request: GetWalletRequest): Promise => { logger.debug('AdaApi::getWallet called', { parameters: filterLogData(request), }); + try { const { walletId, isLegacy } = request; let wallet; + if (isLegacy) { const legacyWallet: LegacyAdaWallet = await getLegacyWallet( this.config, - { walletId } + { + walletId, + } ); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -334,27 +315,31 @@ export default class AdaApi { }, isLegacy: true, }; - wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; + wallet = { ...legacyWallet, ...extraLegacyWalletProps }; } else { - wallet = await getWallet(this.config, { walletId }); + wallet = await getWallet(this.config, { + walletId, + }); } - logger.debug('AdaApi::getWallet success', { wallet }); + + logger.debug('AdaApi::getWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::getWallet error', { error }); + logger.error('AdaApi::getWallet error', { + error, + }); throw new ApiError(error); } }; - getWalletPublicKey = async ( request: GetWalletPublicKeyRequest ): Promise => { logger.debug('AdaApi::getWalletPublicKey called', { parameters: filterLogData(request), }); + try { const { walletId, role, index } = request; const walletPublicKey: string = await getWalletPublicKey(this.config, { @@ -362,20 +347,24 @@ export default class AdaApi { role, index, }); - logger.debug('AdaApi::getWalletPublicKey success', { walletPublicKey }); + logger.debug('AdaApi::getWalletPublicKey success', { + walletPublicKey, + }); return walletPublicKey; } catch (error) { - logger.error('AdaApi::getWalletPublicKey error', { error }); + logger.error('AdaApi::getWalletPublicKey error', { + error, + }); throw new ApiError(error); } }; - getAccountPublicKey = async ( request: GetAccountPublicKeyRequest ): Promise => { logger.debug('AdaApi::getAccountPublicKey called', { parameters: filterLogData(request), }); + try { const { walletId, index, passphrase, extended } = request; const accountPublicKey: string = await getAccountPublicKey(this.config, { @@ -384,10 +373,14 @@ export default class AdaApi { passphrase, extended, }); - logger.debug('AdaApi::getAccountPublicKey success', { accountPublicKey }); + logger.debug('AdaApi::getAccountPublicKey success', { + accountPublicKey, + }); return accountPublicKey; } catch (error) { - logger.error('AdaApi::getAccountPublicKey error', { error }); + logger.error('AdaApi::getAccountPublicKey error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -395,7 +388,6 @@ export default class AdaApi { .result(); } }; - getAddresses = async ( request: GetAddressesRequest ): Promise> => { @@ -406,6 +398,7 @@ export default class AdaApi { try { let response = []; + if (isLegacy) { response = await getByronWalletAddresses( this.config, @@ -416,18 +409,24 @@ export default class AdaApi { response = await getAddresses(this.config, walletId, queryParams); response.reverse(); } - logger.debug('AdaApi::getAddresses success', { addresses: response }); + + logger.debug('AdaApi::getAddresses success', { + addresses: response, + }); return response.map(_createAddressFromServerData); } catch (error) { - logger.error('AdaApi::getAddresses error', { error }); + logger.error('AdaApi::getAddresses error', { + error, + }); throw new ApiError(error); } }; - getTransaction = async ( request: GetTransactionRequest ): Promise => { - logger.debug('AdaApi::getTransaction called', { parameters: request }); + logger.debug('AdaApi::getTransaction called', { + parameters: request, + }); const { walletId, transactionId } = request; try { @@ -436,20 +435,24 @@ export default class AdaApi { walletId, transactionId ); - logger.debug('AdaApi::getTransaction success', { response }); + logger.debug('AdaApi::getTransaction success', { + response, + }); return _createTransactionFromServerData(response); } catch (error) { - logger.error('AdaApi::getTransaction error', { error }); + logger.error('AdaApi::getTransaction error', { + error, + }); throw new ApiError(error); } }; - getTransactions = async ( request: GetTransactionsRequest ): Promise => { - logger.debug('AdaApi::getTransactions called', { parameters: request }); + logger.debug('AdaApi::getTransactions called', { + parameters: request, + }); const { walletId, order, fromDate, toDate, isLegacy } = request; - const params = Object.assign( {}, { @@ -463,6 +466,7 @@ export default class AdaApi { try { let response; + if (isLegacy) { response = await getLegacyWalletTransactionHistory( this.config, @@ -479,14 +483,16 @@ export default class AdaApi { const transactions = response.map((tx) => _createTransactionFromServerData(tx) ); - return Promise.resolve({ transactions, total: response.length }); + return Promise.resolve({ + transactions, + total: response.length, + }); } catch (error) { - logger.error('AdaApi::getTransactions error', { error }); + logger.error('AdaApi::getTransactions error', { + error, + }); throw new ApiError(error); - } - - // @API TODO - Filter / Search fine tuning "pending" for V2 - + } // @API TODO - Filter / Search fine tuning "pending" for V2 // const requestStats = Object.assign({}, request, { // cachedTransactions: request.cachedTransactions.length, // }); @@ -635,12 +641,16 @@ export default class AdaApi { // throw new GenericApiError(error); // } }; - getAssets = async (request: GetAssetsRequest): Promise => { - logger.debug('AdaApi::getAssets called', { parameters: request }); + logger.debug('AdaApi::getAssets called', { + parameters: request, + }); const { walletId } = request; + try { - const response = await getAssets(this.config, { walletId }); + const response = await getAssets(this.config, { + walletId, + }); logger.debug('AdaApi::getAssets success', { assets: response, }); @@ -656,19 +666,26 @@ export default class AdaApi { ) ); return new Promise((resolve) => - resolve({ assets, total: response.length }) + resolve({ + assets, + total: response.length, + }) ); } catch (error) { - logger.error('AdaApi::getAssets error', { error }); + logger.error('AdaApi::getAssets error', { + error, + }); throw new ApiError(error); } }; - getWithdrawals = async ( request: GetWithdrawalsRequest ): Promise => { - logger.debug('AdaApi::getWithdrawals called', { parameters: request }); + logger.debug('AdaApi::getWithdrawals called', { + parameters: request, + }); const { walletId } = request; + try { const response = await getWithdrawalHistory(this.config, walletId); logger.debug('AdaApi::getWithdrawals success', { @@ -687,18 +704,22 @@ export default class AdaApi { withdrawals = withdrawals.plus(withdrawal); }); }); - return { withdrawals }; + return { + withdrawals, + }; } catch (error) { - logger.error('AdaApi::getWithdrawals error', { error }); + logger.error('AdaApi::getWithdrawals error', { + error, + }); throw new ApiError(error); } }; - createWallet = async (request: CreateWalletRequest): Promise => { logger.debug('AdaApi::createWallet called', { parameters: filterLogData(request), }); const { name, mnemonic, spendingPassword } = request; + try { const walletInitData = { name, @@ -708,14 +729,17 @@ export default class AdaApi { const wallet: AdaWallet = await createWallet(this.config, { walletInitData, }); - logger.debug('AdaApi::createWallet success', { wallet }); + logger.debug('AdaApi::createWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::createWallet error', { error }); + logger.error('AdaApi::createWallet error', { + error, + }); throw new ApiError(error); } }; - createLegacyWallet = async ( request: CreateWalletRequest ): Promise => { @@ -723,6 +747,7 @@ export default class AdaApi { parameters: filterLogData(request), }); const { name, mnemonic, spendingPassword } = request; + try { const walletInitData = { name, @@ -731,7 +756,9 @@ export default class AdaApi { }; const legacyWallet: LegacyAdaWallet = await restoreByronWallet( this.config, - { walletInitData }, + { + walletInitData, + }, 'random' ); // Generate address for the newly created Byron wallet @@ -740,9 +767,12 @@ export default class AdaApi { passphrase: spendingPassword, walletId, }); - logger.debug('AdaApi::createByronWalletAddress success', { address }); + logger.debug('AdaApi::createByronWalletAddress success', { + address, + }); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -754,38 +784,48 @@ export default class AdaApi { total: [], }, }; - const wallet: AdaWallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::createLegacyWallet success', { wallet }); + const wallet: AdaWallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::createLegacyWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::createLegacyWallet error', { error }); + logger.error('AdaApi::createLegacyWallet error', { + error, + }); throw new ApiError(error); } }; - deleteWallet = async (request: DeleteWalletRequest): Promise => { logger.debug('AdaApi::deleteWallet called', { parameters: filterLogData(request), }); + try { const { walletId, isLegacy } = request; let response; + if (isLegacy) { - response = await deleteLegacyWallet(this.config, { walletId }); + response = await deleteLegacyWallet(this.config, { + walletId, + }); } else { - response = await deleteWallet(this.config, { walletId }); + response = await deleteWallet(this.config, { + walletId, + }); } - logger.debug('AdaApi::deleteWallet success', { response }); + + logger.debug('AdaApi::deleteWallet success', { + response, + }); return true; } catch (error) { - logger.error('AdaApi::deleteWallet error', { error }); + logger.error('AdaApi::deleteWallet error', { + error, + }); throw new ApiError(error); } }; - createTransaction = async ( request: CreateTransactionRequest ): Promise => { @@ -816,8 +856,8 @@ export default class AdaApi { ], passphrase, }; - let response: Transaction; + if (isLegacy) { response = await createByronWalletTransaction(this.config, { walletId, @@ -833,10 +873,11 @@ export default class AdaApi { logger.debug('AdaApi::createTransaction success', { transaction: response, }); - return _createTransactionFromServerData(response); } catch (error) { - logger.error('AdaApi::createTransaction error', { error }); + logger.error('AdaApi::createTransaction error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -849,9 +890,8 @@ export default class AdaApi { .result(); } }; - // For testing purpose ONLY - createExpiredTransaction = async (request: any): Promise<*> => { + createExpiredTransaction = async (request: any): Promise => { if (global.environment.isDev) { logger.debug('AdaApi::createTransaction called', { parameters: filterLogData(request), @@ -865,6 +905,7 @@ export default class AdaApi { withdrawal = TransactionWithdrawal, ttl, } = request; + try { const data = { payments: [ @@ -882,8 +923,8 @@ export default class AdaApi { unit: 'second', }, }; - let response: Transaction; + if (isLegacy) { response = await createByronWalletTransaction(this.config, { walletId, @@ -899,10 +940,11 @@ export default class AdaApi { logger.debug('AdaApi::createTransaction success', { transaction: response, }); - return _createTransactionFromServerData(response); } catch (error) { - logger.error('AdaApi::createTransaction error', { error }); + logger.error('AdaApi::createTransaction error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -915,9 +957,9 @@ export default class AdaApi { .result(); } } + return null; }; - calculateTransactionFee = async ( request: GetTransactionFeeRequest ): Promise => { @@ -949,8 +991,8 @@ export default class AdaApi { }, ], }; - let response: TransactionFee; + if (isLegacy) { response = await getByronWalletTransactionFee(this.config, { walletId, @@ -966,20 +1008,28 @@ export default class AdaApi { const formattedTxAmount = new BigNumber(amount.toString()).dividedBy( LOVELACES_PER_ADA ); + const { fee, minimumAda } = _createTransactionFeeFromServerData(response); + const amountWithFee = formattedTxAmount.plus(fee); const isRewardsRedemptionRequest = Array.isArray(withdrawal); + if (!isRewardsRedemptionRequest && amountWithFee.gt(walletBalance)) { // Amount + fees exceeds walletBalance: // = show "Not enough Ada for fees. Try sending a smaller amount." throw new ApiError().result('cannotCoverFee'); } + logger.debug('AdaApi::calculateTransactionFee success', { transactionFee: response, }); - return { fee, minimumAda }; + return { + fee, + minimumAda, + }; } catch (error) { let notEnoughMoneyError; + if (walletBalance.gt(availableBalance)) { // 1. Amount exceeds availableBalance due to pending transactions: // - walletBalance > availableBalance @@ -1021,15 +1071,14 @@ export default class AdaApi { .result(); } }; - selectCoins = async (request: { - walletId: string, - walletBalance: BigNumber, - availableBalance: BigNumber, - rewardsBalance: BigNumber, - payments?: CoinSelectionsPaymentRequestType, - delegation?: CoinSelectionsDelegationRequestType, - metadata?: VotingMetadataType, + walletId: string; + walletBalance: BigNumber; + availableBalance: BigNumber; + rewardsBalance: BigNumber; + payments?: CoinSelectionsPaymentRequestType; + delegation?: CoinSelectionsDelegationRequestType; + metadata?: VotingMetadataType; }): Promise => { logger.debug('AdaApi::selectCoins called', { parameters: filterLogData(request), @@ -1043,8 +1092,10 @@ export default class AdaApi { rewardsBalance, metadata, } = request; + try { let data; + if (delegation) { data = { delegation_action: { @@ -1070,21 +1121,19 @@ export default class AdaApi { } else { throw new Error('Missing parameters!'); } + const response = await selectCoins(this.config, { walletId, data, }); - // @TODO - handle CHANGE paramete on smarter way and change corresponding downstream logic const outputs = concat(response.outputs, response.change); - // Calculate fee from inputs and outputs const inputsData = []; const outputsData = []; const certificatesData = []; let totalInputs = new BigNumber(0); let totalOutputs = new BigNumber(0); - map(response.inputs, (input) => { const inputAmount = new BigNumber(input.amount.quantity.toString()); const inputAssets = map(input.assets, (asset) => ({ @@ -1103,7 +1152,6 @@ export default class AdaApi { }; inputsData.push(inputData); }); - map(outputs, (output) => { const outputAmount = new BigNumber(output.amount.quantity.toString()); const outputAssets = map(output.assets, (asset) => ({ @@ -1137,7 +1185,6 @@ export default class AdaApi { derivationPath: withdrawal.derivation_path, amount: withdrawal.amount, })); - const depositsArray = map(response.deposits, (deposit) => deposit.quantity.toString() ); @@ -1149,7 +1196,6 @@ export default class AdaApi { delegation && delegation.delegationAction === DELEGATION_ACTIONS.QUIT ? new BigNumber(DELEGATION_DEPOSIT).multipliedBy(LOVELACES_PER_ADA) : new BigNumber(0); - const withdrawalsArray = map(response.withdrawals, (withdrawal) => withdrawal.amount.quantity.toString() ); @@ -1165,7 +1211,6 @@ export default class AdaApi { delegation && delegation.delegationAction === DELEGATION_ACTIONS.QUIT ? totalInputs.minus(totalOutputs).plus(depositsReclaimed) : totalInputs.minus(totalOutputs).minus(deposits); - const extendedResponse = { inputs: inputsData, outputs: outputsData, @@ -1176,13 +1221,16 @@ export default class AdaApi { depositsReclaimed: depositsReclaimed.dividedBy(LOVELACES_PER_ADA), metadata: response.metadata || null, }; - - logger.debug('AdaApi::selectCoins success', { extendedResponse }); + logger.debug('AdaApi::selectCoins success', { + extendedResponse, + }); return extendedResponse; } catch (error) { - logger.error('AdaApi::selectCoins error', { error }); - + logger.error('AdaApi::selectCoins error', { + error, + }); let notEnoughMoneyError; + if (walletBalance.gt(availableBalance)) { // 1. Amount exceeds availableBalance due to pending transactions: // - walletBalance > availableBalance @@ -1224,66 +1272,74 @@ export default class AdaApi { .result(); } }; - createExternalTransaction = async ( request: CreateExternalTransactionRequest ): Promise => { const { signedTransactionBlob } = request; + try { const response = await createExternalTransaction(this.config, { signedTransactionBlob, }); return response; } catch (error) { - logger.error('AdaApi::createExternalTransaction error', { error }); + logger.error('AdaApi::createExternalTransaction error', { + error, + }); throw new ApiError(error); } }; - inspectAddress = async (request: { - addressId: string, + addressId: string; }): Promise => { logger.debug('AdaApi::inspectAddress called', { parameters: filterLogData(request), }); const { addressId } = request; + try { const response = await inspectAddress(this.config, { addressId, }); - logger.debug('AdaApi::inspectAddress success', { response }); + logger.debug('AdaApi::inspectAddress success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::inspectAddress error', { error }); + logger.error('AdaApi::inspectAddress error', { + error, + }); throw new ApiError(error); } }; - - getPublicKey = async ( - request: any // @TODO - ): Promise => { + getPublicKey = async (request: any): Promise => { logger.debug('AdaApi::getPublicKey called', { parameters: filterLogData(request), }); const { walletId, role, index } = request; + try { const response = await getPublicKey(this.config, { walletId, role, index, }); - logger.debug('AdaApi::getPublicKey success', { response }); + logger.debug('AdaApi::getPublicKey success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::getPublicKey error', { error }); + logger.error('AdaApi::getPublicKey error', { + error, + }); throw new ApiError(error); } }; - getICOPublicKey = async (request: ICOPublicKeyParams): Promise => { logger.debug('AdaApi::getICOPublicKey called', { parameters: filterLogData(request), }); + try { const response = await getICOPublicKey(this.config, request); logger.debug('AdaApi::getICOPublicKey success', { @@ -1291,7 +1347,9 @@ export default class AdaApi { }); return response; } catch (error) { - logger.error('AdaApi::getICOPublicKey error', { error }); + logger.error('AdaApi::getICOPublicKey error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -1299,23 +1357,24 @@ export default class AdaApi { .result(); } }; - - constructAddress = async ( - request: any // @TODO - ): Promise => { + constructAddress = async (request: any): Promise => { const { data } = request; + try { const response = await constructAddress(this.config, { data, }); - logger.debug('AdaApi::constructAddress success', { response }); + logger.debug('AdaApi::constructAddress success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::constructAddress error', { error }); + logger.error('AdaApi::constructAddress error', { + error, + }); throw new ApiError(error); } }; - createAddress = async ( request: CreateByronWalletAddressRequest ): Promise => { @@ -1324,16 +1383,21 @@ export default class AdaApi { }); const { addressIndex, walletId, passphrase: passwordString } = request; const passphrase = passwordString || ''; + try { const address: Address = await createByronWalletAddress(this.config, { passphrase, walletId, addressIndex, }); - logger.debug('AdaApi::createAddress success', { address }); + logger.debug('AdaApi::createAddress success', { + address, + }); return _createAddressFromServerData(address); } catch (error) { - logger.error('AdaApi::createAddress error', { error }); + logger.error('AdaApi::createAddress error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -1341,14 +1405,17 @@ export default class AdaApi { .result(); } }; - deleteTransaction = async ( request: DeleteTransactionRequest ): Promise => { - logger.debug('AdaApi::deleteTransaction called', { parameters: request }); + logger.debug('AdaApi::deleteTransaction called', { + parameters: request, + }); const { walletId, transactionId, isLegacy } = request; + try { let response; + if (isLegacy) { response = await deleteLegacyTransaction(this.config, { walletId, @@ -1360,20 +1427,22 @@ export default class AdaApi { transactionId, }); } + logger.debug('AdaApi::deleteTransaction success', response); } catch (error) { - logger.error('AdaApi::deleteTransaction error', { error }); - // In this particular call we don't need to handle the error in the UI + logger.error('AdaApi::deleteTransaction error', { + error, + }); // In this particular call we don't need to handle the error in the UI // The only reason transaction canceling would fail is if the transaction // is no longer pending - in which case there is nothing we can do. } }; - isValidCertificateMnemonic = (mnemonic: string): boolean => mnemonic.split(' ').length === ADA_CERTIFICATE_MNEMONIC_LENGTH; getWalletRecoveryPhrase(): Promise> { logger.debug('AdaApi::getWalletRecoveryPhrase called'); + try { const response: Promise> = new Promise((resolve) => resolve(generateAccountMnemonics(WALLET_RECOVERY_PHRASE_WORD_COUNT)) @@ -1381,13 +1450,16 @@ export default class AdaApi { logger.debug('AdaApi::getWalletRecoveryPhrase success'); return response; } catch (error) { - logger.error('AdaApi::getWalletRecoveryPhrase error', { error }); + logger.error('AdaApi::getWalletRecoveryPhrase error', { + error, + }); throw new ApiError(error); } } getWalletCertificateAdditionalMnemonics(): Promise> { logger.debug('AdaApi::getWalletCertificateAdditionalMnemonics called'); + try { const response: Promise> = new Promise((resolve) => resolve(generateAdditionalMnemonics()) @@ -1407,9 +1479,15 @@ export default class AdaApi { ): Promise> { logger.debug('AdaApi::getWalletCertificateRecoveryPhrase called'); const { passphrase, input: scrambledInput } = request; + try { const response: Promise> = new Promise((resolve) => - resolve(scrambleMnemonics({ passphrase, scrambledInput })) + resolve( + scrambleMnemonics({ + passphrase, + scrambledInput, + }) + ) ); logger.debug('AdaApi::getWalletCertificateRecoveryPhrase success'); return response; @@ -1426,8 +1504,12 @@ export default class AdaApi { ): Promise> { logger.debug('AdaApi::getWalletRecoveryPhraseFromCertificate called'); const { passphrase, scrambledInput } = request; + try { - const response = unscrambleMnemonics({ passphrase, scrambledInput }); + const response = unscrambleMnemonics({ + passphrase, + scrambledInput, + }); logger.debug('AdaApi::getWalletRecoveryPhraseFromCertificate success'); return Promise.resolve(response); } catch (error) { @@ -1451,14 +1533,19 @@ export default class AdaApi { mnemonic_sentence: recoveryPhrase, passphrase: spendingPassword, }; + try { const wallet: AdaWallet = await restoreWallet(this.config, { walletInitData, }); - logger.debug('AdaApi::restoreWallet success', { wallet }); + logger.debug('AdaApi::restoreWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreWallet error', { error }); + logger.error('AdaApi::restoreWallet error', { + error, + }); throw new ApiError(error) .set('forbiddenMnemonic') .where('message', 'JSONValidationFailed') @@ -1471,7 +1558,6 @@ export default class AdaApi { .result(); } }; - createHardwareWallet = async ( request: CreateHardwareWalletRequest ): Promise => { @@ -1491,32 +1577,35 @@ export default class AdaApi { walletInitData, } ); - const wallet = { - ...hardwareWallet, - isHardwareWallet: true, - }; - logger.debug('AdaApi::createHardwareWallet success', { wallet }); + const wallet = { ...hardwareWallet, isHardwareWallet: true }; + logger.debug('AdaApi::createHardwareWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::createHardwareWallet error', { error }); + logger.error('AdaApi::createHardwareWallet error', { + error, + }); throw new ApiError(error); } }; - getCurrencyList = async (): Promise => { try { const apiResponse = await getCurrencyList(); const response: GetCurrencyListResponse = currencyConfig.responses.list( apiResponse ); - logger.debug('AdaApi::getCurrencyList success', { response }); + logger.debug('AdaApi::getCurrencyList success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::getCurrencyList error', { error }); + logger.error('AdaApi::getCurrencyList error', { + error, + }); throw new ApiError(error); } }; - getCurrencyRate = async ( currency: GetCurrencyRateRequest ): Promise => { @@ -1525,14 +1614,17 @@ export default class AdaApi { const response: GetCurrencyRateResponse = currencyConfig.responses.rate( apiResponse ); - logger.debug('AdaApi::getCurrencyRate success', { response }); + logger.debug('AdaApi::getCurrencyRate success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::getCurrencyRate error', { error }); + logger.error('AdaApi::getCurrencyRate error', { + error, + }); throw new ApiError(error); } }; - restoreLegacyWallet = async ( request: RestoreLegacyWalletRequest ): Promise => { @@ -1546,13 +1638,17 @@ export default class AdaApi { mnemonic_sentence: recoveryPhrase, passphrase: spendingPassword, }; + try { const legacyWallet: LegacyAdaWallet = await restoreLegacyWallet( this.config, - { walletInitData } + { + walletInitData, + } ); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1560,14 +1656,15 @@ export default class AdaApi { }, isLegacy: true, }; - const wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::restoreLegacyWallet success', { wallet }); + const wallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::restoreLegacyWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreLegacyWallet error', { error }); + logger.error('AdaApi::restoreLegacyWallet error', { + error, + }); throw new ApiError(error) .set('forbiddenMnemonic') .where('message', 'JSONValidationFailed') @@ -1580,7 +1677,6 @@ export default class AdaApi { .result(); } }; - restoreByronRandomWallet = async ( request: RestoreLegacyWalletRequest ): Promise => { @@ -1594,23 +1690,27 @@ export default class AdaApi { passphrase: spendingPassword, }; const type = WALLET_BYRON_KINDS.RANDOM; + try { const legacyWallet: LegacyAdaWallet = await restoreByronWallet( this.config, - { walletInitData }, + { + walletInitData, + }, type ); - // Generate address for the newly restored Byron wallet const { id: walletId } = legacyWallet; const address: Address = await createByronWalletAddress(this.config, { passphrase: spendingPassword, walletId, }); - logger.debug('AdaApi::createAddress (Byron) success', { address }); - + logger.debug('AdaApi::createAddress (Byron) success', { + address, + }); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1618,14 +1718,15 @@ export default class AdaApi { }, isLegacy: true, }; - const wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::restoreByronRandomWallet success', { wallet }); + const wallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::restoreByronRandomWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreByronRandomWallet error', { error }); + logger.error('AdaApi::restoreByronRandomWallet error', { + error, + }); throw new ApiError(error) .set('forbiddenMnemonic') .where('message', 'JSONValidationFailed') @@ -1638,7 +1739,6 @@ export default class AdaApi { .result(); } }; - restoreByronIcarusWallet = async ( request: RestoreLegacyWalletRequest ): Promise => { @@ -1652,14 +1752,18 @@ export default class AdaApi { passphrase: spendingPassword, }; const type = WALLET_BYRON_KINDS.ICARUS; + try { const legacyWallet: LegacyAdaWallet = await restoreByronWallet( this.config, - { walletInitData }, + { + walletInitData, + }, type ); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1667,14 +1771,15 @@ export default class AdaApi { }, isLegacy: true, }; - const wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::restoreByronIcarusWallet success', { wallet }); + const wallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::restoreByronIcarusWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreByronIcarusWallet error', { error }); + logger.error('AdaApi::restoreByronIcarusWallet error', { + error, + }); throw new ApiError(error) .set('forbiddenMnemonic') .where('message', 'JSONValidationFailed') @@ -1687,7 +1792,6 @@ export default class AdaApi { .result(); } }; - restoreByronTrezorWallet = async ( request: RestoreLegacyWalletRequest ): Promise => { @@ -1701,14 +1805,18 @@ export default class AdaApi { passphrase: spendingPassword, }; const type = WALLET_BYRON_KINDS.TREZOR; + try { const legacyWallet: LegacyAdaWallet = await restoreByronWallet( this.config, - { walletInitData }, + { + walletInitData, + }, type ); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1716,14 +1824,15 @@ export default class AdaApi { }, isLegacy: true, }; - const wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::restoreByronTrezorWallet success', { wallet }); + const wallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::restoreByronTrezorWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreByronTrezorWallet error', { error }); + logger.error('AdaApi::restoreByronTrezorWallet error', { + error, + }); throw new ApiError(error) .set('forbiddenMnemonic') .where('message', 'JSONValidationFailed') @@ -1736,7 +1845,6 @@ export default class AdaApi { .result(); } }; - restoreByronLedgerWallet = async ( request: RestoreLegacyWalletRequest ): Promise => { @@ -1750,14 +1858,18 @@ export default class AdaApi { passphrase: spendingPassword, }; const type = WALLET_BYRON_KINDS.LEDGER; + try { const legacyWallet: LegacyAdaWallet = await restoreByronWallet( this.config, - { walletInitData }, + { + walletInitData, + }, type ); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1765,14 +1877,15 @@ export default class AdaApi { }, isLegacy: true, }; - const wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::restoreByronLedgerWallet success', { wallet }); + const wallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::restoreByronLedgerWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreByronLedgerWallet error', { error }); + logger.error('AdaApi::restoreByronLedgerWallet error', { + error, + }); throw new ApiError(error) .set('forbiddenMnemonic') .where('message', 'JSONValidationFailed') @@ -1785,20 +1898,23 @@ export default class AdaApi { .result(); } }; - restoreExportedByronWallet = async ( request: RestoreExportedByronWalletRequest ): Promise => { logger.debug('AdaApi::restoreExportedByronWallet called', { name: request.name, }); + try { const legacyWallet: LegacyAdaWallet = await restoreExportedByronWallet( this.config, - { walletInitData: request } + { + walletInitData: request, + } ); const extraLegacyWalletProps = { - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1806,18 +1922,18 @@ export default class AdaApi { }, isLegacy: true, }; - const wallet = { - ...legacyWallet, - ...extraLegacyWalletProps, - }; - logger.debug('AdaApi::restoreExportedByronWallet success', { wallet }); + const wallet = { ...legacyWallet, ...extraLegacyWalletProps }; + logger.debug('AdaApi::restoreExportedByronWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::restoreExportedByronWallet error', { error }); + logger.error('AdaApi::restoreExportedByronWallet error', { + error, + }); throw new ApiError(error); } }; - importWalletFromKey = async ( request: ImportWalletFromKeyRequest ): Promise => { @@ -1825,22 +1941,26 @@ export default class AdaApi { parameters: filterLogData(request), }); const { filePath, spendingPassword } = request; + try { const importedWallet: AdaWallet = await importWalletAsKey(this.config, { filePath, spendingPassword: spendingPassword || '', }); - logger.debug('AdaApi::importWalletFromKey success', { importedWallet }); + logger.debug('AdaApi::importWalletFromKey success', { + importedWallet, + }); return _createWalletFromServerData(importedWallet); } catch (error) { - logger.error('AdaApi::importWalletFromKey error', { error }); + logger.error('AdaApi::importWalletFromKey error', { + error, + }); throw new ApiError(error) .set('walletAlreadyImported', true) .where('code', 'wallet_already_exists') .result('walletFileImportError'); } }; - importWalletFromFile = async ( request: ImportWalletFromFileRequest ): Promise => { @@ -1849,6 +1969,7 @@ export default class AdaApi { }); const { filePath, spendingPassword } = request; const isKeyFile = filePath.split('.').pop().toLowerCase() === 'key'; + try { const importedWallet: AdaWallet = isKeyFile ? await importWalletAsKey(this.config, { @@ -1856,17 +1977,20 @@ export default class AdaApi { spendingPassword, }) : await importWalletAsJSON(this.config, filePath); - logger.debug('AdaApi::importWalletFromFile success', { importedWallet }); + logger.debug('AdaApi::importWalletFromFile success', { + importedWallet, + }); return _createWalletFromServerData(importedWallet); } catch (error) { - logger.error('AdaApi::importWalletFromFile error', { error }); + logger.error('AdaApi::importWalletFromFile error', { + error, + }); throw new ApiError(error) .set('walletAlreadyImported', true) .where('code', 'wallet_already_exists') .result('walletFileImportError'); } }; - updateWallet = async (request: UpdateWalletRequest): Promise => { logger.debug('AdaApi::updateWallet called', { parameters: filterLogData(request), @@ -1875,6 +1999,7 @@ export default class AdaApi { try { let wallet: AdaWallet; + if (isLegacy) { const response = await updateByronWallet(this.config, { walletId, @@ -1882,7 +2007,8 @@ export default class AdaApi { }); wallet = { ...response, - address_pool_gap: 0, // Not needed for legacy wallets + address_pool_gap: 0, + // Not needed for legacy wallets delegation: { active: { status: WalletDelegationStatuses.NOT_DELEGATING, @@ -1891,16 +2017,23 @@ export default class AdaApi { isLegacy: true, }; } else { - wallet = await updateWallet(this.config, { walletId, name }); + wallet = await updateWallet(this.config, { + walletId, + name, + }); } - logger.debug('AdaApi::updateWallet success', { wallet }); + + logger.debug('AdaApi::updateWallet success', { + wallet, + }); return _createWalletFromServerData(wallet); } catch (error) { - logger.error('AdaApi::updateWallet error', { error }); + logger.error('AdaApi::updateWallet error', { + error, + }); throw new ApiError(error); } }; - updateSpendingPassword = async ( request: UpdateSpendingPasswordRequest ): Promise => { @@ -1908,6 +2041,7 @@ export default class AdaApi { parameters: filterLogData(request), }); const { walletId, oldPassword, newPassword, isLegacy } = request; + try { if (isLegacy) { await updateByronSpendingPassword(this.config, { @@ -1922,7 +2056,9 @@ export default class AdaApi { passphrase: newPassword, walletId, }); - logger.debug('AdaApi::createAddress (Byron) success', { address }); + logger.debug('AdaApi::createAddress (Byron) success', { + address, + }); } } else { await updateSpendingPassword(this.config, { @@ -1931,10 +2067,13 @@ export default class AdaApi { newPassword, }); } + logger.debug('AdaApi::updateSpendingPassword success'); return true; } catch (error) { - logger.error('AdaApi::updateSpendingPassword error', { error }); + logger.error('AdaApi::updateSpendingPassword error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -1942,7 +2081,6 @@ export default class AdaApi { .result(); } }; - quitStakePool = async ( request: QuitStakePoolRequest ): Promise => { @@ -1950,15 +2088,20 @@ export default class AdaApi { parameters: filterLogData(request), }); const { walletId, passphrase } = request; + try { const result = await quitStakePool(this.config, { walletId, passphrase, }); - logger.debug('AdaApi::quitStakePool success', { result }); + logger.debug('AdaApi::quitStakePool success', { + result, + }); return result; } catch (error) { - logger.error('AdaApi::quitStakePool error', { error }); + logger.error('AdaApi::quitStakePool error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -1966,29 +2109,36 @@ export default class AdaApi { .result(); } }; - getSmashSettings = async (): Promise => { logger.debug('AdaApi::getSmashSettings called'); + try { const { pool_metadata_source: poolMetadataSource, } = await getSmashSettings(this.config); - logger.debug('AdaApi::getSmashSettings success', { poolMetadataSource }); + logger.debug('AdaApi::getSmashSettings success', { + poolMetadataSource, + }); return poolMetadataSource; } catch (error) { - logger.error('AdaApi::getSmashSettings error', { error }); + logger.error('AdaApi::getSmashSettings error', { + error, + }); throw new ApiError(error); } }; - checkSmashServerIsValid = async (url: string): Promise => { logger.debug('AdaApi::checkSmashServerIsValid called', { - parameters: { url }, + parameters: { + url, + }, }); + try { if (url === SMASH_SERVERS_LIST.direct.url) { return true; } + const { health, }: CheckSmashServerHealthApiResponse = await checkSmashServerHealth( @@ -1996,30 +2146,38 @@ export default class AdaApi { url ); const isValid = health === SMASH_SERVER_STATUSES.AVAILABLE; - logger.debug('AdaApi::checkSmashServerIsValid success', { isValid }); + logger.debug('AdaApi::checkSmashServerIsValid success', { + isValid, + }); return isValid; } catch (error) { - logger.error('AdaApi::checkSmashServerIsValid error', { error }); + logger.error('AdaApi::checkSmashServerIsValid error', { + error, + }); throw new ApiError(error); } }; - updateSmashSettings = async ( poolMetadataSource: PoolMetadataSource ): Promise => { logger.debug('AdaApi::updateSmashSettings called', { - parameters: { poolMetadataSource }, + parameters: { + poolMetadataSource, + }, }); + try { const isSmashServerValid = await this.checkSmashServerIsValid( poolMetadataSource ); + if (!isSmashServerValid) { const error = { code: 'invalid_smash_server', }; throw new ApiError(error); } + await updateSmashSettings(this.config, poolMetadataSource); logger.debug('AdaApi::updateSmashSettings success', { poolMetadataSource, @@ -2027,6 +2185,7 @@ export default class AdaApi { } catch (error) { const id = get(error, 'id'); const message = get(error, 'values.message'); + if ( id === 'api.errors.GenericApiError' && message === @@ -2036,11 +2195,13 @@ export default class AdaApi { code: 'invalid_smash_server', }); } - logger.error('AdaApi::updateSmashSettings error', { error }); + + logger.error('AdaApi::updateSmashSettings error', { + error, + }); throw new ApiError(error); } }; - getRedeemItnRewardsFee = async ( request: GetRedeemItnRewardsFeeRequest ): Promise => { @@ -2072,16 +2233,20 @@ export default class AdaApi { withdrawal, isLegacy: false, }; + try { const { fee } = await this.calculateTransactionFee(payload); - logger.debug('AdaApi::getRedeemItnRewardsFee success', { fee }); + logger.debug('AdaApi::getRedeemItnRewardsFee success', { + fee, + }); return fee; } catch (error) { - logger.error('AdaApi::getRedeemItnRewardsFee error', { error }); + logger.error('AdaApi::getRedeemItnRewardsFee error', { + error, + }); throw new ApiError(error); } }; - requestRedeemItnRewards = async ( request: RequestRedeemItnRewardsRequest ): Promise => { @@ -2092,6 +2257,7 @@ export default class AdaApi { recoveryPhrase: withdrawal, } = request; const amount = REWARDS_REDEMPTION_FEE_CALCULATION_AMOUNT; + try { const data = { payments: [ @@ -2110,17 +2276,20 @@ export default class AdaApi { walletId, data, }); + const response = _createRedeemItnRewardsFromServerData(transaction); + logger.debug('AdaApi::requestRedeemItnRewards success', { response, }); return response; } catch (error) { - logger.error('AdaApi::requestRedeemItnRewards error', { error }); + logger.error('AdaApi::requestRedeemItnRewards error', { + error, + }); throw new ApiError(error); } }; - exportWalletToFile = async ( request: ExportWalletToFileRequest ): Promise<[]> => { @@ -2128,19 +2297,23 @@ export default class AdaApi { logger.debug('AdaApi::exportWalletToFile called', { parameters: filterLogData(request), }); + try { const response: Promise<[]> = await exportWalletAsJSON(this.config, { walletId, filePath, }); - logger.debug('AdaApi::exportWalletToFile success', { response }); + logger.debug('AdaApi::exportWalletToFile success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::exportWalletToFile error', { error }); + logger.error('AdaApi::exportWalletToFile error', { + error, + }); throw new ApiError(error); } }; - getWalletUtxos = async ( request: GetWalletUtxosRequest ): Promise => { @@ -2148,28 +2321,41 @@ export default class AdaApi { logger.debug('AdaApi::getWalletUtxos called', { parameters: filterLogData(request), }); + try { let response: WalletUtxos; + if (isLegacy) { - response = await getByronWalletUtxos(this.config, { walletId }); + response = await getByronWalletUtxos(this.config, { + walletId, + }); } else { - response = await getWalletUtxos(this.config, { walletId }); + response = await getWalletUtxos(this.config, { + walletId, + }); } - logger.debug('AdaApi::getWalletUtxos success', { response }); + + logger.debug('AdaApi::getWalletUtxos success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::getWalletUtxos error', { error }); + logger.error('AdaApi::getWalletUtxos error', { + error, + }); throw new ApiError(error); } }; - transferFundsCalculateFee = async ( request: TransferFundsCalculateFeeRequest ): Promise => { const { sourceWalletId } = request; logger.debug('AdaApi::transferFundsCalculateFee called', { - parameters: { sourceWalletId }, + parameters: { + sourceWalletId, + }, }); + try { const response: TransferFundsCalculateFeeApiResponse = await transferFundsCalculateFee( this.config, @@ -2177,20 +2363,26 @@ export default class AdaApi { sourceWalletId, } ); - logger.debug('AdaApi::transferFundsCalculateFee success', { response }); + logger.debug('AdaApi::transferFundsCalculateFee success', { + response, + }); return _createMigrationFeeFromServerData(response); } catch (error) { - logger.error('AdaApi::transferFundsCalculateFee error', { error }); + logger.error('AdaApi::transferFundsCalculateFee error', { + error, + }); throw new ApiError(error); } }; - transferFunds = async ( request: TransferFundsRequest ): Promise => { const { sourceWalletId, targetWalletAddresses, passphrase } = request; logger.debug('AdaApi::transferFunds called', { - parameters: { sourceWalletId, targetWalletAddresses }, + parameters: { + sourceWalletId, + targetWalletAddresses, + }, }); if (!targetWalletAddresses) { @@ -2206,10 +2398,14 @@ export default class AdaApi { targetWalletAddresses, passphrase, }); - logger.debug('AdaApi::transferFunds success', { response }); + logger.debug('AdaApi::transferFunds success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::transferFunds error', { error }); + logger.error('AdaApi::transferFunds error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -2217,11 +2413,13 @@ export default class AdaApi { .result(); } }; - getStakePools = async (stake: number = 0): Promise> => { logger.debug('AdaApi::getStakePools called', { - parameters: { stake }, + parameters: { + stake, + }, }); + try { const response: AdaApiStakePools = await getStakePools( this.config, @@ -2242,13 +2440,15 @@ export default class AdaApi { }); return stakePools; } catch (error) { - logger.error('AdaApi::getStakePools error', { error }); + logger.error('AdaApi::getStakePools error', { + error, + }); throw new ApiError(error); } }; - testReset = async (): Promise => { logger.debug('AdaApi::testReset called'); + try { const wallets = await this.getWallets(); await Promise.all( @@ -2262,25 +2462,28 @@ export default class AdaApi { ); logger.debug('AdaApi::testReset success'); } catch (error) { - logger.error('AdaApi::testReset error', { error }); + logger.error('AdaApi::testReset error', { + error, + }); throw new ApiError(error); } }; - getNetworkInfo = async (): Promise => { logger.debug('AdaApi::getNetworkInfo called'); + try { const networkInfo: NetworkInfoResponse = await getNetworkInfo( this.config ); - logger.debug('AdaApi::getNetworkInfo success', { networkInfo }); + logger.debug('AdaApi::getNetworkInfo success', { + networkInfo, + }); const { sync_progress: syncProgressRaw, node_tip: nodeTip, network_tip: networkTip, next_epoch: nextEpoch, } = networkInfo; - const syncProgress = get(syncProgressRaw, 'status') === 'ready' ? 100 @@ -2311,7 +2514,10 @@ export default class AdaApi { : null, }; } catch (error) { - logger.error('AdaApi::getNetworkInfo error', { error }); + logger.error('AdaApi::getNetworkInfo error', { + error, + }); + // Special Error case if ( error.code === TlsCertificateNotValidError.API_ERROR || @@ -2319,14 +2525,17 @@ export default class AdaApi { ) { throw new TlsCertificateNotValidError(); } + throw new ApiError(error); } }; - getNetworkClock = async ( isForceCheck: boolean ): Promise => { - logger.debug('AdaApi::getNetworkClock called', { isForceCheck }); + logger.debug('AdaApi::getNetworkClock called', { + isForceCheck, + }); + try { const networkClock: NetworkClockResponse = await getNetworkClock( this.config, @@ -2341,13 +2550,16 @@ export default class AdaApi { offset: get(networkClock, 'offset.quantity', null), }; } catch (error) { - logger.error('AdaApi::getNetworkClock error', { error, isForceCheck }); + logger.error('AdaApi::getNetworkClock error', { + error, + isForceCheck, + }); throw new ApiError(error); } }; - getNetworkParameters = async (): Promise => { logger.debug('AdaApi::getNetworkParameters called'); + try { const networkParameters: GetNetworkParametersApiResponse = await getNetworkParameters( this.config @@ -2355,10 +2567,10 @@ export default class AdaApi { logger.debug('AdaApi::getNetworkParameters success', { networkParameters, }); - const { genesis_block_hash: genesisBlockHash, - blockchain_start_time, // eslint-disable-line + blockchain_start_time, + // eslint-disable-line slot_length: slotLength, epoch_length: epochLength, security_parameter: securityParameter, @@ -2369,7 +2581,6 @@ export default class AdaApi { eras, } = networkParameters; const blockchainStartTime = moment(blockchain_start_time).valueOf(); - return { genesisBlockHash, blockchainStartTime, @@ -2383,33 +2594,39 @@ export default class AdaApi { eras, }; } catch (error) { - logger.error('AdaApi::getNetworkParameters error', { error }); + logger.error('AdaApi::getNetworkParameters error', { + error, + }); throw new ApiError(error); } }; - getNews = async (): Promise => { logger.debug('AdaApi::getNews called'); - // Fetch news json let rawNews: string; let news: GetNewsResponse; + try { rawNews = await getNews(); news = JSON.parse(rawNews); } catch (error) { - logger.error('AdaApi::getNews error', { error }); + logger.error('AdaApi::getNews error', { + error, + }); throw new Error('Unable to fetch news'); } // Fetch news verification hash let newsHash: string; let expectedNewsHash: string; + try { newsHash = await getSHA256HexForString(rawNews); expectedNewsHash = await getNewsHash(news.updatedAt); } catch (error) { - logger.error('AdaApi::getNews (hash) error', { error }); + logger.error('AdaApi::getNews (hash) error', { + error, + }); throw new Error('Unable to fetch news hash'); } @@ -2423,25 +2640,28 @@ export default class AdaApi { }); return news; }; - calculateDelegationFee = async ( request: GetDelegationFeeRequest ): Promise => { logger.debug('AdaApi::calculateDelegationFee called', { parameters: filterLogData(request), }); + try { const response: TransactionFee = await getDelegationFee(this.config, { walletId: request.walletId, }); - logger.debug('AdaApi::calculateDelegationFee success', { response }); + logger.debug('AdaApi::calculateDelegationFee success', { + response, + }); return _createDelegationFeeFromServerData(response); } catch (error) { - logger.error('AdaApi::calculateDelegationFee error', { error }); + logger.error('AdaApi::calculateDelegationFee error', { + error, + }); throw new ApiError(error); } }; - joinStakePool = async ( request: JoinStakePoolRequest ): Promise => { @@ -2449,6 +2669,7 @@ export default class AdaApi { parameters: filterLogData(request), }); const { walletId, stakePoolId, passphrase } = request; + try { const response = await joinStakePool(this.config, { walletId, @@ -2460,7 +2681,9 @@ export default class AdaApi { }); return response; } catch (error) { - logger.error('AdaApi::joinStakePool error', { error }); + logger.error('AdaApi::joinStakePool error', { + error, + }); throw new ApiError(error) .set('wrongEncryptionPassphrase') .where('code', 'bad_request') @@ -2468,7 +2691,6 @@ export default class AdaApi { .result(); } }; - createWalletSignature = async ( request: CreateWalletSignatureRequest ): Promise => { @@ -2534,14 +2756,17 @@ export default class AdaApi { index, data, }); - logger.debug('AdaApi::createWalletSignature success', { response }); + logger.debug('AdaApi::createWalletSignature success', { + response, + }); return response; } catch (error) { - logger.error('AdaApi::createWalletSignature error', { error }); + logger.error('AdaApi::createWalletSignature error', { + error, + }); throw new ApiError(error); } }; - createVotingRegistrationTransaction = async ( request: CreateVotingRegistrationRequest ): Promise => { @@ -2627,11 +2852,9 @@ export default class AdaApi { walletId, data: { ...data }, }); - logger.debug('AdaApi::createVotingRegistrationTransaction success', { transaction: response, }); - return _createTransactionFromServerData(response); } catch (error) { logger.error('AdaApi::createVotingRegistrationTransaction error', { @@ -2649,31 +2872,28 @@ export default class AdaApi { .result(); } }; - setCardanoNodeFault = async (fault: FaultInjectionIpcRequest) => { await cardanoFaultInjectionChannel.send(fault); }; - // No implementation here but can be overwritten - setLocalTimeDifference: Function; - setSyncProgress: Function; + setLocalTimeDifference: (...args: Array) => any; + setSyncProgress: (...args: Array) => any; setFaultyNodeSettingsApi: boolean; - resetTestOverrides: Function; - + resetTestOverrides: (...args: Array) => any; // Newsfeed testing utility setTestingNewsFeed: (testingNewsFeedData: GetNewsResponse) => void; setTestingStakePools: (testingStakePoolsData: Array) => void; setTestingWallets: (testingWalletsData: Array) => void; - setTestingWallet: (testingWalletData: Object, walletIndex?: number) => void; - + setTestingWallet: ( + testingWalletData: Record, + walletIndex?: number + ) => void; // Stake pools testing utility setFakeStakePoolsJsonForTesting: ( fakeStakePoolsJson: Array ) => void; setStakePoolsFetchingFailed: () => void; -} - -// ========== TRANSFORM SERVER DATA INTO FRONTEND MODELS ========= +} // ========== TRANSFORM SERVER DATA INTO FRONTEND MODELS ========= const _createWalletFromServerData = action( 'AdaApi::_createWalletFromServerData', @@ -2691,7 +2911,6 @@ const _createWalletFromServerData = action( discovery, isHardwareWallet = false, } = wallet; - const id = isLegacy ? getLegacyWalletId(rawWalletId) : rawWalletId; const passphraseLastUpdatedAt = get(passphrase, 'last_updated_at', null); const walletTotalAmount = @@ -2707,6 +2926,7 @@ const _createWalletFromServerData = action( ) : new BigNumber(balance.available.quantity.toString()); let walletRewardAmount = new BigNumber(0); + if (!isLegacy) { walletRewardAmount = balance.reward.unit === WalletUnits.LOVELACE @@ -2722,7 +2942,6 @@ const _createWalletFromServerData = action( const status = get(active, 'status', null); const delegatedStakePoolId = isLegacy ? null : target; const delegationStakePoolStatus = isLegacy ? null : status; - // Last const next = get(delegation, 'next', null); const lastPendingStakePool = next ? last(next) : null; @@ -2730,7 +2949,6 @@ const _createWalletFromServerData = action( const lastStatus = get(lastPendingStakePool, 'status', null); const lastDelegatedStakePoolId = isLegacy ? null : lastTarget; const lastDelegationStakePoolStatus = isLegacy ? null : lastStatus; - // Mapping asset items from server data const walletAssets = { available: assets.available.map((item) => { @@ -2756,7 +2974,6 @@ const _createWalletFromServerData = action( }; }), }; - return new Wallet({ id, addressPoolGap, @@ -2767,7 +2984,8 @@ const _createWalletFromServerData = action( assets: walletAssets, passwordUpdateDate: passphraseLastUpdatedAt && new Date(passphraseLastUpdatedAt), - hasPassword: isHardwareWallet || passphraseLastUpdatedAt !== null, // For HW set that wallet has password + hasPassword: isHardwareWallet || passphraseLastUpdatedAt !== null, + // For HW set that wallet has password syncState, isLegacy, isHardwareWallet, @@ -2797,8 +3015,10 @@ const _conditionToTxState = (condition: string) => { switch (condition) { case 'pending': return TransactionStates.PENDING; + case 'expired': return TransactionStates.FAILED; + default: return TransactionStates.OK; } @@ -2822,14 +3042,15 @@ const _createTransactionFromServerData = action( status, metadata, } = data; + const state = _conditionToTxState(status); + const stateInfo = state === TransactionStates.PENDING ? pendingSince : insertedAt; const date = get(stateInfo, 'time'); const slotNumber = get(stateInfo, ['block', 'slot_number'], null); const epochNumber = get(stateInfo, ['block', 'epoch_number'], null); const confirmations = get(depth, 'quantity', 0); - // Mapping asset items from server data const outputAssets = flatten( outputs.map(({ assets, address }) => @@ -2896,9 +3117,11 @@ const _createAssetFromServerData = action( const { decimals } = localData; const { decimals: recommendedDecimals = null } = metadata || storedMetadata || {}; + if (metadata) { storedAssetMetadata[uniqueId] = metadata; } + return new Asset({ policyId, assetName, @@ -2940,7 +3163,10 @@ const _createMigrationFeeFromServerData = action( const leftovers = new BigNumber(leftoversAmount.toString()).dividedBy( LOVELACES_PER_ADA ); - return { fee, leftovers }; + return { + fee, + leftovers, + }; } ); @@ -2955,7 +3181,11 @@ const _createDelegationFeeFromServerData = action( ).dividedBy(LOVELACES_PER_ADA); // @TODO Use api response data when api is ready const depositsReclaimed = new BigNumber(0); - return { fee, deposits, depositsReclaimed }; + return { + fee, + deposits, + depositsReclaimed, + }; } ); @@ -2976,7 +3206,8 @@ const _createStakePoolFromServerData = action( produced_blocks: producedBlocks, non_myopic_member_rewards: nonMyopicMemberRewards, saturation, - } = metrics; // eslint-disable-line + } = metrics; + // eslint-disable-line const { name, description = '', ticker, homepage } = metadata; const relativeStakePercentage = get(relativeStake, 'quantity', 0); const producedBlocksCount = get(producedBlocks, 'quantity', 0); diff --git a/source/renderer/app/api/assets/requests/getAssets.ts b/source/renderer/app/api/assets/requests/getAssets.ts index a72538c023..6a7563ffe0 100644 --- a/source/renderer/app/api/assets/requests/getAssets.ts +++ b/source/renderer/app/api/assets/requests/getAssets.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; import type { ApiAssets, GetAssetsRequest } from '../types'; import { getRawWalletId, isLegacyWalletId } from '../../utils'; - export const getAssets = ( config: RequestConfig, { walletId }: GetAssetsRequest diff --git a/source/renderer/app/api/assets/requests/getUnknownAsset.ts b/source/renderer/app/api/assets/requests/getUnknownAsset.ts index 2a4cc5cfb9..9ab6fcef58 100644 --- a/source/renderer/app/api/assets/requests/getUnknownAsset.ts +++ b/source/renderer/app/api/assets/requests/getUnknownAsset.ts @@ -1,10 +1,8 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { GetUnknownAssetRequest } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId, isLegacyWalletId } from '../../utils'; import Asset from '../../../domains/Asset'; - export const getUnknownAsset = ( config: RequestConfig, { walletId, policyId }: GetUnknownAssetRequest diff --git a/source/renderer/app/api/assets/types.ts b/source/renderer/app/api/assets/types.ts index f29e165ae5..47a2d43f16 100644 --- a/source/renderer/app/api/assets/types.ts +++ b/source/renderer/app/api/assets/types.ts @@ -1,6 +1,4 @@ -// @flow import BigNumber from 'bignumber.js'; - import AssetDomain from '../../domains/Asset'; /** @@ -15,20 +13,20 @@ import AssetDomain from '../../domains/Asset'; * */ export type ApiAsset = { - policy_id: string, - asset_name: string, - fingerprint: string, - metadata?: ?AssetMetadata, + policy_id: string; + asset_name: string; + fingerprint: string; + metadata?: AssetMetadata | null | undefined; }; export type ApiAssets = Array; export type Asset = { - assetName: string, - decimals: ?number, - fingerprint: string, - metadata?: ?AssetMetadata, - policyId: string, - recommendedDecimals: ?number, - uniqueId: string, + assetName: string; + decimals: number | null | undefined; + fingerprint: string; + metadata?: AssetMetadata | null | undefined; + policyId: string; + recommendedDecimals: number | null | undefined; + uniqueId: string; }; /** @@ -42,25 +40,24 @@ export type Asset = { * */ export type ApiToken = { - policy_id: string, - asset_name: string, - quantity: number, - address?: ?string, + policy_id: string; + asset_name: string; + quantity: number; + address?: string | null | undefined; }; export type ApiTokens = Array; export type Token = { - policyId: string, - assetName: string, - assetNameASCII?: string, - quantity: BigNumber, - address?: ?string, - uniqueId: string, + policyId: string; + assetName: string; + assetNameASCII?: string; + quantity: BigNumber; + address?: string | null | undefined; + uniqueId: string; }; - export type Tokens = Array; export type WalletTokens = { - available: Tokens, - total: Tokens, + available: Tokens; + total: Tokens; }; /** @@ -71,34 +68,25 @@ export type WalletTokens = { * It has all the data combined: quantity, address, fingerprint, metadata, etc. * */ -export type AssetToken = { - ...$Exact, - ...$Exact, -}; - +export type AssetToken = Token & Asset; export type AssetMetadata = { - name: string, - description: string, - ticker?: string, - decimals?: number, // [0 .. 255] - url?: string, - logo?: string, + name: string; + description: string; + ticker?: string; + decimals?: number; + // [0 .. 255] + url?: string; + logo?: string; }; - -export type StoredAssetMetadata = { - [uniqueId: string]: AssetMetadata, -}; - +export type StoredAssetMetadata = Record; export type GetUnknownAssetRequest = { - walletId: string, - policyId: string, + walletId: string; + policyId: string; }; - export type GetAssetsRequest = { - walletId: string, + walletId: string; }; - export type GetAssetsResponse = { - assets: Array, - total: number, + assets: Array; + total: number; }; diff --git a/source/renderer/app/api/common/errors.ts b/source/renderer/app/api/common/errors.ts index f82e503f25..df9ed65ba3 100644 --- a/source/renderer/app/api/common/errors.ts +++ b/source/renderer/app/api/common/errors.ts @@ -1,7 +1,5 @@ -// @flow import { defineMessages } from 'react-intl'; import LocalizableError from '../../i18n/LocalizableError'; - export const messages = defineMessages({ genericApiError: { id: 'api.errors.GenericApiError', @@ -14,9 +12,8 @@ export const messages = defineMessages({ description: '"This API method is not yet implemented." error message.', }, }); - export class GenericApiError extends LocalizableError { - constructor(values?: Object = {}) { + constructor(values?: Record = {}) { super({ id: messages.genericApiError.id, defaultMessage: messages.genericApiError.defaultMessage, @@ -24,7 +21,6 @@ export class GenericApiError extends LocalizableError { }); } } - export class ApiMethodNotYetImplementedError extends LocalizableError { constructor() { super({ diff --git a/source/renderer/app/api/common/types.ts b/source/renderer/app/api/common/types.ts index 83fe6000ae..a65d18ca17 100644 --- a/source/renderer/app/api/common/types.ts +++ b/source/renderer/app/api/common/types.ts @@ -1,8 +1,7 @@ -// @flow -export type RequestConfig = $Exact<{ - hostname: string, - port: number, - ca: Uint8Array, - cert: Uint8Array, - key: Uint8Array, -}>; +export type RequestConfig = { + hostname: string; + port: number; + ca: Uint8Array; + cert: Uint8Array; + key: Uint8Array; +}; diff --git a/source/renderer/app/api/errors.ts b/source/renderer/app/api/errors.ts index 3e69f10af8..698065b9fc 100644 --- a/source/renderer/app/api/errors.ts +++ b/source/renderer/app/api/errors.ts @@ -1,5 +1,4 @@ import { defineMessages } from 'react-intl'; - export const messages = defineMessages({ // common wrongEncryptionPassphrase: { diff --git a/source/renderer/app/api/index.ts b/source/renderer/app/api/index.ts index 439ea44537..aa3aadfd4c 100644 --- a/source/renderer/app/api/index.ts +++ b/source/renderer/app/api/index.ts @@ -1,13 +1,10 @@ -// @flow import AdaApi from './api'; import LocalStorageApi from './utils/localStorage'; - export type Api = { - ada: AdaApi, - localStorage: LocalStorageApi, - setFaultyNodeSettingsApi?: boolean, + ada: AdaApi; + localStorage: LocalStorageApi; + setFaultyNodeSettingsApi?: boolean; }; - export const setupApi = (isTest: boolean): Api => ({ ada: new AdaApi(isTest, { hostname: 'localhost', diff --git a/source/renderer/app/api/network/requests/getNetworkClock.ts b/source/renderer/app/api/network/requests/getNetworkClock.ts index 5c656c25b8..938f8a7145 100644 --- a/source/renderer/app/api/network/requests/getNetworkClock.ts +++ b/source/renderer/app/api/network/requests/getNetworkClock.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { NetworkClockResponse } from '../types'; import { request } from '../../utils/request'; - export const getNetworkClock = ( config: RequestConfig, isForceCheck: boolean @@ -13,5 +11,7 @@ export const getNetworkClock = ( path: '/v2/network/clock', ...config, }, - { forceNtpCheck: isForceCheck } + { + forceNtpCheck: isForceCheck, + } ); diff --git a/source/renderer/app/api/network/requests/getNetworkInfo.ts b/source/renderer/app/api/network/requests/getNetworkInfo.ts index f76b88d481..1d639e70d3 100644 --- a/source/renderer/app/api/network/requests/getNetworkInfo.ts +++ b/source/renderer/app/api/network/requests/getNetworkInfo.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { NetworkInfoResponse } from '../types'; import { request } from '../../utils/request'; - export const getNetworkInfo = ( config: RequestConfig ): Promise => diff --git a/source/renderer/app/api/network/requests/getNetworkParameters.ts b/source/renderer/app/api/network/requests/getNetworkParameters.ts index 47a656c3b0..f7dbc9bb74 100644 --- a/source/renderer/app/api/network/requests/getNetworkParameters.ts +++ b/source/renderer/app/api/network/requests/getNetworkParameters.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { GetNetworkParametersApiResponse } from '../types'; import { request } from '../../utils/request'; - export const getNetworkParameters = ( config: RequestConfig ): Promise => diff --git a/source/renderer/app/api/network/types.ts b/source/renderer/app/api/network/types.ts index b6fa6abd57..d0ad6eb5ba 100644 --- a/source/renderer/app/api/network/types.ts +++ b/source/renderer/app/api/network/types.ts @@ -1,135 +1,124 @@ -// @flow export type TipInfo = { - epoch: number, - slot: number, - absoluteSlotNumber: number, + epoch: number; + slot: number; + absoluteSlotNumber: number; }; - export type NextEpoch = { - epochNumber: ?number, - epochStart: ?string, + epochNumber: number | null | undefined; + epochStart: string | null | undefined; }; - export type FutureEpoch = { - epochNumber: ?number, - epochStart: ?string, + epochNumber: number | null | undefined; + epochStart: string | null | undefined; }; - export type ClockOffset = { - quantity: number, - unit: 'microsecond', + quantity: number; + unit: 'microsecond'; }; - export type SlotLength = { - quantity: number, - unit: string, + quantity: number; + unit: string; }; - export type EpochLength = { - quantity: number, - unit: string, + quantity: number; + unit: string; }; - export type SecurityParameter = { - quantity: number, - unit: string, + quantity: number; + unit: string; }; - export type ActiveSlotCoefficient = { - quantity: number, - unit: string, + quantity: number; + unit: string; }; - export type DecentralizationLevel = { - quantity: number, - unit: string, + quantity: number; + unit: string; }; - export type MinimumUtxoValue = { - quantity: number, - unit: string, + quantity: number; + unit: string; }; - export type GetNetworkInfoResponse = { - syncProgress: number, - localTip: TipInfo, - networkTip: ?TipInfo, - nextEpoch: ?NextEpoch, + syncProgress: number; + localTip: TipInfo; + networkTip: TipInfo | null | undefined; + nextEpoch: NextEpoch | null | undefined; }; - export type NetworkInfoResponse = { sync_progress: { - status: 'ready' | 'syncing', + status: 'ready' | 'syncing'; progress?: { - quantity: number, - unit: 'percent', - }, - }, + quantity: number; + unit: 'percent'; + }; + }; node_tip: { - slot_number: number, - epoch_number: number, + slot_number: number; + epoch_number: number; height: { - quantity: number, - unit: 'block', - }, - }, - network_tip?: ?{ - slot_number: ?number, - epoch_number: ?number, - }, - next_epoch?: ?{ - epoch_number: ?number, - epoch_start_time: ?string, - }, -}; - + quantity: number; + unit: 'block'; + }; + }; + network_tip?: + | { + slot_number: number | null | undefined; + epoch_number: number | null | undefined; + } + | null + | undefined; + next_epoch?: + | { + epoch_number: number | null | undefined; + epoch_start_time: string | null | undefined; + } + | null + | undefined; +}; export type NetworkClockResponse = { - status: 'available' | 'unavailable' | 'pending', - offset?: ClockOffset, + status: 'available' | 'unavailable' | 'pending'; + offset?: ClockOffset; }; - export type GetNetworkClockResponse = { - status: 'available' | 'unavailable' | 'pending', - offset: ?number, + status: 'available' | 'unavailable' | 'pending'; + offset: number | null | undefined; }; - export type HardforkAt = { - epoch_start_time: string, - epoch_number: number, + epoch_start_time: string; + epoch_number: number; }; - export type GetNetworkParametersResponse = { - genesisBlockHash: string, - blockchainStartTime: number, - slotLength: SlotLength, - epochLength: EpochLength, - securityParameter: SecurityParameter, - activeSlotCoefficient: ActiveSlotCoefficient, - decentralizationLevel: DecentralizationLevel, - desiredPoolNumber: number, - minimumUtxoValue: MinimumUtxoValue, + genesisBlockHash: string; + blockchainStartTime: number; + slotLength: SlotLength; + epochLength: EpochLength; + securityParameter: SecurityParameter; + activeSlotCoefficient: ActiveSlotCoefficient; + decentralizationLevel: DecentralizationLevel; + desiredPoolNumber: number; + minimumUtxoValue: MinimumUtxoValue; eras: { - byron?: HardforkAt, - shelley?: HardforkAt, - allegra?: HardforkAt, - mary?: HardforkAt, - }, + byron?: HardforkAt; + shelley?: HardforkAt; + allegra?: HardforkAt; + mary?: HardforkAt; + }; }; - export type GetNetworkParametersApiResponse = { - genesis_block_hash: string, - blockchain_start_time: string, - slot_length: SlotLength, - epoch_length: EpochLength, - security_parameter: SecurityParameter, - active_slot_coefficient: ActiveSlotCoefficient, - decentralization_level: DecentralizationLevel, - desired_pool_number: number, - minimum_utxo_value: MinimumUtxoValue, + genesis_block_hash: string; + blockchain_start_time: string; + slot_length: SlotLength; + epoch_length: EpochLength; + security_parameter: SecurityParameter; + active_slot_coefficient: ActiveSlotCoefficient; + decentralization_level: DecentralizationLevel; + desired_pool_number: number; + minimum_utxo_value: MinimumUtxoValue; eras: { - byron?: HardforkAt, - shelley?: HardforkAt, - allegra?: HardforkAt, - mary?: HardforkAt, - }, + byron?: HardforkAt; + shelley?: HardforkAt; + allegra?: HardforkAt; + mary?: HardforkAt; + }; }; diff --git a/source/renderer/app/api/news/requests/getNews.ts b/source/renderer/app/api/news/requests/getNews.ts index a1291723ae..a20f4b61e6 100644 --- a/source/renderer/app/api/news/requests/getNews.ts +++ b/source/renderer/app/api/news/requests/getNews.ts @@ -1,7 +1,5 @@ -// @flow import { externalRequest } from '../../utils/externalRequest'; import { getNewsURL } from '../../../utils/network'; - const { isFlight, environment } = global; const { network } = environment; const hostname = getNewsURL(network); @@ -9,7 +7,6 @@ const path = '/newsfeed'; const filename = isFlight ? 'newsfeed_mainnet_flight.json' : `newsfeed_${network}.json`; - export const getNews = (): Promise => externalRequest( { diff --git a/source/renderer/app/api/news/requests/getNewsHash.ts b/source/renderer/app/api/news/requests/getNewsHash.ts index 0915b6be1c..eff47b6c20 100644 --- a/source/renderer/app/api/news/requests/getNewsHash.ts +++ b/source/renderer/app/api/news/requests/getNewsHash.ts @@ -1,14 +1,11 @@ -// @flow import { externalRequest } from '../../utils/externalRequest'; import { getNewsHashURL } from '../../../utils/network'; - const { isFlight, environment } = global; const { network } = environment; const hostname = getNewsHashURL(network); const path = isFlight ? '/newsfeed-verification/mainnet_flight' : `/newsfeed-verification/${network}`; - export const getNewsHash = (timestamp: number): Promise => externalRequest( { diff --git a/source/renderer/app/api/news/types.ts b/source/renderer/app/api/news/types.ts index 238b82a4df..1a7ac35a11 100644 --- a/source/renderer/app/api/news/types.ts +++ b/source/renderer/app/api/news/types.ts @@ -1,60 +1,45 @@ -// @flow - import type { Platform } from '../../../../common/types/environment.types'; - export type NewsTranslations = { - 'en-US': string, - 'ja-JP': string, + 'en-US': string; + 'ja-JP': string; }; - export type NewsAction = { - label: NewsTranslations, - url?: NewsTranslations, - route?: string, - event?: string, + label: NewsTranslations; + url?: NewsTranslations; + route?: string; + event?: string; }; - export type NewsTarget = { - daedalusVersion: ?string, - platform: string, + daedalusVersion: string | null | undefined; + platform: string; }; - export type NewsType = | 'incident' | 'alert' | 'announcement' | 'info' | 'software-update'; - export type SoftwareUpdateInfo = { - version: string, - hash: string, - url: string, + version: string; + hash: string; + url: string; }; - -export type SoftwareUpdate = { - [key: Platform]: SoftwareUpdateInfo, -}; - +export type SoftwareUpdate = Record; export type NewsTimestamp = number; - export type NewsItem = { - title: NewsTranslations, - content: NewsTranslations, - target: NewsTarget, - action: NewsAction, - date: NewsTimestamp, - type: NewsType, - softwareUpdate?: SoftwareUpdate, + title: NewsTranslations; + content: NewsTranslations; + target: NewsTarget; + action: NewsAction; + date: NewsTimestamp; + type: NewsType; + softwareUpdate?: SoftwareUpdate; }; - export type GetNewsResponse = { - updatedAt: number, - items: Array, + updatedAt: number; + items: Array; }; - export type GetReadNewsResponse = { - readNewsItems: NewsTimestamp[], + readNewsItems: NewsTimestamp[]; }; - export type MarkNewsAsReadResponse = Array; diff --git a/source/renderer/app/api/nodes/errors.ts b/source/renderer/app/api/nodes/errors.ts index 094d73da14..eb65951afc 100644 --- a/source/renderer/app/api/nodes/errors.ts +++ b/source/renderer/app/api/nodes/errors.ts @@ -1,6 +1,4 @@ -// @flow import ExtendableError from 'es6-error'; - export class TlsCertificateNotValidError extends ExtendableError { static API_ERROR = 'CERT_NOT_YET_VALID'; } diff --git a/source/renderer/app/api/staking/requests/checkSmashServerHealth.ts b/source/renderer/app/api/staking/requests/checkSmashServerHealth.ts index c4010a526d..fa1d2197f9 100644 --- a/source/renderer/app/api/staking/requests/checkSmashServerHealth.ts +++ b/source/renderer/app/api/staking/requests/checkSmashServerHealth.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { CheckSmashServerHealthApiResponse } from '../types'; import { request } from '../../utils/request'; - export const checkSmashServerHealth = ( config: RequestConfig, url?: string @@ -13,5 +11,7 @@ export const checkSmashServerHealth = ( path: '/v2/smash/health', ...config, }, - { url } + { + url, + } ); diff --git a/source/renderer/app/api/staking/requests/getDelegationFee.ts b/source/renderer/app/api/staking/requests/getDelegationFee.ts index 05de1e5b5c..f79ccf29f9 100644 --- a/source/renderer/app/api/staking/requests/getDelegationFee.ts +++ b/source/renderer/app/api/staking/requests/getDelegationFee.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { GetDelegationFeeRequest } from '../types'; import type { TransactionFee } from '../../transactions/types'; import { request } from '../../utils/request'; - export const getDelegationFee = ( config: RequestConfig, { walletId }: GetDelegationFeeRequest diff --git a/source/renderer/app/api/staking/requests/getSmashSettings.ts b/source/renderer/app/api/staking/requests/getSmashSettings.ts index 390c8a9001..df6ea899b2 100644 --- a/source/renderer/app/api/staking/requests/getSmashSettings.ts +++ b/source/renderer/app/api/staking/requests/getSmashSettings.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { GetSmashSettingsResponse } from '../types'; import { request } from '../../utils/request'; - export const getSmashSettings = ( config: RequestConfig ): Promise => diff --git a/source/renderer/app/api/staking/requests/getStakePools.ts b/source/renderer/app/api/staking/requests/getStakePools.ts index 05d8204eb5..cb25ac0e7b 100644 --- a/source/renderer/app/api/staking/requests/getStakePools.ts +++ b/source/renderer/app/api/staking/requests/getStakePools.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaApiStakePools } from '../types'; import { request } from '../../utils/request'; - export const getStakePools = ( config: RequestConfig, stake: number @@ -13,5 +11,7 @@ export const getStakePools = ( path: '/v2/stake-pools', ...config, }, - { stake } + { + stake, + } ); diff --git a/source/renderer/app/api/staking/requests/joinStakePool.ts b/source/renderer/app/api/staking/requests/joinStakePool.ts index 62f115bb28..db25613421 100644 --- a/source/renderer/app/api/staking/requests/joinStakePool.ts +++ b/source/renderer/app/api/staking/requests/joinStakePool.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { JoinStakePoolRequest } from '../types'; import type { Transaction } from '../../transactions/types'; import { request } from '../../utils/request'; - export const joinStakePool = ( config: RequestConfig, { walletId, stakePoolId, passphrase }: JoinStakePoolRequest @@ -15,5 +13,7 @@ export const joinStakePool = ( ...config, }, {}, - { passphrase } + { + passphrase, + } ); diff --git a/source/renderer/app/api/staking/requests/quitStakePool.ts b/source/renderer/app/api/staking/requests/quitStakePool.ts index 7a8dea4b14..0b6a61e999 100644 --- a/source/renderer/app/api/staking/requests/quitStakePool.ts +++ b/source/renderer/app/api/staking/requests/quitStakePool.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { QuitStakePoolRequest } from '../types'; import type { Transaction } from '../../transactions/types'; import { request } from '../../utils/request'; - export const quitStakePool = ( config: RequestConfig, { walletId, passphrase }: QuitStakePoolRequest @@ -15,5 +13,7 @@ export const quitStakePool = ( ...config, }, {}, - { passphrase } + { + passphrase, + } ); diff --git a/source/renderer/app/api/staking/requests/updateSmashSettings.ts b/source/renderer/app/api/staking/requests/updateSmashSettings.ts index c12078e85f..4899b73cbc 100644 --- a/source/renderer/app/api/staking/requests/updateSmashSettings.ts +++ b/source/renderer/app/api/staking/requests/updateSmashSettings.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { PoolMetadataSource } from '../types'; import { request } from '../../utils/request'; - export const updateSmashSettings = ( config: RequestConfig, poolMetadataSource: PoolMetadataSource diff --git a/source/renderer/app/api/staking/types.ts b/source/renderer/app/api/staking/types.ts index 37ec9651f2..8e32014916 100644 --- a/source/renderer/app/api/staking/types.ts +++ b/source/renderer/app/api/staking/types.ts @@ -1,144 +1,125 @@ -// @flow import BigNumber from 'bignumber.js'; import StakePool from '../../domains/StakePool'; import Wallet from '../../domains/Wallet'; - export type DelegationAction = | 'changeDelegation' | 'removeDelegation' | 'delegate'; - export type AdaApiStakePoolFlag = 'delisted'; export type AdaApiStakePoolFlags = Array; - export type AdaApiStakePool = { - id: string, + id: string; metrics: { non_myopic_member_rewards: { - quantity: number, - unit: 'lovelace', - }, + quantity: number; + unit: 'lovelace'; + }; produced_blocks: { - quantity: number, - unit: 'block', - }, + quantity: number; + unit: 'block'; + }; relative_stake: { - quantity: number, - unit: 'percent', - }, - saturation: number, - }, + quantity: number; + unit: 'percent'; + }; + saturation: number; + }; cost: { - quantity: number, - unit: 'lovelace', - }, + quantity: number; + unit: 'lovelace'; + }; margin: { - quantity: number, - unit: 'percent', - }, + quantity: number; + unit: 'percent'; + }; metadata: { - ticker: string, // [3 .. 5] characters - name: string, // [1 .. 50] characters - description?: string, // <= 255 characters - homepage: string, - }, + ticker: string; + // [3 .. 5] characters + name: string; + // [1 .. 50] characters + description?: string; + // <= 255 characters + homepage: string; + }; pledge: { - quantity: number, - unit: 'lovelace', - }, + quantity: number; + unit: 'lovelace'; + }; retirement: { - epoch_number: number, - epoch_start_time: string, - }, - flags: AdaApiStakePoolFlags, + epoch_number: number; + epoch_start_time: string; + }; + flags: AdaApiStakePoolFlags; }; export type AdaApiStakePools = Array; - export type Reward = { - date?: string, - wallet: string, - reward: BigNumber, - rewardsAddress: string, - pool?: StakePool, + date?: string; + wallet: string; + reward: BigNumber; + rewardsAddress: string; + pool?: StakePool; }; - export type EpochData = { - pool: StakePool, - slotsElected: Array, - performance?: Array, - sharedRewards?: Array, + pool: StakePool; + slotsElected: Array; + performance?: Array; + sharedRewards?: Array; }; - export type Epoch = { - id: number, - name: string, - progress?: number, - endsAt?: string, - data: Array, + id: number; + name: string; + progress?: number; + endsAt?: string; + data: Array; }; - export type JoinStakePoolRequest = { - walletId: string, - stakePoolId: string, - passphrase: ?string, - isHardwareWallet?: boolean, + walletId: string; + stakePoolId: string; + passphrase: string | null | undefined; + isHardwareWallet?: boolean; }; - export type GetDelegationFeeRequest = { - walletId: string, + walletId: string; }; - export type DelegationCalculateFeeResponse = { - fee: BigNumber, - deposits: BigNumber, - depositsReclaimed: BigNumber, + fee: BigNumber; + deposits: BigNumber; + depositsReclaimed: BigNumber; }; - export type QuitStakePoolRequest = { - walletId: string, - passphrase: string, - isHardwareWallet?: boolean, + walletId: string; + passphrase: string; + isHardwareWallet?: boolean; }; - export type GetRedeemItnRewardsFeeRequest = { - address: string, - wallet: Wallet, - recoveryPhrase: Array, + address: string; + wallet: Wallet; + recoveryPhrase: Array; }; - export type GetRedeemItnRewardsFeeResponse = BigNumber; - export type RequestRedeemItnRewardsRequest = { - address: string, - walletId: string, - spendingPassword: string, - recoveryPhrase: Array, + address: string; + walletId: string; + spendingPassword: string; + recoveryPhrase: Array; }; - export type RequestRedeemItnRewardsResponse = BigNumber; - export type PoolMetadataSource = 'none' | 'direct' | string; - export type UpdateSmashSettingsRequest = { settings: { - pool_metadata_source: PoolMetadataSource, - }, + pool_metadata_source: PoolMetadataSource; + }; }; - export type GetSmashSettingsResponse = { - pool_metadata_source: PoolMetadataSource, + pool_metadata_source: PoolMetadataSource; }; - export type GetSmashSettingsApiResponse = PoolMetadataSource; - export type SmashServerStatuses = | 'available' | 'unavailable' | 'unreachable' | 'no_smash_configured'; - export type CheckSmashServerHealthApiResponse = { - health: SmashServerStatuses, + health: SmashServerStatuses; }; - export type CheckSmashServerHealthResponse = boolean; diff --git a/source/renderer/app/api/transactions/requests/createByronWalletTransaction.ts b/source/renderer/app/api/transactions/requests/createByronWalletTransaction.ts index 0f61d24ffc..9510e97207 100644 --- a/source/renderer/app/api/transactions/requests/createByronWalletTransaction.ts +++ b/source/renderer/app/api/transactions/requests/createByronWalletTransaction.ts @@ -1,17 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Transaction, TransactionPaymentData } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export type TransactionParams = { - walletId: string, + walletId: string; data: { - payments: Array, - passphrase: string, - }, + payments: Array; + passphrase: string; + }; }; - export const createByronWalletTransaction = ( config: RequestConfig, { walletId, data }: TransactionParams diff --git a/source/renderer/app/api/transactions/requests/createExternalTransaction.ts b/source/renderer/app/api/transactions/requests/createExternalTransaction.ts index b689b52f17..badcea5ff3 100644 --- a/source/renderer/app/api/transactions/requests/createExternalTransaction.ts +++ b/source/renderer/app/api/transactions/requests/createExternalTransaction.ts @@ -1,11 +1,9 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { CreateExternalTransactionResponse, CreateExternalTransactionRequest, } from '../types'; import { request } from '../../utils/request'; - export const createExternalTransaction = ( config: RequestConfig, { signedTransactionBlob }: CreateExternalTransactionRequest @@ -18,5 +16,7 @@ export const createExternalTransaction = ( }, {}, signedTransactionBlob, - { isOctetStreamRequest: true } + { + isOctetStreamRequest: true, + } ); diff --git a/source/renderer/app/api/transactions/requests/createTransaction.ts b/source/renderer/app/api/transactions/requests/createTransaction.ts index f49f84db6c..98e111def0 100644 --- a/source/renderer/app/api/transactions/requests/createTransaction.ts +++ b/source/renderer/app/api/transactions/requests/createTransaction.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Transaction, TransactionParams } from '../types'; import { request } from '../../utils/request'; - export const createTransaction = ( config: RequestConfig, { walletId, data }: TransactionParams diff --git a/source/renderer/app/api/transactions/requests/deleteLegacyTransaction.ts b/source/renderer/app/api/transactions/requests/deleteLegacyTransaction.ts index 79d06b6a78..80eac3023e 100644 --- a/source/renderer/app/api/transactions/requests/deleteLegacyTransaction.ts +++ b/source/renderer/app/api/transactions/requests/deleteLegacyTransaction.ts @@ -1,12 +1,16 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const deleteLegacyTransaction = ( config: RequestConfig, - { walletId, transactionId }: { walletId: string, transactionId: string } -): Promise<*> => + { + walletId, + transactionId, + }: { + walletId: string; + transactionId: string; + } +): Promise => request({ method: 'DELETE', path: `/v2/byron-wallets/${getRawWalletId( diff --git a/source/renderer/app/api/transactions/requests/deleteTransaction.ts b/source/renderer/app/api/transactions/requests/deleteTransaction.ts index dd659094fe..dd2642a3c7 100644 --- a/source/renderer/app/api/transactions/requests/deleteTransaction.ts +++ b/source/renderer/app/api/transactions/requests/deleteTransaction.ts @@ -1,11 +1,15 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; - export const deleteTransaction = ( config: RequestConfig, - { walletId, transactionId }: { walletId: string, transactionId: string } -): Promise<*> => + { + walletId, + transactionId, + }: { + walletId: string; + transactionId: string; + } +): Promise => request({ method: 'DELETE', path: `/v2/wallets/${walletId}/transactions/${transactionId}`, diff --git a/source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.ts b/source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.ts index c559170560..a3b51018b4 100644 --- a/source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.ts +++ b/source/renderer/app/api/transactions/requests/getByronWalletTransactionFee.ts @@ -1,16 +1,13 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { TransactionPaymentData, TransactionFee } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export type GetTransactionFeeParams = { - walletId: string, + walletId: string; data: { - payments: Array, - }, + payments: Array; + }; }; - export const getByronWalletTransactionFee = ( config: RequestConfig, { walletId, data }: GetTransactionFeeParams diff --git a/source/renderer/app/api/transactions/requests/getICOPublicKey.ts b/source/renderer/app/api/transactions/requests/getICOPublicKey.ts index 5c1dc57e65..a0db99cc67 100644 --- a/source/renderer/app/api/transactions/requests/getICOPublicKey.ts +++ b/source/renderer/app/api/transactions/requests/getICOPublicKey.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { ICOPublicKeyParams, Transaction } from '../types'; import { request } from '../../utils/request'; - export const getICOPublicKey = ( config: RequestConfig, { walletId, index, data }: ICOPublicKeyParams diff --git a/source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.ts b/source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.ts index 465d6390c5..857aa78906 100644 --- a/source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.ts +++ b/source/renderer/app/api/transactions/requests/getLegacyWalletTransactionHistory.ts @@ -1,15 +1,12 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Transactions } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export type GetTransactionsQueryParams = { - start?: string, - end?: string, - order: 'ascending' | 'descending', + start?: string; + end?: string; + order: 'ascending' | 'descending'; }; - export const getLegacyWalletTransactionHistory = ( config: RequestConfig, walletId: string, diff --git a/source/renderer/app/api/transactions/requests/getPublicKey.ts b/source/renderer/app/api/transactions/requests/getPublicKey.ts index 784a6980df..829657c8b4 100644 --- a/source/renderer/app/api/transactions/requests/getPublicKey.ts +++ b/source/renderer/app/api/transactions/requests/getPublicKey.ts @@ -1,7 +1,5 @@ -// @flow import { request } from '../../utils/request'; import type { RequestConfig } from '../../common/types'; - export const getPublicKey = ( config: RequestConfig, { walletId, role, index }: any // @TODO diff --git a/source/renderer/app/api/transactions/requests/getTransaction.ts b/source/renderer/app/api/transactions/requests/getTransaction.ts index 3b69d9e5b9..539eb0de9f 100644 --- a/source/renderer/app/api/transactions/requests/getTransaction.ts +++ b/source/renderer/app/api/transactions/requests/getTransaction.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Transaction } from '../types'; import { request } from '../../utils/request'; - export const getTransaction = ( config: RequestConfig, walletId: string, diff --git a/source/renderer/app/api/transactions/requests/getTransactionFee.ts b/source/renderer/app/api/transactions/requests/getTransactionFee.ts index 5384d06c24..a3c4dac21c 100644 --- a/source/renderer/app/api/transactions/requests/getTransactionFee.ts +++ b/source/renderer/app/api/transactions/requests/getTransactionFee.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { TransactionFee, GetTransactionFeeParams } from '../types'; import { request } from '../../utils/request'; - export const getTransactionFee = ( config: RequestConfig, { walletId, data }: GetTransactionFeeParams diff --git a/source/renderer/app/api/transactions/requests/getTransactionHistory.ts b/source/renderer/app/api/transactions/requests/getTransactionHistory.ts index d5d0350fae..96f98ddc9b 100644 --- a/source/renderer/app/api/transactions/requests/getTransactionHistory.ts +++ b/source/renderer/app/api/transactions/requests/getTransactionHistory.ts @@ -1,14 +1,11 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Transactions } from '../types'; import { request } from '../../utils/request'; - export type GetTransactionsQueryParams = { - start?: string, - end?: string, - order: 'ascending' | 'descending', + start?: string; + end?: string; + order: 'ascending' | 'descending'; }; - export const getTransactionHistory = ( config: RequestConfig, walletId: string, diff --git a/source/renderer/app/api/transactions/requests/getWithdrawalHistory.ts b/source/renderer/app/api/transactions/requests/getWithdrawalHistory.ts index a1fe9658bf..21b2acef71 100644 --- a/source/renderer/app/api/transactions/requests/getWithdrawalHistory.ts +++ b/source/renderer/app/api/transactions/requests/getWithdrawalHistory.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { Transactions } from '../types'; import { request } from '../../utils/request'; - export const getWithdrawalHistory = ( config: RequestConfig, walletId: string @@ -13,6 +11,8 @@ export const getWithdrawalHistory = ( path: `/v2/wallets/${walletId}/transactions`, ...config, }, - { minWithdrawal: 1 }, + { + minWithdrawal: 1, + }, null ); diff --git a/source/renderer/app/api/transactions/requests/selectCoins.ts b/source/renderer/app/api/transactions/requests/selectCoins.ts index 1ab05b5034..de6913c5ce 100644 --- a/source/renderer/app/api/transactions/requests/selectCoins.ts +++ b/source/renderer/app/api/transactions/requests/selectCoins.ts @@ -1,4 +1,3 @@ -// @flow import { WalletUnits } from '../../../domains/Wallet'; import type { RequestConfig } from '../../common/types'; import type { @@ -9,62 +8,56 @@ import type { } from '../types'; import type { DelegationAction } from '../../../types/stakingTypes'; import { request } from '../../utils/request'; - export type PaymentsType = { - payments: Array, - withdrawal?: TransactionWithdrawalType, - metadata?: VotingMetadataType, + payments: Array; + withdrawal?: TransactionWithdrawalType; + metadata?: VotingMetadataType; }; - export type DelegationType = { delegation_action: { - pool: string, - action: DelegationAction, - }, + pool: string; + action: DelegationAction; + }; }; - export type SelectCoinsRequestType = { - walletId: string, - data: PaymentsType | DelegationType, + walletId: string; + data: PaymentsType | DelegationType; }; - export type SelectCoinsWithdrawalType = { - stake_address: string, - derivation_path: Array, - amount: CoinSelectionAmount, + stake_address: string; + derivation_path: Array; + amount: CoinSelectionAmount; }; - export type SelectCoinsResponseType = { inputs: Array<{ - address: string, - amount: CoinSelectionAmount, - id: string, - index: number, - derivation_path: Array, - }>, + address: string; + amount: CoinSelectionAmount; + id: string; + index: number; + derivation_path: Array; + }>; outputs: Array<{ - address: string, - amount: CoinSelectionAmount, - derivation_path?: Array, - }>, + address: string; + amount: CoinSelectionAmount; + derivation_path?: Array; + }>; change: Array<{ - address: string, - amount: CoinSelectionAmount, - derivation_path: Array, - }>, - withdrawals?: Array, + address: string; + amount: CoinSelectionAmount; + derivation_path: Array; + }>; + withdrawals?: Array; certificates?: Array<{ - pool?: string, - certificate_type: DelegationAction, - reward_account_path: Array, - }>, + pool?: string; + certificate_type: DelegationAction; + reward_account_path: Array; + }>; deposits?: Array<{ - quantity: number, - unit: WalletUnits.LOVELACE, - }>, - metadata?: string, + quantity: number; + unit: WalletUnits.LOVELACE; + }>; + metadata?: string; }; - export const selectCoins = ( config: RequestConfig, { walletId, data }: SelectCoinsRequestType diff --git a/source/renderer/app/api/transactions/types.ts b/source/renderer/app/api/transactions/types.ts index bc5c8253ed..7aa75122f3 100644 --- a/source/renderer/app/api/transactions/types.ts +++ b/source/renderer/app/api/transactions/types.ts @@ -1,4 +1,3 @@ -// @flow import BigNumber from 'bignumber.js'; import { WalletTransaction } from '../../domains/WalletTransaction'; import { WalletUnits } from '../../domains/Wallet'; @@ -6,97 +5,83 @@ import type { DelegationAction } from '../../types/stakingTypes'; import type { ApiTokens } from '../assets/types'; import type { TransactionMetadata } from '../../types/TransactionMetadata'; import type { PathRoleIdentityType } from '../../utils/hardwareWalletUtils'; - export type TransactionAmount = { - quantity: number, - unit: WalletUnits.LOVELACE, + quantity: number; + unit: WalletUnits.LOVELACE; }; - export type TransactionDepth = { - quantity: number, - unit: 'block', + quantity: number; + unit: 'block'; }; - export type TransactionInsertionBlock = { - slot_number: number, - epoch_number: number, + slot_number: number; + epoch_number: number; }; - export type Transaction = { - id: string, - amount: TransactionAmount, + id: string; + amount: TransactionAmount; fee: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; deposit: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; inserted_at?: { - time: Date, - block: TransactionInsertionBlock, - }, + time: Date; + block: TransactionInsertionBlock; + }; pending_since?: { - time: Date, - block: { - ...TransactionInsertionBlock, + time: Date; + block: TransactionInsertionBlock & { height: { - quantity: number, - unit: string, - }, - }, - }, - depth: TransactionDepth, - direction: 'outgoing' | 'incoming', - inputs: Array, - outputs: Array, - withdrawals: Array, - status: TransactionState, - metadata?: TransactionMetadata, -}; - + quantity: number; + unit: string; + }; + }; + }; + depth: TransactionDepth; + direction: 'outgoing' | 'incoming'; + inputs: Array; + outputs: Array; + withdrawals: Array; + status: TransactionState; + metadata?: TransactionMetadata; +}; export type Transactions = Array; - export type TransactionInputs = { - address: string, - amount?: TransactionAmount, - assets?: ApiTokens, - id: string, - index: number, + address: string; + amount?: TransactionAmount; + assets?: ApiTokens; + id: string; + index: number; }; - export type TransactionOutputs = { - address: string, - amount: TransactionAmount, - assets?: ApiTokens, + address: string; + amount: TransactionAmount; + assets?: ApiTokens; }; - export type TransactionWithdrawals = { - stake_address: string, - amount: TransactionAmount, + stake_address: string; + amount: TransactionAmount; }; export type TransactionWithdrawalType = 'self' | Array; - export type TransactionState = 'pending' | 'in_ledger' | 'expired'; - export type TransactionAddresses = { - from: Array, - to: Array, - withdrawals: Array, + from: Array; + to: Array; + withdrawals: Array; }; - export type TransactionType = 'card' | 'expend' | 'income' | 'exchange'; - // Req / Res Transaction Types export type GetTransactionsRequest = { - walletId: string, - order?: 'ascending' | 'descending', - fromDate: ?string, - toDate: ?string, - isLegacy: boolean, - isHardwareWallet?: boolean, - // @API TODO - Params "pending" for V2 + walletId: string; + order?: 'ascending' | 'descending'; + fromDate: string | null | undefined; + toDate: string | null | undefined; + isLegacy: boolean; + isHardwareWallet?: boolean; // @API TODO - Params "pending" for V2 // searchTerm: string, // skip: number, // limit: number, @@ -105,234 +90,189 @@ export type GetTransactionsRequest = { // isRestoreCompleted: boolean, // cachedTransactions: Array, }; - export type GetTransactionRequest = { - walletId: string, - transactionId: string, + walletId: string; + transactionId: string; }; - export type GetTransactionFeeRequest = { - walletId: string, - address: string, - amount: number, - assets?: ApiTokens, - walletBalance: BigNumber, - availableBalance: BigNumber, - rewardsBalance: BigNumber, - isLegacy: boolean, - withdrawal?: 'self' | Array, -}; - + walletId: string; + address: string; + amount: number; + assets?: ApiTokens; + walletBalance: BigNumber; + availableBalance: BigNumber; + rewardsBalance: BigNumber; + isLegacy: boolean; + withdrawal?: 'self' | Array; +}; export type GetTransactionFeeResponse = { - fee: BigNumber, - minimumAda: BigNumber, + fee: BigNumber; + minimumAda: BigNumber; }; - export type CreateTransactionRequest = { - walletId: string, - address: string, - amount: number, - passphrase: string, - isLegacy: boolean, - assets?: ApiTokens, - withdrawal?: 'self' | Array, -}; - + walletId: string; + address: string; + amount: number; + passphrase: string; + isLegacy: boolean; + assets?: ApiTokens; + withdrawal?: 'self' | Array; +}; export type DeleteTransactionRequest = { - walletId: string, - transactionId: string, - isLegacy: boolean, + walletId: string; + transactionId: string; + isLegacy: boolean; }; - export type GetTransactionsResponse = { - transactions: Array, - total: number, + transactions: Array; + total: number; }; - export type TransactionParams = { - walletId: string, + walletId: string; data: { - payments: Array, - passphrase: string, - }, + payments: Array; + passphrase: string; + }; }; - export type TransactionFeeAmount = { - quantity: number, - unit: WalletUnits.LOVELACE, + quantity: number; + unit: WalletUnits.LOVELACE; }; - export type GetTransactionFeeParams = { - walletId: string, + walletId: string; data: { - payments: Array, - }, + payments: Array; + }; }; - export type TransactionPaymentData = { - address: string, - amount: TransactionFeeAmount, - assets?: ApiTokens, + address: string; + amount: TransactionFeeAmount; + assets?: ApiTokens; }; - export type TransactionFee = { - estimated_min: TransactionFeeAmount, - estimated_max: TransactionFeeAmount, - deposit: TransactionFeeAmount, - minimum_coins: Array, + estimated_min: TransactionFeeAmount; + estimated_max: TransactionFeeAmount; + deposit: TransactionFeeAmount; + minimum_coins: Array; }; - export type CoinSelectionAmount = { - quantity: number, - unit: WalletUnits.LOVELACE, + quantity: number; + unit: WalletUnits.LOVELACE; }; - export type CoinSelectionInput = { - address: string, - amount: CoinSelectionAmount, - id: string, - index: number, - derivationPath: Array, + address: string; + amount: CoinSelectionAmount; + id: string; + index: number; + derivationPath: Array; }; - export type Asset = { - policyId: string, - assetName: string, - quantity: number, + policyId: string; + assetName: string; + quantity: number; }; - export type CoinSelectionOutput = { - address: string, - amount: CoinSelectionAmount, - derivationPath: Array, - assets?: Array, + address: string; + amount: CoinSelectionAmount; + derivationPath: Array; + assets?: Array; }; - export type CertificateType = | 'register_reward_account' | 'quit_pool' | 'join_pool'; - export type CoinSelectionCertificate = { - pool: string, - certificateType: CertificateType, - rewardAccountPath: Array, + pool: string; + certificateType: CertificateType; + rewardAccountPath: Array; }; - export type CoinSelectionCertificates = Array; - export type CoinSelectionWithdrawal = { - stakeAddress: string, - derivationPath: Array, - amount: CoinSelectionAmount, + stakeAddress: string; + derivationPath: Array; + amount: CoinSelectionAmount; }; - export type CoinSelectionWithdrawals = Array; - export type CoinSelectionsDelegationRequestType = { - walletId: string, - poolId: string, - delegationAction: DelegationAction, + walletId: string; + poolId: string; + delegationAction: DelegationAction; }; - export type CoinSelectionsPaymentRequestType = { - walletId: string, - address: string, - amount: number, - assets?: ApiTokens, - metadata?: VotingMetadataType, + walletId: string; + address: string; + amount: number; + assets?: ApiTokens; + metadata?: VotingMetadataType; }; - export type CoinSelectionsRequest = | CoinSelectionsPaymentRequestType | CoinSelectionsDelegationRequestType; - export type CoinSelectionsResponse = { - inputs: Array, - outputs: Array, - certificates: CoinSelectionCertificates, - deposits: BigNumber, - depositsReclaimed: BigNumber, - withdrawals: Array, - fee: BigNumber, - metadata: ?string, -}; - + inputs: Array; + outputs: Array; + certificates: CoinSelectionCertificates; + deposits: BigNumber; + depositsReclaimed: BigNumber; + withdrawals: Array; + fee: BigNumber; + metadata: string | null | undefined; +}; export type CreateExternalTransactionRequest = { - signedTransactionBlob: Buffer, + signedTransactionBlob: Buffer; }; - export type CreateExternalTransactionResponse = { - id: string, + id: string; }; - export type GetWithdrawalsRequest = { - walletId: string, + walletId: string; }; - export type GetWithdrawalsResponse = { - withdrawals: BigNumber, + withdrawals: BigNumber; }; - export type ICOPublicKeyParams = { - walletId: string, - index: string, + walletId: string; + index: string; data: { - passphrase: string, - format: 'extended' | 'non_extended', - purpose: string, - }, + passphrase: string; + format: 'extended' | 'non_extended'; + purpose: string; + }; }; - export type CoinSelectionAssetsType = Array; - export type VotingMetaIndexType = 61284 | 61285; - export const VotingMetaIndexes: { - VOTING_REGISTRATION: VotingMetaIndexType, - VOTING_SIGNATURE: VotingMetaIndexType, + VOTING_REGISTRATION: VotingMetaIndexType; + VOTING_SIGNATURE: VotingMetaIndexType; } = { VOTING_REGISTRATION: 61284, VOTING_SIGNATURE: 61285, }; - -export type VotingMetaKeyValuePairString = { - [key: 'string']: string, -}; -export type VotingMetaKeyValuePairInt = { - [key: 'int']: number, -}; -export type VotingMetaKeyValuePairBytes = { - [key: 'bytes']: string, -}; -export type VotingMetaKeyValuePairMap = { - [key: 'int']: number, -}; - +export type VotingMetaKeyValuePairString = { [key in 'string']?: string }; +export type VotingMetaKeyValuePairInt = { [key in 'int']?: number }; +export type VotingMetaKeyValuePairBytes = { [key in 'bytes']?: string }; +export type VotingMetaKeyValuePairMap = { [key in 'int']?: number }; export type VotingMetaKeyType = 'string' | 'int' | 'bytes' | 'list' | 'map'; - export type VotingMetaKeyValuePair = { - [key: 'k' | 'v']: + [key in 'k' | 'v']?: | VotingMetaKeyValuePairString | VotingMetaKeyValuePairInt - | VotingMetaKeyValuePairBytes, + | VotingMetaKeyValuePairBytes; }; - export type VotingMetaRegistrationType = { - [key: 'map']: Array, -}; - -export type VotingMetadataType = { - [key: VotingMetaIndexType]: VotingMetaRegistrationType, + [key in 'map']?: Array; }; - +export type VotingMetadataType = Record< + VotingMetaIndexType, + VotingMetaRegistrationType +>; export type VotingDataType = { - stakeAddress: string, - stakeAddressHex: string, - votingKey: string, - stakeKey: string, - role: PathRoleIdentityType, - index: string, - metadata: VotingMetadataType, - nonce: number, + stakeAddress: string; + stakeAddressHex: string; + votingKey: string; + stakeKey: string; + role: PathRoleIdentityType; + index: string; + metadata: VotingMetadataType; + nonce: number; }; diff --git a/source/renderer/app/api/utils/apiHelpers.ts b/source/renderer/app/api/utils/apiHelpers.ts index 5c2ef68a98..7b8776138a 100644 --- a/source/renderer/app/api/utils/apiHelpers.ts +++ b/source/renderer/app/api/utils/apiHelpers.ts @@ -1,27 +1,22 @@ -// @flow import { ApiMethodNotYetImplementedError } from '../common/errors'; - export const notYetImplemented = async () => new Promise((resolve, reject) => { reject(new ApiMethodNotYetImplementedError()); }); - // helper code for testing async APIs -export const testAsync = async (apiMethod: Function) => { +export const testAsync = async (apiMethod: (...args: Array) => any) => { const result = await apiMethod(); // eslint-disable-next-line no-console console.log(`testAsync result: ${result}`); return result; }; - // helper code for testing sync APIs -export const testSync = (apiMethod: Function) => { +export const testSync = (apiMethod: (...args: Array) => any) => { const result = apiMethod(); // eslint-disable-next-line no-console console.log(`testSync result: ${result}`); return result; }; - // helper code for deferring API call execution export const wait = (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/source/renderer/app/api/utils/externalRequest.ts b/source/renderer/app/api/utils/externalRequest.ts index 8bf9c13440..f2cbb0797e 100644 --- a/source/renderer/app/api/utils/externalRequest.ts +++ b/source/renderer/app/api/utils/externalRequest.ts @@ -1,19 +1,16 @@ -// @flow import { omit } from 'lodash'; import { ALLOWED_EXTERNAL_HOSTNAMES } from '../../config/urlsConfig'; - export type HttpOptions = { - hostname: string, - method: string, - path?: string, - port?: number, - protocol?: string, + hostname: string; + method: string; + path?: string; + port?: number; + protocol?: string; headers?: { - 'Content-Type': string, - 'Content-Length': number, - }, + 'Content-Type': string; + 'Content-Length': number; + }; }; - export const externalRequest = ( httpOptions: HttpOptions, raw: boolean = false @@ -27,7 +24,6 @@ export const externalRequest = ( const options = omit(httpOptions, 'protocol'); const requestMethod = global[protocol].request; const request = requestMethod(options); - request.on('response', (response) => { response.setEncoding('utf8'); let body = ''; diff --git a/source/renderer/app/api/utils/hashing.ts b/source/renderer/app/api/utils/hashing.ts index 1eed0d2d2c..4fbc7057f9 100644 --- a/source/renderer/app/api/utils/hashing.ts +++ b/source/renderer/app/api/utils/hashing.ts @@ -1,5 +1,3 @@ -// @flow - // From: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest export const getSHA256HexForString = async (str: string): Promise => { const data = new TextEncoder().encode(str); diff --git a/source/renderer/app/api/utils/index.ts b/source/renderer/app/api/utils/index.ts index d3a821e4e2..ddc28c1a99 100644 --- a/source/renderer/app/api/utils/index.ts +++ b/source/renderer/app/api/utils/index.ts @@ -1,7 +1,5 @@ -// @flow import moment from 'moment'; import blakejs from 'blakejs'; - // time utils export const unixTimestampToDate = (timestamp: number) => new Date(timestamp * 1000); @@ -10,24 +8,20 @@ export const utcStringToDate = (createDate: string) => // passphrase utils const bytesToB16 = (bytes) => Buffer.from(bytes).toString('hex'); + const blake2b = (data) => blakejs.blake2b(data, null, 32); export const encryptPassphrase = (passphrase: string) => bytesToB16(blake2b(passphrase)); - // string utils -export const getContentLength = (content: string) => - // 'TextEncoder' is used to measure correct length of UTF-8 strings - new TextEncoder().encode(content).length; - +export const getContentLength = ( + content: string // 'TextEncoder' is used to measure correct length of UTF-8 strings +) => new TextEncoder().encode(content).length; // legacy wallet ID utils const LEGACY_WALLET_ID_PREFIX = 'legacy_'; - export const getLegacyWalletId = (rawWalletId: string): string => `${LEGACY_WALLET_ID_PREFIX}${rawWalletId}`; - export const getRawWalletId = (legacyWalletId: string): string => legacyWalletId.replace(LEGACY_WALLET_ID_PREFIX, ''); - export const isLegacyWalletId = (walletId: string): boolean => walletId.startsWith(LEGACY_WALLET_ID_PREFIX); diff --git a/source/renderer/app/api/utils/localStorage.ts b/source/renderer/app/api/utils/localStorage.ts index 1245aee667..f3b219abec 100644 --- a/source/renderer/app/api/utils/localStorage.ts +++ b/source/renderer/app/api/utils/localStorage.ts @@ -1,7 +1,4 @@ -// @flow - /* eslint-disable consistent-return */ - import { includes, without, get } from 'lodash'; import { toJS } from '../../../../common/utils/helper'; import { electronStoreConversation } from '../../ipc/electronStoreConversation'; @@ -10,7 +7,6 @@ import { STORAGE_TYPES as types, STORAGE_KEYS as keys, } from '../../../../common/config/electron-store.config'; - import type { NewsTimestamp } from '../news/types'; import type { WalletMigrationStatus } from '../../stores/WalletMigrationStore'; import type { @@ -24,58 +20,45 @@ import { CURRENCY_IS_ACTIVE_BY_DEFAULT, CURRENCY_DEFAULT_SELECTED, } from '../../config/currencyConfig'; - export type WalletLocalData = { - id: string, - recoveryPhraseVerificationDate?: ?Date, - creationDate: Date, - showUsedAddresses: boolean, + id: string; + recoveryPhraseVerificationDate?: Date | null | undefined; + creationDate: Date; + showUsedAddresses: boolean; }; -export type WalletsLocalData = { - [key: StorageKey]: WalletLocalData, -}; - +export type WalletsLocalData = Record; export type SetHardwareWalletLocalDataRequestType = { - walletId: string, + walletId: string; data: { - device?: TransportDevice, - extendedPublicKey?: HardwareWalletExtendedPublicKeyResponse, - disconnected?: boolean, - }, + device?: TransportDevice; + extendedPublicKey?: HardwareWalletExtendedPublicKeyResponse; + disconnected?: boolean; + }; }; - export type SetHardwareWalletDeviceRequestType = { - deviceId: ?string, // @TODO - mark as mandatory parameter once Ledger improver + deviceId: string | null | undefined; + // @TODO - mark as mandatory parameter once Ledger improver data: { - deviceType?: DeviceType, - deviceModel?: string, - deviceName?: string, - path?: ?string, - paired?: ?string, - disconnected?: boolean, - }, + deviceType?: DeviceType; + deviceModel?: string; + deviceName?: string; + path?: string | null | undefined; + paired?: string | null | undefined; + disconnected?: boolean; + }; }; - export type HardwareWalletLocalData = { - id: string, - deviceType: DeviceType, - device: TransportDevice, - extendedPublicKey: HardwareWalletExtendedPublicKeyResponse, - disconnected: boolean, -}; - -export type HardwareWalletsLocalData = { - [key: string]: HardwareWalletLocalData, -}; - -export type HardwareWalletDevicesType = { - [key: string]: TransportDevice, + id: string; + deviceType: DeviceType; + device: TransportDevice; + extendedPublicKey: HardwareWalletExtendedPublicKeyResponse; + disconnected: boolean; }; - +export type HardwareWalletsLocalData = Record; +export type HardwareWalletDevicesType = Record; export type AssetLocalData = { - decimals: number, + decimals: number; }; - /** * This api layer provides access to the electron local storage * for user settings that are not synced with any coin backend. @@ -95,7 +78,6 @@ export default class LocalStorageApi { if (value === undefined) return fallbackValue || ''; return value; }; - static set = async ( key: StorageKey, data: any, @@ -108,7 +90,6 @@ export default class LocalStorageApi { id, }); }; - static unset = async (key: StorageKey, id?: string): Promise => { await electronStoreConversation.request({ type: types.DELETE, @@ -116,83 +97,57 @@ export default class LocalStorageApi { id, }); }; - static reset = async (): Promise => { await electronStoreConversation.request({ type: types.RESET, key: keys.RESET, }); }; - getUserLocale = (): Promise => LocalStorageApi.get(keys.USER_LOCALE); - setUserLocale = (locale: string): Promise => LocalStorageApi.set(keys.USER_LOCALE, locale); - unsetUserLocale = (): Promise => LocalStorageApi.unset(keys.USER_LOCALE); - getUserNumberFormat = (): Promise => LocalStorageApi.get(keys.USER_NUMBER_FORMAT); - setUserNumberFormat = (numberFormat: string): Promise => LocalStorageApi.set(keys.USER_NUMBER_FORMAT, numberFormat); - unsetUserNumberFormat = (): Promise => LocalStorageApi.unset(keys.USER_NUMBER_FORMAT); - getUserDateFormatEnglish = (): Promise => LocalStorageApi.get(keys.USER_DATE_FORMAT_ENGLISH); - setUserDateFormatEnglish = (dateFormat: string): Promise => LocalStorageApi.set(keys.USER_DATE_FORMAT_ENGLISH, dateFormat); - unsetUserDateFormatEnglish = (): Promise => LocalStorageApi.unset(keys.USER_DATE_FORMAT_ENGLISH); - getUserDateFormatJapanese = (): Promise => LocalStorageApi.get(keys.USER_DATE_FORMAT_JAPANESE); - setUserDateFormatJapanese = (dateFormat: string): Promise => LocalStorageApi.set(keys.USER_DATE_FORMAT_JAPANESE, dateFormat); - unsetUserDateFormatJapanese = (): Promise => LocalStorageApi.unset(keys.USER_DATE_FORMAT_JAPANESE); - getUserTimeFormat = (): Promise => LocalStorageApi.get(keys.USER_TIME_FORMAT); - setUserTimeFormat = (timeFormat: string): Promise => LocalStorageApi.set(keys.USER_TIME_FORMAT, timeFormat); - unsetUserTimeFormat = (): Promise => LocalStorageApi.unset(keys.USER_TIME_FORMAT); - getTermsOfUseAcceptance = (): Promise => LocalStorageApi.get(keys.TERMS_OF_USE_ACCEPTANCE, false); - setTermsOfUseAcceptance = (): Promise => LocalStorageApi.set(keys.TERMS_OF_USE_ACCEPTANCE, true); - unsetTermsOfUseAcceptance = (): Promise => LocalStorageApi.unset(keys.TERMS_OF_USE_ACCEPTANCE); - getUserTheme = (): Promise => LocalStorageApi.get(keys.THEME); - setUserTheme = (theme: string): Promise => LocalStorageApi.set(keys.THEME, theme); - unsetUserTheme = (): Promise => LocalStorageApi.unset(keys.THEME); - getDataLayerMigrationAcceptance = (): Promise => LocalStorageApi.get(keys.DATA_LAYER_MIGRATION_ACCEPTANCE, false); - setDataLayerMigrationAcceptance = (): Promise => LocalStorageApi.set(keys.DATA_LAYER_MIGRATION_ACCEPTANCE, true); - unsetDataLayerMigrationAcceptance = (): Promise => LocalStorageApi.unset(keys.DATA_LAYER_MIGRATION_ACCEPTANCE); - getCurrencySelected = async (): Promise => { const localCurrencySelected: Promise< Currency | DeprecatedCurrency | string @@ -201,6 +156,7 @@ export default class LocalStorageApi { CURRENCY_DEFAULT_SELECTED ); if (typeof localCurrencySelected === 'string') return localCurrencySelected; + /** * * Prior versions were storing the whole Currency object, @@ -217,25 +173,18 @@ export default class LocalStorageApi { this.setCurrencySelected(localCurrencyCode); return localCurrencyCode; }; - setCurrencySelected = (currencyCode: string): Promise => LocalStorageApi.set(keys.CURRENCY_SELECTED, currencyCode); - unsetCurrencySelected = (): Promise => LocalStorageApi.unset(keys.CURRENCY_SELECTED); - getCurrencyIsActive = (): Promise => LocalStorageApi.get(keys.CURRENCY_ACTIVE, CURRENCY_IS_ACTIVE_BY_DEFAULT); - setCurrencyIsActive = async (isActive: boolean): Promise => LocalStorageApi.set(keys.CURRENCY_ACTIVE, isActive); - unsetCurrencyIsActive = (): Promise => LocalStorageApi.unset(keys.CURRENCY_ACTIVE); - - getWalletsLocalData = (): Promise => + getWalletsLocalData = (): Promise> => LocalStorageApi.get(keys.WALLETS, {}); - getWalletLocalData = (walletId: string): Promise => LocalStorageApi.get( keys.WALLETS, @@ -244,14 +193,17 @@ export default class LocalStorageApi { }, walletId ); - setWalletLocalData = async ( walletId: string, - updatedWalletData?: Object + updatedWalletData?: Record ): Promise => { const currentWalletData = await this.getWalletLocalData(walletId); - const defaultData = { creationDate: new Date() }; - const unmutableData = { id: walletId }; + const defaultData = { + creationDate: new Date(), + }; + const unmutableData = { + id: walletId, + }; const walletData = Object.assign( {}, defaultData, @@ -262,108 +214,87 @@ export default class LocalStorageApi { await LocalStorageApi.set(keys.WALLETS, toJS(walletData), walletId); return walletData; }; - unsetWalletLocalData = (walletId: string): Promise => LocalStorageApi.unset(keys.WALLETS, walletId); - getReadNews = (): Promise => LocalStorageApi.get(keys.READ_NEWS, []); - markNewsAsRead = async ( newsTimestamps: NewsTimestamp[] ): Promise => { const readNews = (await LocalStorageApi.get(keys.READ_NEWS)) || []; + if (!includes(readNews, newsTimestamps[0])) { await LocalStorageApi.set( keys.READ_NEWS, readNews.concat(newsTimestamps) ); } + return readNews; }; - markNewsAsUnread = async ( newsTimestamp: NewsTimestamp ): Promise => { const readNews = (await LocalStorageApi.get(keys.READ_NEWS)) || []; + if (includes(readNews, newsTimestamp)) { await LocalStorageApi.set( keys.READ_NEWS, without(readNews, newsTimestamp) ); } + return readNews; }; - unsetReadNews = (): Promise => LocalStorageApi.unset(keys.READ_NEWS); - getWalletMigrationStatus = (): Promise => LocalStorageApi.get( keys.WALLET_MIGRATION_STATUS, WalletMigrationStatuses.UNSTARTED ); - setWalletMigrationStatus = (status: WalletMigrationStatus): Promise => LocalStorageApi.set(keys.WALLET_MIGRATION_STATUS, status); - unsetWalletMigrationStatus = (): Promise => LocalStorageApi.unset(keys.WALLET_MIGRATION_STATUS); - getAppAutomaticUpdateFailed = (): Promise => LocalStorageApi.get(keys.APP_AUTOMATIC_UPDATE_FAILED, false); - setAppAutomaticUpdateFailed = (): Promise => LocalStorageApi.set(keys.APP_AUTOMATIC_UPDATE_FAILED, true); - unsetAppAutomaticUpdateFailed = (): Promise => LocalStorageApi.unset(keys.APP_AUTOMATIC_UPDATE_FAILED); - getAppUpdateCompleted = (): Promise => LocalStorageApi.get(keys.APP_UPDATE_COMPLETED, false); - setAppUpdateCompleted = (verstion: string): Promise => LocalStorageApi.set(keys.APP_UPDATE_COMPLETED, verstion, ''); - unsetAppUpdateCompleted = (): Promise => LocalStorageApi.unset(keys.APP_UPDATE_COMPLETED); - - getWalletTokenFavorites = (): Promise<{ [key: string]: boolean }> => + getWalletTokenFavorites = (): Promise> => LocalStorageApi.get(keys.TOKEN_FAVORITES, {}); - toggleWalletTokenFavorite = async ( uniqueId: string, isFavorite: boolean ): Promise => { const favorites = await this.getWalletTokenFavorites(); - const newFavorites = { - ...favorites, - [uniqueId]: isFavorite, - }; + const newFavorites = { ...favorites, [uniqueId]: isFavorite }; await LocalStorageApi.set(keys.TOKEN_FAVORITES, newFavorites); return !isFavorite; }; - unsetWalletTokenFavorite = async (uniqueId: string): Promise => { const favorites = await this.getWalletTokenFavorites(); delete favorites[uniqueId]; await LocalStorageApi.set(keys.TOKEN_FAVORITES, favorites); }; - unsetWalletTokenFavorites = async (): Promise => LocalStorageApi.unset(keys.TOKEN_FAVORITES); - getAssetsLocalData = (): Promise => LocalStorageApi.get(keys.ASSET_DATA, []); - unsetAssetsLocalData = (): Promise => LocalStorageApi.unset(keys.ASSET_DATA); - getAssetLocalData = ( policyId: string, assetName: string ): Promise => LocalStorageApi.get(keys.ASSET_DATA, {}, `${policyId}${assetName}`); - setAssetLocalData = ( policyId: string, assetName: string, @@ -374,38 +305,27 @@ export default class LocalStorageApi { assetLocalData, `${policyId}${assetName}` ); - getAssetSettingsDialogWasOpened = (): Promise => LocalStorageApi.get(keys.ASSET_SETTINGS_DIALOG_WAS_OPENED, false); - setAssetSettingsDialogWasOpened = (): Promise => LocalStorageApi.set(keys.ASSET_SETTINGS_DIALOG_WAS_OPENED, true); - unsetAssetSettingsDialogWasOpened = (): Promise => LocalStorageApi.unset(keys.ASSET_SETTINGS_DIALOG_WAS_OPENED); - getSmashServer = (): Promise => LocalStorageApi.get(keys.SMASH_SERVER); - setSmashServer = (smashServerUrl: string): Promise => LocalStorageApi.set(keys.SMASH_SERVER, smashServerUrl); - unsetSmashServer = (): Promise => LocalStorageApi.unset(keys.SMASH_SERVER); - getStakingInfoWasOpen = (): Promise => LocalStorageApi.get(keys.STAKING_INFO_WAS_OPEN, false); - setStakingInfoWasOpen = async (): Promise => LocalStorageApi.set(keys.STAKING_INFO_WAS_OPEN, true); - unsetStakingInfoWasOpen = (): Promise => LocalStorageApi.unset(keys.STAKING_INFO_WAS_OPEN); - // Paired Hardware wallets (software <-> hardware wallet / device) getHardwareWalletsLocalData = (): Promise => LocalStorageApi.get(keys.HARDWARE_WALLETS, {}); - getHardwareWalletLocalData = ( walletId: string ): Promise => @@ -416,13 +336,14 @@ export default class LocalStorageApi { }, walletId ); - setHardwareWalletLocalData = async ( walletId: string, - data?: Object // @TODO - define real type + data?: Record ): Promise => { const currentWalletData = await this.getHardwareWalletLocalData(walletId); - const unmutableData = { id: walletId }; + const unmutableData = { + id: walletId, + }; const walletData = Object.assign( {}, currentWalletData, @@ -436,17 +357,13 @@ export default class LocalStorageApi { ); return walletData; }; - unsetHardwareWalletLocalData = (walletId: string): Promise => LocalStorageApi.unset(keys.HARDWARE_WALLETS, walletId); - unsetHardwareWalletLocalDataAll = async (): Promise => LocalStorageApi.unset(keys.HARDWARE_WALLETS); - // Recognized Hardware wallet devices getHardwareWalletDevices = (): Promise => LocalStorageApi.get(keys.HARDWARE_WALLET_DEVICES, {}); - getHardwareWalletDevice = ( deviceId: string ): Promise => @@ -457,13 +374,14 @@ export default class LocalStorageApi { }, deviceId ); - setHardwareWalletDevice = async ( deviceId: string, - data?: Object + data?: Record ): Promise => { const currentDeviceData = await this.getHardwareWalletDevice(deviceId); - const unmutableData = { id: deviceId }; + const unmutableData = { + id: deviceId, + }; const deviceData = Object.assign( {}, currentDeviceData, @@ -477,18 +395,14 @@ export default class LocalStorageApi { ); return deviceData; }; - overrideHardwareWalletDevices = async ( data: HardwareWalletDevicesType ): Promise => LocalStorageApi.set(keys.HARDWARE_WALLET_DEVICES, toJS(data)); - unsetHardwareWalletDevice = (deviceId: string): Promise => LocalStorageApi.unset(keys.HARDWARE_WALLET_DEVICES, deviceId); - unsetHardwareWalletDevicesAll = async (): Promise => LocalStorageApi.unset(keys.HARDWARE_WALLET_DEVICES); - reset = async () => { await LocalStorageApi.reset(); }; diff --git a/source/renderer/app/api/utils/mnemonics.ts b/source/renderer/app/api/utils/mnemonics.ts index 86653377ad..70bb656413 100644 --- a/source/renderer/app/api/utils/mnemonics.ts +++ b/source/renderer/app/api/utils/mnemonics.ts @@ -1,31 +1,26 @@ -// @flow import { unscramblePaperWalletMnemonic, scramblePaperWalletMnemonic, generateMnemonic, } from '../../utils/crypto'; import { PAPER_WALLET_WRITTEN_WORDS_COUNT } from '../../config/cryptoConfig'; - type MnemonicsParams = { - passphrase: string, // 9-word mnemonic - scrambledInput: string, // 18-word scrambled mnemonic + passphrase: string; + // 9-word mnemonic + scrambledInput: string; // 18-word scrambled mnemonic }; - export const unscrambleMnemonics = ({ passphrase, scrambledInput, }: MnemonicsParams): Array => unscramblePaperWalletMnemonic(passphrase, scrambledInput); - export const scrambleMnemonics = ({ passphrase, scrambledInput, }: MnemonicsParams): Array => scramblePaperWalletMnemonic(passphrase, scrambledInput); - export const generateAccountMnemonics = ( numberOfWords: number ): Array => generateMnemonic(numberOfWords).split(' '); - export const generateAdditionalMnemonics = (): Array => generateMnemonic(PAPER_WALLET_WRITTEN_WORDS_COUNT).split(' '); diff --git a/source/renderer/app/api/utils/patchAdaApi.ts b/source/renderer/app/api/utils/patchAdaApi.ts index 7cb62e7098..b5ce03a410 100644 --- a/source/renderer/app/api/utils/patchAdaApi.ts +++ b/source/renderer/app/api/utils/patchAdaApi.ts @@ -1,4 +1,3 @@ -// @flow import { get, map } from 'lodash'; import { action } from 'mobx'; import BigNumber from 'bignumber.js/bignumber'; @@ -7,40 +6,40 @@ import { getNetworkInfo } from '../network/requests/getNetworkInfo'; import { logger } from '../../utils/logging'; import packageJson from '../../../../../package.json'; import ApiError from '../../domains/ApiError'; - // domains import Wallet from '../../domains/Wallet'; import StakePool from '../../domains/StakePool'; - import type { GetNetworkInfoResponse, NetworkInfoResponse, } from '../network/types'; import type { GetNewsResponse } from '../news/types'; - let LOCAL_TIME_DIFFERENCE = 0; let SYNC_PROGRESS = null; -let TESTING_NEWSFEED_JSON: ?GetNewsResponse; -let TESTING_WALLETS_DATA: Object = {}; - +let TESTING_NEWSFEED_JSON: GetNewsResponse | null | undefined; +let TESTING_WALLETS_DATA: Record = {}; export default (api: AdaApi) => { api.getNetworkInfo = async (): Promise => { logger.debug('AdaApi::getNetworkInfo (PATCHED) called'); + try { const networkInfo: NetworkInfoResponse = await getNetworkInfo(api.config); - logger.debug('AdaApi::getNetworkInfo (PATCHED) success', { networkInfo }); - + logger.debug('AdaApi::getNetworkInfo (PATCHED) success', { + networkInfo, + }); const { - sync_progress, // eslint-disable-line camelcase - node_tip, // eslint-disable-line camelcase - network_tip, // eslint-disable-line camelcase + sync_progress, + // eslint-disable-line camelcase + node_tip, + // eslint-disable-line camelcase + network_tip, + // eslint-disable-line camelcase next_epoch, // eslint-disable-line camelcase } = networkInfo; const syncProgress = get(sync_progress, 'status') === 'ready' ? 100 : get(sync_progress, 'quantity', 0); - // extract relevant data before sending to NetworkStatusStore const nextEpochNumber = get(next_epoch, 'epoch_number', null); const nextEpochStartTime = get(next_epoch, 'epoch_start_time', ''); @@ -63,7 +62,9 @@ export default (api: AdaApi) => { }, }; } catch (error) { - logger.error('AdaApi::getNetworkInfo (PATCHED) error', { error }); + logger.error('AdaApi::getNetworkInfo (PATCHED) error', { + error, + }); throw new ApiError(); } }; @@ -72,12 +73,16 @@ export default (api: AdaApi) => { SYNC_PROGRESS = syncProgress; }; - api.setTestingNewsFeed = (testingNewsFeedData: ?GetNewsResponse) => { + api.setTestingNewsFeed = ( + testingNewsFeedData: GetNewsResponse | null | undefined + ) => { const { version: packageJsonVersion } = packageJson; + if (!testingNewsFeedData) { TESTING_NEWSFEED_JSON = null; return; } + // Always mutate newsfeed target version to current app version const newsFeedItems = map(testingNewsFeedData.items, (item) => { return { @@ -90,11 +95,7 @@ export default (api: AdaApi) => { }, }; }); - - TESTING_NEWSFEED_JSON = { - ...testingNewsFeedData, - items: newsFeedItems, - }; + TESTING_NEWSFEED_JSON = { ...testingNewsFeedData, items: newsFeedItems }; }; api.getNews = (): Promise => { @@ -108,28 +109,25 @@ export default (api: AdaApi) => { }; api.setTestingWallet = ( - testingWalletData: Object, - walletIndex?: number = 0 + testingWalletData: Record, + walletIndex: number = 0 ): void => { TESTING_WALLETS_DATA[walletIndex] = testingWalletData; }; - api.setTestingWallets = (testingWalletsData: Array): void => { + api.setTestingWallets = ( + testingWalletsData: Array> + ): void => { TESTING_WALLETS_DATA = testingWalletsData; }; - const originalGetWallets: Function = api.getWallets; - - const getModifiedWallet = action((wallet: Object) => { + const originalGetWallets: (...args: Array) => any = api.getWallets; + const getModifiedWallet = action((wallet: Record) => { let { amount = 100000, availableAmount = 100000 } = wallet; if (typeof amount !== 'object') amount = new BigNumber(amount); if (typeof availableAmount !== 'object') availableAmount = new BigNumber(availableAmount); - return new Wallet({ - ...wallet, - amount, - availableAmount, - }); + return new Wallet({ ...wallet, amount, availableAmount }); }); api.getWallets = async (): Promise> => { @@ -137,20 +135,19 @@ export default (api: AdaApi) => { const modifiedWallets = originalWallets.map( (originalWallet: Wallet, index: number) => { const testingWallet = TESTING_WALLETS_DATA[index] || {}; - const modifiedWallet = { - ...originalWallet, - ...testingWallet, - }; + const modifiedWallet = { ...originalWallet, ...testingWallet }; return getModifiedWallet(modifiedWallet); } ); return Promise.resolve(modifiedWallets); }; - api.setTestingStakePools = (testingStakePoolsData: Array): void => { + api.setTestingStakePools = ( + testingStakePoolsData: Array> + ): void => { api.getStakePools = (): Array => testingStakePoolsData.map( - (stakePool: Object) => new StakePool(stakePool) + (stakePool: Record) => new StakePool(stakePool) ); }; diff --git a/source/renderer/app/api/utils/request.ts b/source/renderer/app/api/utils/request.ts index 39f934fbfc..d0fd7cec44 100644 --- a/source/renderer/app/api/utils/request.ts +++ b/source/renderer/app/api/utils/request.ts @@ -1,43 +1,42 @@ -// @flow import { includes, omit, size, values, flatten } from 'lodash'; import JSONBigInt from 'json-bigint'; import querystring from 'querystring'; import { getContentLength } from '.'; - export type RequestOptions = { - hostname: string, - method: string, - path: string, - port: number, - ca: Uint8Array, - cert: Uint8Array, - key: Uint8Array, + hostname: string; + method: string; + path: string; + port: number; + ca: Uint8Array; + cert: Uint8Array; + key: Uint8Array; headers?: { - 'Content-Type': string, - 'Content-Length': number, - }, + 'Content-Type': string; + 'Content-Length': number; + }; }; - const ALLOWED_ERROR_EXCEPTION_PATHS = []; - const { isSelfnode } = global.environment; - const agent = new global.https.Agent({ - maxCachedSessions: 256, // Default: 100 | 0 - Disable TLS session caching - maxFreeSockets: 256, // Default: 256 - maxSockets: 256, // Default: Infinity - maxTotalSockets: 256, // Default: Infinity - keepAlive: true, // Default: false - keepAliveMsecs: 1000, // Default: 1000 | unit: milliseconds + maxCachedSessions: 256, + // Default: 100 | 0 - Disable TLS session caching + maxFreeSockets: 256, + // Default: 256 + maxSockets: 256, + // Default: Infinity + maxTotalSockets: 256, + // Default: Infinity + keepAlive: true, + // Default: false + keepAliveMsecs: 1000, + // Default: 1000 | unit: milliseconds scheduling: 'lifo', // Default: 'lifo' // timeout: 5 * 1000, // 5 seconds | unit: milliseconds }); - // Passing ciphers, minVersion, and maxVersion speeds up TLS handshake const httpsOptions = { ciphers: [ - 'TLS_AES_256_GCM_SHA384', - // 'TLS_AES_128_GCM_SHA256', + 'TLS_AES_256_GCM_SHA384', // 'TLS_AES_128_GCM_SHA256', // 'TLS_AES_128_CCM_SHA256', // 'TLS_AES_128_CCM_8_SHA256', // 'TLS_CHACHA20_POLY1305_SHA256' @@ -51,11 +50,16 @@ const logSocketStats = (state: string, { sockets, freeSockets }) => { if (!window.logSocketStats) { return; } + const used = flatten(values(sockets)).length; const free = flatten(values(freeSockets)).length; const total = used + free; // eslint-disable-next-line no-console - console.debug(`[connection:${state}]:socket-stats`, { used, free, total }); + console.debug(`[connection:${state}]:socket-stats`, { + used, + free, + total, + }); }; function typedRequest( @@ -63,9 +67,9 @@ function typedRequest( queryParams?: {}, rawBodyParams?: any, requestOptions?: { - returnMeta?: boolean, - isOctetStreamRequest?: boolean, - isOctetStreamResponse?: boolean, + returnMeta?: boolean; + isOctetStreamRequest?: boolean; + isOctetStreamResponse?: boolean; } ): Promise { return new Promise((resolve, reject) => { @@ -88,6 +92,7 @@ function typedRequest( // Handle raw body params if (rawBodyParams) { hasRequestBody = true; + if (isOctetStreamRequest) { requestBody = rawBodyParams; options.headers = { @@ -168,6 +173,7 @@ function typedRequest( statusCode === 404 ? 'null' : `"statusCode: ${statusCode} -- statusMessage: ${statusMessage}"`; + // When deleting a wallet, the API does not return any data in body // even if it was successful if (!body) { @@ -176,6 +182,7 @@ function typedRequest( "data": ${data} }`; } + resolve(JSONBigInt.parse(body)); } } else if (stream) { @@ -185,6 +192,7 @@ function typedRequest( } else if (body) { // Error response with a body const parsedBody = JSONBigInt.parse(body); + if (parsedBody.code && parsedBody.message) { reject(parsedBody); } else { diff --git a/source/renderer/app/api/utils/requestV0.ts b/source/renderer/app/api/utils/requestV0.ts index 458ff4e047..2319f4dfa4 100644 --- a/source/renderer/app/api/utils/requestV0.ts +++ b/source/renderer/app/api/utils/requestV0.ts @@ -1,21 +1,19 @@ -// @flow import https from 'https'; import { size, has, get, omit } from 'lodash'; import querystring from 'querystring'; import { encryptPassphrase, getContentLength } from '.'; - export type RequestOptions = { - hostname: string, - method: string, - path: string, - port: number, - ca: Uint8Array, - cert: Uint8Array, - key: Uint8Array, + hostname: string; + method: string; + path: string; + port: number; + ca: Uint8Array; + cert: Uint8Array; + key: Uint8Array; headers?: { - 'Content-Type': string, - 'Content-Length': number, - }, + 'Content-Type': string; + 'Content-Length': number; + }; }; function typedRequest( @@ -27,8 +25,8 @@ function typedRequest( const options: RequestOptions = Object.assign({}, httpOptions); let hasRequestBody = false; let requestBody = ''; - let queryString = ''; + if (queryParams && size(queryParams) > 0) { // Handle passphrase if (has(queryParams, 'passphrase')) { @@ -65,9 +63,11 @@ function typedRequest( // @ts-ignore const httpsRequest = https.request(options); + if (hasRequestBody) { httpsRequest.write(requestBody); } + httpsRequest.on('response', (response) => { let body = ''; // Cardano-sl returns chunked requests, so we need to concat them @@ -81,6 +81,7 @@ function typedRequest( response.on('end', () => { try { const parsedBody = JSON.parse(body); + if (has(parsedBody, 'Right')) { // "Right" means 200 ok (success) -> also handle if Right: false (boolean response) resolve(parsedBody.Right); diff --git a/source/renderer/app/api/voting/requests/createWalletSignature.ts b/source/renderer/app/api/voting/requests/createWalletSignature.ts index fb1b854594..93ca165ad3 100644 --- a/source/renderer/app/api/voting/requests/createWalletSignature.ts +++ b/source/renderer/app/api/voting/requests/createWalletSignature.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { SignatureParams } from '../types'; import { request } from '../../utils/request'; - export const createWalletSignature = ( config: RequestConfig, { walletId, role, index, data }: SignatureParams @@ -15,5 +13,7 @@ export const createWalletSignature = ( }, {}, data, - { isOctetStreamResponse: true } + { + isOctetStreamResponse: true, + } ); diff --git a/source/renderer/app/api/voting/types.ts b/source/renderer/app/api/voting/types.ts index 286e358956..288409ff2d 100644 --- a/source/renderer/app/api/voting/types.ts +++ b/source/renderer/app/api/voting/types.ts @@ -1,32 +1,29 @@ -// @flow export type CreateVotingRegistrationRequest = { - walletId: string, - address: string, - addressHex: string, - amount: number, - passphrase: string, - votingKey: string, - stakeKey: string, - signature: string, - absoluteSlotNumber: number, + walletId: string; + address: string; + addressHex: string; + amount: number; + passphrase: string; + votingKey: string; + stakeKey: string; + signature: string; + absoluteSlotNumber: number; }; - export type CreateWalletSignatureRequest = { - walletId: string, - role: string, - index: string, - passphrase: string, - votingKey: string, - stakeKey: string, - addressHex: string, - absoluteSlotNumber: number, + walletId: string; + role: string; + index: string; + passphrase: string; + votingKey: string; + stakeKey: string; + addressHex: string; + absoluteSlotNumber: number; }; - export type SignatureParams = { - walletId: string, - role: string, - index: string, + walletId: string; + role: string; + index: string; data: { - passphrase: string, - }, + passphrase: string; + }; }; diff --git a/source/renderer/app/api/wallets/requests/createHardwareWallet.ts b/source/renderer/app/api/wallets/requests/createHardwareWallet.ts index 9f51305bc5..b5a80439c1 100644 --- a/source/renderer/app/api/wallets/requests/createHardwareWallet.ts +++ b/source/renderer/app/api/wallets/requests/createHardwareWallet.ts @@ -1,16 +1,17 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; - type WalletInitData = { - name: string, - account_public_key: string, + name: string; + account_public_key: string; }; - export const createHardwareWallet = ( config: RequestConfig, - { walletInitData }: { walletInitData: WalletInitData } + { + walletInitData, + }: { + walletInitData: WalletInitData; + } ): Promise => { return request( { diff --git a/source/renderer/app/api/wallets/requests/createWallet.ts b/source/renderer/app/api/wallets/requests/createWallet.ts index 8ef8cc14af..4656b89336 100644 --- a/source/renderer/app/api/wallets/requests/createWallet.ts +++ b/source/renderer/app/api/wallets/requests/createWallet.ts @@ -1,11 +1,13 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet, WalletInitData } from '../types'; import { request } from '../../utils/request'; - export const createWallet = ( config: RequestConfig, - { walletInitData }: { walletInitData: WalletInitData } + { + walletInitData, + }: { + walletInitData: WalletInitData; + } ): Promise => request( { diff --git a/source/renderer/app/api/wallets/requests/deleteLegacyWallet.ts b/source/renderer/app/api/wallets/requests/deleteLegacyWallet.ts index fe05ceade3..ea48d6f8bd 100644 --- a/source/renderer/app/api/wallets/requests/deleteLegacyWallet.ts +++ b/source/renderer/app/api/wallets/requests/deleteLegacyWallet.ts @@ -1,12 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const deleteLegacyWallet = ( config: RequestConfig, - { walletId }: { walletId: string } -): Promise<*> => + { + walletId, + }: { + walletId: string; + } +): Promise => request({ method: 'DELETE', path: `/v2/byron-wallets/${getRawWalletId(walletId)}`, diff --git a/source/renderer/app/api/wallets/requests/deleteWallet.ts b/source/renderer/app/api/wallets/requests/deleteWallet.ts index 67cec0e481..2a7f79ddc2 100644 --- a/source/renderer/app/api/wallets/requests/deleteWallet.ts +++ b/source/renderer/app/api/wallets/requests/deleteWallet.ts @@ -1,11 +1,13 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; - export const deleteWallet = ( config: RequestConfig, - { walletId }: { walletId: string } -): Promise<*> => + { + walletId, + }: { + walletId: string; + } +): Promise => request({ method: 'DELETE', path: `/v2/wallets/${walletId}`, diff --git a/source/renderer/app/api/wallets/requests/exportWalletAsJSON.ts b/source/renderer/app/api/wallets/requests/exportWalletAsJSON.ts index 344fbf97eb..38c737ae34 100644 --- a/source/renderer/app/api/wallets/requests/exportWalletAsJSON.ts +++ b/source/renderer/app/api/wallets/requests/exportWalletAsJSON.ts @@ -1,12 +1,9 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/requestV0'; - export type ExportWalletAsJSONParams = { - walletId: string, - filePath: string, + walletId: string; + filePath: string; }; - export const exportWalletAsJSON = ( config: RequestConfig, { walletId, filePath }: ExportWalletAsJSONParams diff --git a/source/renderer/app/api/wallets/requests/getAccountPublicKey.ts b/source/renderer/app/api/wallets/requests/getAccountPublicKey.ts index 8d3dff9594..ff309b5c68 100644 --- a/source/renderer/app/api/wallets/requests/getAccountPublicKey.ts +++ b/source/renderer/app/api/wallets/requests/getAccountPublicKey.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; import type { GetAccountPublicKeyRequest } from '../types'; - export const getAccountPublicKey = ( config: RequestConfig, { walletId, index, passphrase, extended }: GetAccountPublicKeyRequest @@ -14,5 +12,8 @@ export const getAccountPublicKey = ( ...config, }, {}, - { passphrase, format: extended ? 'extended' : 'non_extended' } + { + passphrase, + format: extended ? 'extended' : 'non_extended', + } ); diff --git a/source/renderer/app/api/wallets/requests/getByronWalletUtxos.ts b/source/renderer/app/api/wallets/requests/getByronWalletUtxos.ts index fd3f73f86d..29ecc5161e 100644 --- a/source/renderer/app/api/wallets/requests/getByronWalletUtxos.ts +++ b/source/renderer/app/api/wallets/requests/getByronWalletUtxos.ts @@ -1,12 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { WalletUtxos } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const getByronWalletUtxos = ( config: RequestConfig, - { walletId }: { walletId: string } + { + walletId, + }: { + walletId: string; + } ): Promise => request({ method: 'GET', diff --git a/source/renderer/app/api/wallets/requests/getCurrencyList.ts b/source/renderer/app/api/wallets/requests/getCurrencyList.ts index 1822a271b3..a7a1cc5895 100644 --- a/source/renderer/app/api/wallets/requests/getCurrencyList.ts +++ b/source/renderer/app/api/wallets/requests/getCurrencyList.ts @@ -1,9 +1,6 @@ -// @flow import { genericCurrencyRequest, REQUESTS, } from '../../../config/currencyConfig'; - const requestName = REQUESTS.LIST; - export const getCurrencyList = genericCurrencyRequest(requestName); diff --git a/source/renderer/app/api/wallets/requests/getCurrencyRate.ts b/source/renderer/app/api/wallets/requests/getCurrencyRate.ts index a3c2a06df4..97068b63f5 100644 --- a/source/renderer/app/api/wallets/requests/getCurrencyRate.ts +++ b/source/renderer/app/api/wallets/requests/getCurrencyRate.ts @@ -1,11 +1,8 @@ -// @flow import { genericCurrencyRequest, REQUESTS, } from '../../../config/currencyConfig'; import type { GetCurrencyRateRequest } from '../types'; - const requestName = REQUESTS.RATE; - export const getCurrencyRate = (currency: GetCurrencyRateRequest) => genericCurrencyRequest(requestName)(currency); diff --git a/source/renderer/app/api/wallets/requests/getLegacyWallet.ts b/source/renderer/app/api/wallets/requests/getLegacyWallet.ts index 26bbcd5f9d..7d73ca17c4 100644 --- a/source/renderer/app/api/wallets/requests/getLegacyWallet.ts +++ b/source/renderer/app/api/wallets/requests/getLegacyWallet.ts @@ -1,12 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { LegacyAdaWallet } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const getLegacyWallet = ( config: RequestConfig, - { walletId }: { walletId: string } + { + walletId, + }: { + walletId: string; + } ): Promise => request({ method: 'GET', diff --git a/source/renderer/app/api/wallets/requests/getLegacyWallets.ts b/source/renderer/app/api/wallets/requests/getLegacyWallets.ts index 0ac725588f..6f938734a0 100644 --- a/source/renderer/app/api/wallets/requests/getLegacyWallets.ts +++ b/source/renderer/app/api/wallets/requests/getLegacyWallets.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { LegacyAdaWallets } from '../types'; import { request } from '../../utils/request'; - export const getLegacyWallets = ( config: RequestConfig ): Promise => diff --git a/source/renderer/app/api/wallets/requests/getWallet.ts b/source/renderer/app/api/wallets/requests/getWallet.ts index 7d5e601ddd..e52be30462 100644 --- a/source/renderer/app/api/wallets/requests/getWallet.ts +++ b/source/renderer/app/api/wallets/requests/getWallet.ts @@ -1,11 +1,13 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; - export const getWallet = ( config: RequestConfig, - { walletId }: { walletId: string } + { + walletId, + }: { + walletId: string; + } ): Promise => request({ method: 'GET', diff --git a/source/renderer/app/api/wallets/requests/getWalletPublicKey.ts b/source/renderer/app/api/wallets/requests/getWalletPublicKey.ts index 62a7d85cda..3788ae6a1a 100644 --- a/source/renderer/app/api/wallets/requests/getWalletPublicKey.ts +++ b/source/renderer/app/api/wallets/requests/getWalletPublicKey.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; import type { GetWalletPublicKeyRequest } from '../types'; - export const getWalletPublicKey = ( config: RequestConfig, { walletId, role, index }: GetWalletPublicKeyRequest diff --git a/source/renderer/app/api/wallets/requests/getWalletUtxos.ts b/source/renderer/app/api/wallets/requests/getWalletUtxos.ts index 112402ddaa..bb9b956672 100644 --- a/source/renderer/app/api/wallets/requests/getWalletUtxos.ts +++ b/source/renderer/app/api/wallets/requests/getWalletUtxos.ts @@ -1,11 +1,13 @@ -// @flow import type { RequestConfig } from '../../common/types'; import { request } from '../../utils/request'; import type { WalletUtxos } from '../types'; - export const getWalletUtxos = ( config: RequestConfig, - { walletId }: { walletId: string } + { + walletId, + }: { + walletId: string; + } ): Promise => request({ method: 'GET', diff --git a/source/renderer/app/api/wallets/requests/getWallets.ts b/source/renderer/app/api/wallets/requests/getWallets.ts index 55bd9bb38c..34bbdc01d5 100644 --- a/source/renderer/app/api/wallets/requests/getWallets.ts +++ b/source/renderer/app/api/wallets/requests/getWallets.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallets } from '../types'; import { request } from '../../utils/request'; - export const getWallets = (config: RequestConfig): Promise => request({ method: 'GET', diff --git a/source/renderer/app/api/wallets/requests/importWalletAsJSON.ts b/source/renderer/app/api/wallets/requests/importWalletAsJSON.ts index 3c8efef52a..dbe3a8958d 100644 --- a/source/renderer/app/api/wallets/requests/importWalletAsJSON.ts +++ b/source/renderer/app/api/wallets/requests/importWalletAsJSON.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/requestV0'; - export const importWalletAsJSON = ( config: RequestConfig, filePath: string diff --git a/source/renderer/app/api/wallets/requests/importWalletAsKey.ts b/source/renderer/app/api/wallets/requests/importWalletAsKey.ts index ad4d5cfef2..25a1cdda08 100644 --- a/source/renderer/app/api/wallets/requests/importWalletAsKey.ts +++ b/source/renderer/app/api/wallets/requests/importWalletAsKey.ts @@ -1,13 +1,10 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; - export type ImportWalletAsKey = { - filePath: string, - spendingPassword: string, + filePath: string; + spendingPassword: string; }; - export const importWalletAsKey = ( config: RequestConfig, walletImportData: ImportWalletAsKey diff --git a/source/renderer/app/api/wallets/requests/restoreByronWallet.ts b/source/renderer/app/api/wallets/requests/restoreByronWallet.ts index 4ba0f59fee..44ddec67c1 100644 --- a/source/renderer/app/api/wallets/requests/restoreByronWallet.ts +++ b/source/renderer/app/api/wallets/requests/restoreByronWallet.ts @@ -1,12 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { LegacyAdaWallet, LegacyWalletInitData } from '../types'; import type { WalletByronKind } from '../../../types/walletRestoreTypes'; import { request } from '../../utils/request'; - export const restoreByronWallet = ( config: RequestConfig, - { walletInitData }: { walletInitData: LegacyWalletInitData }, + { + walletInitData, + }: { + walletInitData: LegacyWalletInitData; + }, type: WalletByronKind ): Promise => request( diff --git a/source/renderer/app/api/wallets/requests/restoreExportedByronWallet.ts b/source/renderer/app/api/wallets/requests/restoreExportedByronWallet.ts index 1dc06aff85..d405497910 100644 --- a/source/renderer/app/api/wallets/requests/restoreExportedByronWallet.ts +++ b/source/renderer/app/api/wallets/requests/restoreExportedByronWallet.ts @@ -1,12 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { LegacyAdaWallet } from '../types'; import type { ExportedByronWallet } from '../../../types/walletExportTypes'; import { request } from '../../utils/request'; - export const restoreExportedByronWallet = ( config: RequestConfig, - { walletInitData }: { walletInitData: ExportedByronWallet } + { + walletInitData, + }: { + walletInitData: ExportedByronWallet; + } ): Promise => request( { diff --git a/source/renderer/app/api/wallets/requests/restoreLegacyWallet.ts b/source/renderer/app/api/wallets/requests/restoreLegacyWallet.ts index fb573f959e..d0c7005b96 100644 --- a/source/renderer/app/api/wallets/requests/restoreLegacyWallet.ts +++ b/source/renderer/app/api/wallets/requests/restoreLegacyWallet.ts @@ -1,12 +1,14 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { LegacyAdaWallet, LegacyWalletInitData } from '../types'; import { request } from '../../utils/request'; - export const restoreLegacyWallet = ( config: RequestConfig, - { walletInitData }: { walletInitData: LegacyWalletInitData }, - type?: string = '' + { + walletInitData, + }: { + walletInitData: LegacyWalletInitData; + }, + type: string = '' ): Promise => { const queryParams = {}; return request( diff --git a/source/renderer/app/api/wallets/requests/restoreWallet.ts b/source/renderer/app/api/wallets/requests/restoreWallet.ts index 02c9225d7f..73edcaac60 100644 --- a/source/renderer/app/api/wallets/requests/restoreWallet.ts +++ b/source/renderer/app/api/wallets/requests/restoreWallet.ts @@ -1,11 +1,13 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet, WalletInitData } from '../types'; import { request } from '../../utils/request'; - export const restoreWallet = ( config: RequestConfig, - { walletInitData }: { walletInitData: WalletInitData } + { + walletInitData, + }: { + walletInitData: WalletInitData; + } ): Promise => request( { diff --git a/source/renderer/app/api/wallets/requests/transferFunds.ts b/source/renderer/app/api/wallets/requests/transferFunds.ts index fadd4bdfc0..36278320ed 100644 --- a/source/renderer/app/api/wallets/requests/transferFunds.ts +++ b/source/renderer/app/api/wallets/requests/transferFunds.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { TransferFundsRequest, TransferFundsResponse } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const transferFunds = ( config: RequestConfig, { sourceWalletId, targetWalletAddresses, passphrase }: TransferFundsRequest @@ -15,5 +13,8 @@ export const transferFunds = ( ...config, }, {}, - { passphrase, addresses: targetWalletAddresses } + { + passphrase, + addresses: targetWalletAddresses, + } ); diff --git a/source/renderer/app/api/wallets/requests/transferFundsCalculateFee.ts b/source/renderer/app/api/wallets/requests/transferFundsCalculateFee.ts index 143eabb7cd..ab81dc1cd7 100644 --- a/source/renderer/app/api/wallets/requests/transferFundsCalculateFee.ts +++ b/source/renderer/app/api/wallets/requests/transferFundsCalculateFee.ts @@ -1,4 +1,3 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { TransferFundsCalculateFeeRequest, @@ -6,7 +5,6 @@ import type { } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const transferFundsCalculateFee = ( config: RequestConfig, { sourceWalletId }: TransferFundsCalculateFeeRequest diff --git a/source/renderer/app/api/wallets/requests/updateByronSpendingPassword.ts b/source/renderer/app/api/wallets/requests/updateByronSpendingPassword.ts index 306a940429..f5786b7264 100644 --- a/source/renderer/app/api/wallets/requests/updateByronSpendingPassword.ts +++ b/source/renderer/app/api/wallets/requests/updateByronSpendingPassword.ts @@ -1,9 +1,7 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const updateByronSpendingPassword = ( config: RequestConfig, { @@ -11,9 +9,9 @@ export const updateByronSpendingPassword = ( oldPassword, newPassword, }: { - walletId: string, - oldPassword?: string, - newPassword: string, + walletId: string; + oldPassword?: string; + newPassword: string; } ): Promise => request( diff --git a/source/renderer/app/api/wallets/requests/updateByronWallet.ts b/source/renderer/app/api/wallets/requests/updateByronWallet.ts index c9bae41b8b..e42e40179f 100644 --- a/source/renderer/app/api/wallets/requests/updateByronWallet.ts +++ b/source/renderer/app/api/wallets/requests/updateByronWallet.ts @@ -1,12 +1,16 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; import { getRawWalletId } from '../../utils'; - export const updateByronWallet = ( config: RequestConfig, - { walletId, name }: { walletId: string, name: string } + { + walletId, + name, + }: { + walletId: string; + name: string; + } ): Promise => request( { @@ -15,5 +19,7 @@ export const updateByronWallet = ( ...config, }, {}, - { name } + { + name, + } ); diff --git a/source/renderer/app/api/wallets/requests/updateSpendingPassword.ts b/source/renderer/app/api/wallets/requests/updateSpendingPassword.ts index d8d20f6908..9103ab1b59 100644 --- a/source/renderer/app/api/wallets/requests/updateSpendingPassword.ts +++ b/source/renderer/app/api/wallets/requests/updateSpendingPassword.ts @@ -1,8 +1,6 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; - export const updateSpendingPassword = ( config: RequestConfig, { @@ -10,9 +8,9 @@ export const updateSpendingPassword = ( oldPassword, newPassword, }: { - walletId: string, - oldPassword: string, - newPassword: string, + walletId: string; + oldPassword: string; + newPassword: string; } ): Promise => request( diff --git a/source/renderer/app/api/wallets/requests/updateWallet.ts b/source/renderer/app/api/wallets/requests/updateWallet.ts index dc6526b688..4b90f51b76 100644 --- a/source/renderer/app/api/wallets/requests/updateWallet.ts +++ b/source/renderer/app/api/wallets/requests/updateWallet.ts @@ -1,11 +1,15 @@ -// @flow import type { RequestConfig } from '../../common/types'; import type { AdaWallet } from '../types'; import { request } from '../../utils/request'; - export const updateWallet = ( config: RequestConfig, - { walletId, name }: { walletId: string, name: string } + { + walletId, + name, + }: { + walletId: string; + name: string; + } ): Promise => request( { @@ -14,5 +18,7 @@ export const updateWallet = ( ...config, }, {}, - { name } + { + name, + } ); diff --git a/source/renderer/app/api/wallets/types.ts b/source/renderer/app/api/wallets/types.ts index 041ccf937a..7a3bc4926e 100644 --- a/source/renderer/app/api/wallets/types.ts +++ b/source/renderer/app/api/wallets/types.ts @@ -1,320 +1,271 @@ -// @flow import BigNumber from 'bignumber.js'; import { WalletUnits } from '../../domains/Wallet'; import type { ExportedByronWallet } from '../../types/walletExportTypes'; import type { Currency, LocalizedCurrency } from '../../types/currencyTypes'; import type { ApiTokens } from '../assets/types'; - export type Block = { - slot_number: number, - epoch_number: number, + slot_number: number; + epoch_number: number; height: { - quantity: number, - unit: 'block', - }, + quantity: number; + unit: 'block'; + }; }; - export type Input = { - address?: string, + address?: string; amount?: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, - id: string, - index: number, + quantity: number; + unit: WalletUnits.LOVELACE; + }; + id: string; + index: number; }; - export type Output = { - address: string, + address: string; amount: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; }; - export type AdaWallet = { - id: string, - address_pool_gap: number, + id: string; + address_pool_gap: number; balance: { - available: WalletBalance, - total: WalletBalance, - reward: WalletBalance, - }, + available: WalletBalance; + total: WalletBalance; + reward: WalletBalance; + }; assets: { - available: ApiTokens, - total: ApiTokens, - }, + available: ApiTokens; + total: ApiTokens; + }; delegation: { - active: WalletDelegation, - next?: WalletNextDelegation, - }, - name: string, + active: WalletDelegation; + next?: WalletNextDelegation; + }; + name: string; passphrase?: { - last_updated_at: string, - }, - state: WalletSyncState, - discovery: Discovery, - isLegacy: boolean, - isHardwareWallet?: boolean, -}; - + last_updated_at: string; + }; + state: WalletSyncState; + discovery: Discovery; + isLegacy: boolean; + isHardwareWallet?: boolean; +}; export type LegacyAdaWallet = { - id: string, + id: string; balance: { - available: WalletBalance, - total: WalletBalance, - reward: WalletBalance, // Unused prop - hack to keep flow happy - }, - name: string, + available: WalletBalance; + total: WalletBalance; + reward: WalletBalance; // Unused prop - hack to keep flow happy + }; + name: string; passphrase?: { - last_updated_at: string, - }, - state: WalletSyncState, - discovery: Discovery, - tip: Block, + last_updated_at: string; + }; + state: WalletSyncState; + discovery: Discovery; + tip: Block; }; - export type LegacyAdaWallets = Array; - export type WalletUnit = WalletUnits.LOVELACE | WalletUnits.ADA; - export type AdaWallets = Array; - export type SyncStateStatus = | 'ready' | 'restoring' | 'syncing' | 'not_responding'; - export type Discovery = 'random' | 'sequential'; - export type DelegationStatus = 'delegating' | 'not_delegating'; - export type WalletSyncStateProgress = { - quantity: number, - unit: 'percentage', + quantity: number; + unit: 'percentage'; }; - export type WalletSyncState = { - status: SyncStateStatus, - progress?: WalletSyncStateProgress, + status: SyncStateStatus; + progress?: WalletSyncStateProgress; }; - export type WalletBalance = { - quantity: number, - unit: WalletUnits.LOVELACE | WalletUnits.ADA, + quantity: number; + unit: WalletUnits.LOVELACE | WalletUnits.ADA; }; - export type DelegationStakePool = { - active: WalletDelegation, - next?: WalletNextDelegation, + active: WalletDelegation; + next?: WalletNextDelegation; }; - export type WalletNextDelegationEpoch = { - epoch_number: ?number, - epoch_start_time: ?string, + epoch_number: number | null | undefined; + epoch_start_time: string | null | undefined; }; - export type WalletDelegation = { - status: DelegationStatus, - target?: string, + status: DelegationStatus; + target?: string; }; - export type WalletPendingDelegations = Array; - export type WalletNextDelegation = { - status: DelegationStatus, - target?: string, - changes_at: WalletNextDelegationEpoch, -}; - -export type Histogram = { - [string]: number, + status: DelegationStatus; + target?: string; + changes_at: WalletNextDelegationEpoch; }; - +export type Histogram = Record; export type WalletUtxoTotal = { - quantity: number, - unit: WalletUnits.LOVELACE, + quantity: number; + unit: WalletUnits.LOVELACE; }; - export type WalletUtxos = { - total: WalletUtxoTotal, - scale: 'log10', - distribution: { - [string]: number, - }, + total: WalletUtxoTotal; + scale: 'log10'; + distribution: Record; }; - export type WalletInitData = { - name: string, - mnemonic_sentence: Array, // [ 15 .. 24 ] words - mnemonic_second_factor?: Array, // [ 9 .. 12 ] words - passphrase: string, - address_pool_gap?: number, // 20 + name: string; + mnemonic_sentence: Array; + // [ 15 .. 24 ] words + mnemonic_second_factor?: Array; + // [ 9 .. 12 ] words + passphrase: string; + address_pool_gap?: number; // 20 }; - export type LegacyWalletInitData = { - name: string, - mnemonic_sentence: Array, // [ 12 ] words - passphrase: string, + name: string; + mnemonic_sentence: Array; + // [ 12 ] words + passphrase: string; }; - // req/res Wallet types export type CreateWalletRequest = { - name: string, - mnemonic: Array, - mnemonicPassphrase?: Array, - spendingPassword: string, - addressPoolGap?: number, + name: string; + mnemonic: Array; + mnemonicPassphrase?: Array; + spendingPassword: string; + addressPoolGap?: number; }; - export type UpdateSpendingPasswordRequest = { - walletId: string, - oldPassword: string, - newPassword: string, - isLegacy: boolean, + walletId: string; + oldPassword: string; + newPassword: string; + isLegacy: boolean; }; - export type DeleteWalletRequest = { - walletId: string, - isLegacy: boolean, - isHardwareWallet?: boolean, + walletId: string; + isLegacy: boolean; + isHardwareWallet?: boolean; }; - export type GetWalletUtxosRequest = { - walletId: string, - isLegacy: boolean, + walletId: string; + isLegacy: boolean; }; - export type RestoreWalletRequest = { - recoveryPhrase: Array, - walletName: string, - spendingPassword: string, + recoveryPhrase: Array; + walletName: string; + spendingPassword: string; }; - export type RestoreLegacyWalletRequest = { - recoveryPhrase: Array, - walletName: string, - spendingPassword: string, + recoveryPhrase: Array; + walletName: string; + spendingPassword: string; }; - export type RestoreExportedByronWalletRequest = ExportedByronWallet; - export type UpdateWalletRequest = { - walletId: string, - name: string, - isLegacy: boolean, - isHardwareWallet?: boolean, + walletId: string; + name: string; + isLegacy: boolean; + isHardwareWallet?: boolean; }; - export type ImportWalletFromKeyRequest = { - filePath: string, - spendingPassword: string, + filePath: string; + spendingPassword: string; }; - export type ImportWalletFromFileRequest = { - filePath: string, - spendingPassword: string, - walletName: ?string, + filePath: string; + spendingPassword: string; + walletName: string | null | undefined; }; - export type ExportWalletToFileRequest = { - walletId: string, - filePath: string, - password: string, + walletId: string; + filePath: string; + password: string; }; - export type GetWalletCertificateRecoveryPhraseRequest = { - passphrase: string, - input: string, + passphrase: string; + input: string; }; - export type GetWalletRecoveryPhraseFromCertificateRequest = { - passphrase: string, - scrambledInput: string, + passphrase: string; + scrambledInput: string; }; - export type GetWalletRequest = { - walletId: string, - isLegacy: boolean, + walletId: string; + isLegacy: boolean; }; - export type GetWalletPublicKeyRequest = { - walletId: string, - role: string, - index: string, + walletId: string; + role: string; + index: string; }; - export type GetAccountPublicKeyRequest = { - walletId: string, - index: string, - passphrase: string, - extended: boolean, + walletId: string; + index: string; + passphrase: string; + extended: boolean; }; - export type TransferFundsCalculateFeeRequest = { - sourceWalletId: string, + sourceWalletId: string; }; - export type TransferFundsCalculateFeeApiResponse = { migration_cost: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; leftovers: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; }; - export type TransferFundsCalculateFeeResponse = { - fee: BigNumber, - leftovers: BigNumber, + fee: BigNumber; + leftovers: BigNumber; }; - export type TransferFundsRequest = { - sourceWalletId: string, - targetWalletAddresses: ?Array, - passphrase: string, + sourceWalletId: string; + targetWalletAddresses: Array | null | undefined; + passphrase: string; }; - export type TransferFundsResponse = { - id: string, + id: string; amount: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; fee: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; deposit: { - quantity: number, - unit: WalletUnits.LOVELACE, - }, + quantity: number; + unit: WalletUnits.LOVELACE; + }; inserted_at?: { - time: Date, - block: Block, - }, + time: Date; + block: Block; + }; pending_since?: { - time: Date, - block: Block, - }, + time: Date; + block: Block; + }; depth: { - quantity: number, - unit: 'block', - }, - direction: 'incoming' | 'outgoing', - inputs: Array, - outputs: Array, - status: 'pending' | 'in_ledger', -}; - + quantity: number; + unit: 'block'; + }; + direction: 'incoming' | 'outgoing'; + inputs: Array; + outputs: Array; + status: 'pending' | 'in_ledger'; +}; export type CreateHardwareWalletRequest = { - walletName: string, - accountPublicKey: string, + walletName: string; + accountPublicKey: string; }; - export type GetCurrencyListResponse = Array; export type GetCurrencyRateRequest = LocalizedCurrency; export type GetCurrencyRateResponse = number; diff --git a/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx b/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx index 844d9d2606..5e66475f55 100644 --- a/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx +++ b/source/renderer/app/components/appUpdate/AppUpdateOverlay.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import SVGInline from 'react-svg-inline'; @@ -19,7 +18,6 @@ import DialogCloseButton from '../widgets/DialogCloseButton'; import ProgressBarLarge from '../widgets/ProgressBarLarge'; import externalLinkIcon from '../../assets/images/link-ic.inline.svg'; import closeCrossThin from '../../assets/images/close-cross-thin.inline.svg'; - const messages = defineMessages({ title: { id: 'appUpdate.overlay.title', @@ -114,30 +112,28 @@ const messages = defineMessages({ '"manualUpdateButtonUrl" for the App Update Overlay on Testnet', }, }); - type Props = { - update: News.News, - onClose: Function, - downloadTimeLeft: string, - totalDownloaded: string, - totalDownloadSize: string, - availableAppVersion: string, - currentAppVersion: string, - downloadProgress: number, - isUpdateDownloaded: boolean, - isAutomaticUpdateFailed: boolean, - isWaitingToQuitDaedalus: boolean, - onInstallUpdate: Function, - onExternalLinkClick: Function, - onPostponeUpdate: Function, - installationProgress: number, - isLinux: boolean, - isFlight: boolean, - isTestnet: boolean, + update: News.News; + onClose: (...args: Array) => any; + downloadTimeLeft: string; + totalDownloaded: string; + totalDownloadSize: string; + availableAppVersion: string; + currentAppVersion: string; + downloadProgress: number; + isUpdateDownloaded: boolean; + isAutomaticUpdateFailed: boolean; + isWaitingToQuitDaedalus: boolean; + onInstallUpdate: (...args: Array) => any; + onExternalLinkClick: (...args: Array) => any; + onPostponeUpdate: (...args: Array) => any; + installationProgress: number; + isLinux: boolean; + isFlight: boolean; + isTestnet: boolean; }; - type State = { - areTermsOfUseAccepted: boolean, + areTermsOfUseAccepted: boolean; }; @observer @@ -145,19 +141,18 @@ class AppUpdateOverlay extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { areTermsOfUseAccepted: this.props.isLinux, }; - toggleAcceptance = () => { this.setState((prevState) => ({ areTermsOfUseAccepted: !prevState.areTermsOfUseAccepted, })); }; - contentClickHandler(event: SyntheticMouseEvent) { + contentClickHandler(event: React.MouseEvent) { const linkUrl = get(event, ['target', 'href']); + if (linkUrl) { event.preventDefault(); event.stopPropagation(); @@ -190,7 +185,6 @@ class AppUpdateOverlay extends Component { ); }; - openInstallerAction = () => { const { intl } = this.context; const { @@ -273,7 +267,6 @@ class AppUpdateOverlay extends Component { ); }; - manualUpdateAction = () => { const { intl } = this.context; const { @@ -348,7 +341,6 @@ class AppUpdateOverlay extends Component { if (isAutomaticUpdateFailed) actions = this.manualUpdateAction(); else if (!isUpdateDownloaded) actions = this.progressActions(); else actions = this.openInstallerAction(); - return (
{ } } -export default AppUpdateOverlay \ No newline at end of file +export default AppUpdateOverlay; diff --git a/source/renderer/app/components/assets/Asset.tsx b/source/renderer/app/components/assets/Asset.tsx index 3d060a2f5f..1a36baed5d 100644 --- a/source/renderer/app/components/assets/Asset.tsx +++ b/source/renderer/app/components/assets/Asset.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import SVGInline from 'react-svg-inline'; import classnames from 'classnames'; @@ -8,12 +7,10 @@ import { observer } from 'mobx-react'; import styles from './Asset.scss'; import { ellipsis } from '../../utils/strings'; import AssetContent from './AssetContent'; - import settingsIcon from '../../assets/images/asset-token-settings-ic.inline.svg'; import warningIcon from '../../assets/images/asset-token-warning-ic.inline.svg'; import { ASSET_TOKEN_DISPLAY_DELAY } from '../../config/timingConfig'; import type { Asset as AssetProps } from '../../api/assets/types'; - const messages = defineMessages({ fingerprintItem: { id: 'assets.assetToken.param.fingerprint', @@ -69,27 +66,25 @@ const messages = defineMessages({ description: 'Asset settings recommended pop over content', }, }); - type Props = { - asset: AssetProps, - small?: boolean, - hidePopOver?: boolean, - onCopyAssetParam?: Function, - onClickSettings?: Function, - assetSettingsDialogWasOpened?: ?boolean, - anyAssetWasHovered?: ?boolean, - fullFingerprint?: ?boolean, - hasWarning?: ?boolean, - className?: string, + asset: AssetProps; + small?: boolean; + hidePopOver?: boolean; + onCopyAssetParam?: (...args: Array) => any; + onClickSettings?: (...args: Array) => any; + assetSettingsDialogWasOpened?: boolean | null | undefined; + anyAssetWasHovered?: boolean | null | undefined; + fullFingerprint?: boolean | null | undefined; + hasWarning?: boolean | null | undefined; + className?: string; // In case it's not possible to calculate the container width // this props defines after how many characters the `metadata.name` text will cut off - metadataNameChars?: number, - hasError?: boolean, + metadataNameChars?: number; + hasError?: boolean; }; - type State = { - isPillPopOverVisible: boolean, - isHoveringSettingsIcon: boolean, + isPillPopOverVisible: boolean; + isHoveringSettingsIcon: boolean; }; @observer @@ -97,15 +92,12 @@ class Asset extends Component { static contextTypes = { intl: intlShape.isRequired, }; - copyNotificationTimeout: TimeoutID; displayDelayTimeout: TimeoutID; - state = { isPillPopOverVisible: false, isHoveringSettingsIcon: false, }; - // We need to track the mounted state in order to avoid calling // setState promise handling code after the component was already unmounted: // Read more: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html @@ -129,7 +121,6 @@ class Asset extends Component { } }, ASSET_TOKEN_DISPLAY_DELAY); }; - handleHidePillPopOver = () => { clearTimeout(this.displayDelayTimeout); this.displayDelayTimeout = setTimeout(() => { @@ -140,13 +131,11 @@ class Asset extends Component { } }, ASSET_TOKEN_DISPLAY_DELAY); }; - handleSettingsMouseEnter = () => { this.setState({ isHoveringSettingsIcon: true, }); }; - handleSettingsMouseLeave = () => { this.setState({ isHoveringSettingsIcon: false, @@ -156,15 +145,18 @@ class Asset extends Component { get isSettingsPopOverVisible() { const { assetSettingsDialogWasOpened, anyAssetWasHovered } = this.props; const { isHoveringSettingsIcon } = this.state; + if (isHoveringSettingsIcon) { return true; } + if ( assetSettingsDialogWasOpened === false && anyAssetWasHovered === false ) { return true; } + return false; } @@ -186,12 +178,14 @@ class Asset extends Component { ]); const [startCharAmount, endCharAmoout] = small ? [9, 4] : [12, 12]; let warningPopOverMessage; + if (hasWarning) { warningPopOverMessage = typeof decimals === 'number' ? messages.settingsWarningPopOverNotUsing : messages.settingsWarningPopOverAvailable; } + return (
@@ -268,7 +262,6 @@ class Asset extends Component {
); }; - renderSettingsContent = () => { const { intl } = this.context; const { asset, onClickSettings, hasWarning } = this.props; @@ -278,15 +271,19 @@ class Asset extends Component { handleSettingsMouseEnter, handleSettingsMouseLeave, } = this; + const onClickSettingsBind = () => onClickSettings && onClickSettings(asset); + const { decimals, recommendedDecimals } = asset; let warningPopOverMessage; + if (hasWarning) { warningPopOverMessage = typeof decimals === 'number' ? messages.settingsWarningPopOverNotUsing : messages.settingsWarningPopOverAvailable; } + return (
); } + return ( - + className="walletName" + {...walletNameField.bind()} + error={walletNameField.error} + skin={InputSkin} + />
-
- - -

- {intl.formatMessage(globalMessages.passwordInstructions)} -

-
-
+
+ + +

+ {intl.formatMessage(globalMessages.passwordInstructions)} +

+
+
*/} {error &&

{intl.formatMessage(error)}

} @@ -269,4 +260,4 @@ class WalletFileImportDialog extends Component { } } -export default WalletFileImportDialog \ No newline at end of file +export default WalletFileImportDialog; diff --git a/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx b/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx index ff06ca47b7..e372305e6a 100644 --- a/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx +++ b/source/renderer/app/components/wallet/layouts/WalletWithNavigation.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import type { Node } from 'react'; import classnames from 'classnames'; @@ -7,21 +6,20 @@ import WalletNavigation from '../navigation/WalletNavigation'; import styles from './WalletWithNavigation.scss'; import NotResponding from '../not-responding/NotResponding'; import SetWalletPassword from '../settings/SetWalletPassword'; - type Props = { - children?: Node, - activeItem: string, - hasNotification?: boolean, - hasPassword: boolean, - isActiveScreen: Function, - isLegacy: boolean, - isNotResponding: boolean, - isHardwareWallet: boolean, - isSetWalletPasswordDialogOpen: boolean, - onOpenExternalLink: Function, - onRestartNode: Function, - onSetWalletPassword: Function, - onWalletNavItemClick: Function, + children?: Node; + activeItem: string; + hasNotification?: boolean; + hasPassword: boolean; + isActiveScreen: (...args: Array) => any; + isLegacy: boolean; + isNotResponding: boolean; + isHardwareWallet: boolean; + isSetWalletPasswordDialogOpen: boolean; + onOpenExternalLink: (...args: Array) => any; + onRestartNode: (...args: Array) => any; + onSetWalletPassword: (...args: Array) => any; + onWalletNavItemClick: (...args: Array) => any; }; @observer @@ -42,9 +40,7 @@ class WalletWithNavigation extends Component { onSetWalletPassword, onWalletNavItemClick, } = this.props; - const componentStyles = classnames([styles.component, styles[activeItem]]); - return (
@@ -78,4 +74,4 @@ class WalletWithNavigation extends Component { } } -export default WalletWithNavigation \ No newline at end of file +export default WalletWithNavigation; diff --git a/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx b/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx index 8e0999ebc1..5f878cef4e 100755 --- a/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx +++ b/source/renderer/app/components/wallet/navigation/WalletNavigation.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { includes } from 'lodash'; @@ -12,7 +11,6 @@ import type { NavButtonProps, NavDropdownProps, } from '../../navigation/Navigation'; - const messages = defineMessages({ summary: { id: 'wallet.navigation.summary', @@ -58,13 +56,12 @@ const messages = defineMessages({ description: 'Label for the "More" nav button in the wallet navigation.', }, }); - type Props = { - activeItem: string, - isActiveNavItem: Function, - isLegacy: boolean, - onNavItemClick: Function, - hasNotification?: boolean, + activeItem: string; + isActiveNavItem: (...args: Array) => any; + isLegacy: boolean; + onNavItemClick: (...args: Array) => any; + hasNotification?: boolean; }; @observer @@ -135,4 +132,4 @@ class WalletNavigation extends Component { } } -export default WalletNavigation \ No newline at end of file +export default WalletNavigation; diff --git a/source/renderer/app/components/wallet/not-responding/NotResponding.tsx b/source/renderer/app/components/wallet/not-responding/NotResponding.tsx index 1a6ef1c7b2..09e9540d4d 100644 --- a/source/renderer/app/components/wallet/not-responding/NotResponding.tsx +++ b/source/renderer/app/components/wallet/not-responding/NotResponding.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import SVGInline from 'react-svg-inline'; import { defineMessages, intlShape, FormattedHTMLMessage } from 'react-intl'; @@ -8,13 +7,11 @@ import { Link } from 'react-polymorph/lib/components/Link'; import { LinkSkin } from 'react-polymorph/lib/skins/simple/LinkSkin'; import icon from '../../../assets/images/not-responding.inline.svg'; import styles from './NotResponding.scss'; - type Props = { - walletName: string, - onRestartNode: Function, - onOpenExternalLink: Function, + walletName: string; + onRestartNode: (...args: Array) => any; + onOpenExternalLink: (...args: Array) => any; }; - const messages = defineMessages({ title: { id: 'wallet.notResponding.title', @@ -43,7 +40,6 @@ const messages = defineMessages({ description: 'Submit Support Request Url on the NotResponding dialog', }, }); - export default class NotResponding extends Component { static contextTypes = { intl: intlShape.isRequired, diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx index 59dc07943d..bf481566b1 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/CompletionDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import QRCode from 'qrcode.react'; @@ -14,7 +13,6 @@ import styles from './CompletionDialog.scss'; import iconCopy from '../../../assets/images/clipboard-ic.inline.svg'; import InlineNotification from '../../notifications/InlineNotification'; import { DEVELOPMENT } from '../../../../../common/types/environment.types'; - const messages = defineMessages({ headline: { id: 'paper.wallet.create.certificate.completion.dialog.headline', @@ -68,17 +66,15 @@ const messages = defineMessages({ '"Paper wallet create certificate completion dialog" finish button label.', }, }); - type Props = { - walletCertificateAddress: string, - onClose: Function, - onOpenExternalLink: Function, - copyAddressNotificationDuration: number, - network: string, + walletCertificateAddress: string; + onClose: (...args: Array) => any; + onOpenExternalLink: (...args: Array) => any; + copyAddressNotificationDuration: number; + network: string; }; - type State = { - showCopyNotification: boolean, + showCopyNotification: boolean; }; @observer @@ -86,25 +82,25 @@ class CompletionDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - static defaultProps = { network: DEVELOPMENT, }; - state = { showCopyNotification: false, }; - copyNotificationTimeout: TimeoutID; - onShowCopyNotification = () => { const { copyAddressNotificationDuration } = this.props; const timeInSeconds = copyAddressNotificationDuration * 1000; clearTimeout(this.copyNotificationTimeout); - - this.setState({ showCopyNotification: true }); + this.setState({ + showCopyNotification: true, + }); this.copyNotificationTimeout = setTimeout( - () => this.setState({ showCopyNotification: false }), + () => + this.setState({ + showCopyNotification: false, + }), timeInSeconds ); }; @@ -119,7 +115,6 @@ class CompletionDialog extends Component { } = this.props; const { showCopyNotification } = this.state; const dialogClasses = classnames([styles.component, 'completionDialog']); - const actions = [ { className: 'finishButton', @@ -131,7 +126,6 @@ class CompletionDialog extends Component { const cardanoExplorerLink = `${getNetworkExplorerUrl( network )}/address/${walletCertificateAddress}`; - // Get QRCode color value from active theme's CSS variable const qrCodeBackgroundColor = document.documentElement ? document.documentElement.style.getPropertyValue( @@ -143,7 +137,6 @@ class CompletionDialog extends Component { '--theme-receive-qr-code-foreground-color' ) : '#000'; - return ( { } } -export default CompletionDialog \ No newline at end of file +export default CompletionDialog; diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx index 5a9f8f49cb..01c791b2d4 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/ConfirmationDialog.tsx @@ -1,11 +1,9 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; import { defineMessages, intlShape } from 'react-intl'; import Dialog from '../../widgets/Dialog'; import styles from './ConfirmationDialog.scss'; - const messages = defineMessages({ headline: { id: 'paper.wallet.create.certificate.confirmation.dialog.headline', @@ -40,10 +38,9 @@ const messages = defineMessages({ '"Abort" button label for the paper wallet certificate cancellation confirmation dialog.', }, }); - type Props = { - onConfirm: Function, - onCancel: Function, + onConfirm: (...args: Array) => any; + onCancel: (...args: Array) => any; }; @observer @@ -55,15 +52,12 @@ class ConfirmationDialog extends Component { render() { const { intl } = this.context; const { onConfirm, onCancel } = this.props; - const dialogClasses = classnames([styles.component, 'ConfirmDialog']); - const confirmButtonClasses = classnames([ 'confirmButton', 'attention', styles.confirmButton, ]); - const actions = [ { className: 'cancelButton', @@ -77,7 +71,6 @@ class ConfirmationDialog extends Component { onClick: onConfirm, }, ]; - return ( { } } -export default ConfirmationDialog \ No newline at end of file +export default ConfirmationDialog; diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx index d67791a087..44069bf502 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/InstructionsDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -17,7 +16,6 @@ import { WALLET_RECOVERY_PHRASE_WORD_COUNT, } from '../../../config/cryptoConfig'; import { DEVELOPMENT } from '../../../../../common/types/environment.types'; - const messages = defineMessages({ headline: { id: 'paper.wallet.create.certificate.instructions.dialog.headline', @@ -106,14 +104,13 @@ const messages = defineMessages({ '"Wallet certificate create instructions dialog" print button label.', }, }); - type Props = { - inProgress: boolean, - network: string, - onClose: Function, - onOpenExternalLink: Function, - onPrint: Function, - error?: ?LocalizableError, + inProgress: boolean; + network: string; + onClose: (...args: Array) => any; + onOpenExternalLink: (...args: Array) => any; + onPrint: (...args: Array) => any; + error?: LocalizableError | null | undefined; }; @observer @@ -121,14 +118,15 @@ class InstructionsDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - static defaultProps = { network: DEVELOPMENT, }; componentDidUpdate(prevProps: Props) { if (!prevProps.error && this.props.error) { - handleFormErrors('.InstructionsDialog_error', { focusElement: true }); + handleFormErrors('.InstructionsDialog_error', { + focusElement: true, + }); } } @@ -143,12 +141,10 @@ class InstructionsDialog extends Component { error, } = this.props; const dialogClasses = classnames([styles.component, 'instructionsDialog']); - const printButtonClasses = classnames([ 'printButton', inProgress ? styles.submitButtonSpinning : null, ]); - const actions = [ { className: printButtonClasses, @@ -169,7 +165,6 @@ class InstructionsDialog extends Component { skin={LinkSkin} /> ); - return ( {
  • @@ -229,4 +226,4 @@ class InstructionsDialog extends Component { } } -export default InstructionsDialog \ No newline at end of file +export default InstructionsDialog; diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx index 34cc9a9b32..6e48688a53 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/PrintDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -13,7 +12,6 @@ import { PAPER_WALLET_PRINTED_WORDS_COUNT, PAPER_WALLET_WRITTEN_WORDS_COUNT, } from '../../../config/cryptoConfig'; - const messages = defineMessages({ headline: { id: 'paper.wallet.create.certificate.print.dialog.headline', @@ -58,16 +56,14 @@ const messages = defineMessages({ '"Paper wallet create certificate print dialog" QR scannable confirmation.', }, }); - type State = { - isPrintedCorrectly: boolean, - isReadable: boolean, - isScannable: boolean, + isPrintedCorrectly: boolean; + isReadable: boolean; + isScannable: boolean; }; - type Props = { - onContinue: Function, - onClose: Function, + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; }; @observer @@ -75,51 +71,45 @@ class PrintDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { isPrintedCorrectly: false, isReadable: false, isScannable: false, }; - onConfirmCorrectPrinting = () => { this.setState((prevState) => ({ isPrintedCorrectly: !prevState.isPrintedCorrectly, })); }; - onConfirmReadable = () => { - this.setState((prevState) => ({ isReadable: !prevState.isReadable })); + this.setState((prevState) => ({ + isReadable: !prevState.isReadable, + })); }; - onConfirmScannable = () => { - this.setState((prevState) => ({ isScannable: !prevState.isScannable })); + this.setState((prevState) => ({ + isScannable: !prevState.isScannable, + })); }; render() { const { intl } = this.context; const { onContinue, onClose } = this.props; const { isPrintedCorrectly, isReadable, isScannable } = this.state; - const dialogClasses = classnames([styles.component, 'printDialog']); - const certificatePrintedCheckboxClasses = classnames([ 'printedCheckbox', styles.checkbox, ]); - const certificateReadableCheckboxClasses = classnames([ 'readableCheckbox', styles.checkbox, ]); - const qrScannableCheckboxClasses = classnames([ 'scannableCheckbox', styles.checkbox, ]); - const canSubmit = isPrintedCorrectly && isReadable && isScannable; - const actions = [ { className: 'continueButton', @@ -129,7 +119,6 @@ class PrintDialog extends Component { onClick: onContinue, }, ]; - return ( { } } -export default PrintDialog \ No newline at end of file +export default PrintDialog; diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx index 85e46e4c3e..2ac3627e24 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/SecuringPasswordDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -11,7 +10,6 @@ import paperWalletImage from '../../../assets/images/paper-wallet-certificate/ce import globalMessages from '../../../i18n/global-messages'; import styles from './SecuringPasswordDialog.scss'; import { PAPER_WALLET_WRITTEN_WORDS_COUNT } from '../../../config/cryptoConfig'; - const messages = defineMessages({ headline: { id: 'paper.wallet.create.certificate.securingPassword.dialog.headline', @@ -42,15 +40,13 @@ const messages = defineMessages({ '"Paper wallet create certificate securing password dialog" secure password confirmation.', }, }); - type State = { - securePasswordConfirmed: boolean, + securePasswordConfirmed: boolean; }; - type Props = { - additionalMnemonics: string, - onContinue: Function, - onClose: Function, + additionalMnemonics: string; + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; }; @observer @@ -58,11 +54,9 @@ class SecuringPasswordDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { securePasswordConfirmed: false, }; - onSecurePasswordConfirmation = () => { this.setState((prevState) => ({ securePasswordConfirmed: !prevState.securePasswordConfirmed, @@ -73,12 +67,10 @@ class SecuringPasswordDialog extends Component { const { intl } = this.context; const { securePasswordConfirmed } = this.state; const { additionalMnemonics, onContinue, onClose } = this.props; - const dialogClasses = classnames([ styles.component, 'SecuringPasswordDialog', ]); - const actions = [ { className: 'continueButton', @@ -88,7 +80,6 @@ class SecuringPasswordDialog extends Component { onClick: onContinue, }, ]; - return ( { } } -export default SecuringPasswordDialog \ No newline at end of file +export default SecuringPasswordDialog; diff --git a/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx b/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx index f57ffa25cb..a8bc9fb80f 100644 --- a/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx +++ b/source/renderer/app/components/wallet/paper-wallet-certificate/VerificationDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { join } from 'lodash'; import { observer } from 'mobx-react'; @@ -21,7 +20,6 @@ import { PAPER_WALLET_WRITTEN_WORDS_COUNT, } from '../../../config/cryptoConfig'; import { FORM_VALIDATION_DEBOUNCE_WAIT } from '../../../config/timingConfig'; - const messages = defineMessages({ headline: { id: 'paper.wallet.create.certificate.verification.dialog.headline', @@ -87,19 +85,17 @@ const messages = defineMessages({ '"Paper wallet create certificate verification dialog" recovering understandance confirmation.', }, }); - type State = { - storingConfirmed: boolean, - recoveringConfirmed: boolean, - isRecoveryPhraseValid: boolean, + storingConfirmed: boolean; + recoveringConfirmed: boolean; + isRecoveryPhraseValid: boolean; }; - type Props = { - walletCertificateRecoveryPhrase: string, - additionalMnemonicWords: string, - suggestedMnemonics: Array, - onContinue: Function, - onClose: Function, + walletCertificateRecoveryPhrase: string; + additionalMnemonicWords: string; + suggestedMnemonics: Array; + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; }; @observer @@ -107,27 +103,22 @@ class VerificationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { storingConfirmed: false, recoveringConfirmed: false, isRecoveryPhraseValid: false, }; - onStoringConfirmation = () => { this.setState((prevState) => ({ storingConfirmed: !prevState.storingConfirmed, })); }; - onRecoveringConfirmation = () => { this.setState((prevState) => ({ recoveringConfirmed: !prevState.recoveringConfirmed, })); }; - recoveryPhraseAutocomplete: Autocomplete; - form = new ReactToolboxMobxForm( { fields: { @@ -146,6 +137,7 @@ class VerificationDialog extends Component { } = this.props; const { storingConfirmed, recoveringConfirmed } = this.state; const enteredWordsArray = field.value; + if ( enteredWordsArray.length < PAPER_WALLET_RECOVERY_PHRASE_WORD_COUNT @@ -158,6 +150,7 @@ class VerificationDialog extends Component { }), ]; } + const fullRecoveryPhrase = `${walletCertificateRecoveryPhrase} ${additionalMnemonicWords}`; const enteredRecoveryPhrase = join(enteredWordsArray, ' '); const isRecoveryPhraseValid = @@ -182,35 +175,35 @@ class VerificationDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { const { recoveryPhrase } = form.values(); - this.props.onContinue({ recoveryPhrase }); + this.props.onContinue({ + recoveryPhrase, + }); }, onError: () => {}, }); }; - resetForm = () => { const { form } = this; const autocomplete = this.recoveryPhraseAutocomplete; - // Cancel all debounced field validations form.each((field) => { field.debouncedValidation.cancel(); }); form.reset(); form.showErrors(false); - // Autocomplete has to be reset manually autocomplete.clear(); @@ -233,21 +226,16 @@ class VerificationDialog extends Component { recoveringConfirmed, isRecoveryPhraseValid, } = this.state; - const recoveryPhraseField = form.$('recoveryPhrase'); - const dialogClasses = classnames([styles.dialog, 'verificationDialog']); - const storingUnderstandanceCheckboxClasses = classnames([ styles.checkbox, 'storingUnderstandance', ]); - const recoveringUnderstandanceCheckboxClasses = classnames([ styles.checkbox, 'recoveringUnderstandance', ]); - const actions = [ { className: 'clearButton', @@ -262,7 +250,6 @@ class VerificationDialog extends Component { onClick: this.submit.bind(this), }, ]; - return ( { } } -export default VerificationDialog \ No newline at end of file +export default VerificationDialog; diff --git a/source/renderer/app/components/wallet/receive/AddressActions.tsx b/source/renderer/app/components/wallet/receive/AddressActions.tsx index ed24daa511..e2f02e5173 100644 --- a/source/renderer/app/components/wallet/receive/AddressActions.tsx +++ b/source/renderer/app/components/wallet/receive/AddressActions.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -9,7 +8,6 @@ import styles from './AddressActions.scss'; import iconQR from '../../../assets/images/qr-code.inline.svg'; import iconCopy from '../../../assets/images/clipboard-ic.inline.svg'; import WalletAddress from '../../../domains/WalletAddress'; - const messages = defineMessages({ instructionsTitle: { id: 'wallet.receive.page.instructions.instructionsTitle', @@ -44,12 +42,11 @@ const messages = defineMessages({ description: 'Label for "Copy address" link on the wallet "Receive page"', }, }); - type Props = { - address: WalletAddress, - onShareAddress: Function, - onCopyAddress: Function, - type?: 'share' | 'copy', + address: WalletAddress; + onShareAddress: (...args: Array) => any; + onCopyAddress: (...args: Array) => any; + type?: 'share' | 'copy'; }; @observer @@ -60,9 +57,8 @@ class AddressActions extends Component { static contextTypes = { intl: intlShape.isRequired, }; - - addressElement: ?HTMLElement; - addressContainerElement: ?HTMLElement; + addressElement: HTMLElement | null | undefined; + addressContainerElement: HTMLElement | null | undefined; render() { const { intl } = this.context; @@ -106,4 +102,4 @@ class AddressActions extends Component { } } -export default AddressActions \ No newline at end of file +export default AddressActions; diff --git a/source/renderer/app/components/wallet/receive/AddressRandom.tsx b/source/renderer/app/components/wallet/receive/AddressRandom.tsx index a1768ad412..87573965a7 100644 --- a/source/renderer/app/components/wallet/receive/AddressRandom.tsx +++ b/source/renderer/app/components/wallet/receive/AddressRandom.tsx @@ -1,16 +1,14 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; import AddressActions from './AddressActions'; import styles from './AddressRandom.scss'; import WalletAddress from '../../../domains/WalletAddress'; - type Props = { - address: WalletAddress, - index: number, - onCopyAddress: Function, - onShareAddress: Function, + address: WalletAddress; + index: number; + onCopyAddress: (...args: Array) => any; + onShareAddress: (...args: Array) => any; }; @observer @@ -38,4 +36,4 @@ class AddressRandom extends Component { } } -export default AddressRandom \ No newline at end of file +export default AddressRandom; diff --git a/source/renderer/app/components/wallet/receive/AddressSequential.tsx b/source/renderer/app/components/wallet/receive/AddressSequential.tsx index b1e134fc1b..983c0b043d 100644 --- a/source/renderer/app/components/wallet/receive/AddressSequential.tsx +++ b/source/renderer/app/components/wallet/receive/AddressSequential.tsx @@ -1,24 +1,22 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; import AddressActions from './AddressActions'; import styles from './AddressSequential.scss'; import WalletAddress from '../../../domains/WalletAddress'; - type Props = { - address: WalletAddress, - onShareAddress: Function, - onCopyAddress: Function, - shouldRegisterAddressElement: boolean, - onRegisterHTMLElements: Function, - addressSlice: number, + address: WalletAddress; + onShareAddress: (...args: Array) => any; + onCopyAddress: (...args: Array) => any; + shouldRegisterAddressElement: boolean; + onRegisterHTMLElements: (...args: Array) => any; + addressSlice: number; }; @observer class AddressSequential extends Component { - addressElement: ?HTMLElement; - addressContainerElement: ?HTMLElement; + addressElement: HTMLElement | null | undefined; + addressContainerElement: HTMLElement | null | undefined; componentDidMount() { if (this.props.shouldRegisterAddressElement) { @@ -28,6 +26,7 @@ class AddressSequential extends Component { ); } } + get rawAddress() { return this.props.address.id; } @@ -92,4 +91,4 @@ class AddressSequential extends Component { } } -export default AddressSequential \ No newline at end of file +export default AddressSequential; diff --git a/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx b/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx index 2926c8e874..e3621914c4 100644 --- a/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx +++ b/source/renderer/app/components/wallet/receive/VirtualAddressesList.tsx @@ -1,14 +1,12 @@ -// @flow import React, { Component } from 'react'; import { throttle } from 'lodash'; import { observer } from 'mobx-react'; import { AutoSizer, List } from 'react-virtualized'; import WalletAddress from '../../../domains/WalletAddress'; import styles from './VirtualAddressesList.scss'; - type Props = { - rows: Array, - renderRow: Function, + rows: Array; + renderRow: (...args: Array) => any; }; /** @@ -21,7 +19,6 @@ type Props = { */ const BREAKPOINT_1_LINE = 1108; const BREAKPOINT_2_LINES = 635; - const ADDRESS_LINE_HEIGHT = 22; const ADDRESS_LINE_PADDING = 21; const ADDRESS_SELECTOR = '.Address'; @@ -54,6 +51,7 @@ class VirtualAddressesList extends Component { const { list, addressHeight } = this; if (!list) return; const firstAddress = document.querySelector(ADDRESS_SELECTOR); + if (firstAddress instanceof HTMLElement) { this.addressHeight = firstAddress.offsetHeight; } else { @@ -64,6 +62,7 @@ class VirtualAddressesList extends Component { // the update and hope that DOM is rendered then (for exact measurements) setTimeout(this.updateRowHeights, 100); } + if (addressHeight !== this.addressHeight) { list.recomputeRowHeights(0); } @@ -76,15 +75,16 @@ class VirtualAddressesList extends Component { this.listWidth = width; this.updateRowHeights(); }; - rowRenderer = ({ - index, // Index of row - key, // Unique key within array of rendered rows + index, + // Index of row + key, + // Unique key within array of rendered rows style, // Style object to be applied to row (to position it); }: { - index: number, - key: string, - style: string, + index: number; + key: string; + style: string; }) => { const { rows, renderRow } = this.props; const address = rows[index]; @@ -112,7 +112,9 @@ class VirtualAddressesList extends Component { rowCount={rows.length} rowHeight={() => this.addressHeight} rowRenderer={this.rowRenderer} - style={{ overflowY: 'scroll' }} + style={{ + overflowY: 'scroll', + }} /> )} @@ -121,4 +123,4 @@ class VirtualAddressesList extends Component { } } -export { VirtualAddressesList } \ No newline at end of file +export { VirtualAddressesList }; diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx b/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx index 0b07755e14..176edbe7e6 100644 --- a/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx +++ b/source/renderer/app/components/wallet/receive/WalletReceiveDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { utils } from '@cardano-foundation/ledgerjs-hw-app-cardano'; @@ -26,10 +25,8 @@ import { HW_SHELLEY_CONFIG } from '../../../config/hardwareWalletsConfig'; import { hardenedPathToDerivationPath } from '../../../utils/hardwareWalletUtils'; import { AddressVerificationCheckStatuses } from '../../../stores/HardwareWalletsStore'; import LoadingSpinner from '../../widgets/LoadingSpinner'; - import type { AddressVerificationCheckStatus } from '../../../stores/HardwareWalletsStore'; import type { HwDeviceStatus } from '../../../domains/Wallet'; - const messages = defineMessages({ inputLabel: { id: 'wallet.receive.dialog.inputLabel', @@ -136,29 +133,26 @@ const messages = defineMessages({ description: 'Invalid address "Warning" description', }, }); - messages.fieldIsRequired = globalMessages.fieldIsRequired; - type Props = { - address: WalletAddress, - isHardwareWallet: boolean, - walletName: string, - hwDeviceStatus: HwDeviceStatus, - isAddressDerived: boolean, - isAddressChecked: boolean, - onCopyAddress: Function, - onDownloadPDF: Function, - onSaveQRCodeImage: Function, - onClose: Function, - onChangeVerificationStatus: Function, - onSupportRequestClick: Function, - isTrezor: boolean, + address: WalletAddress; + isHardwareWallet: boolean; + walletName: string; + hwDeviceStatus: HwDeviceStatus; + isAddressDerived: boolean; + isAddressChecked: boolean; + onCopyAddress: (...args: Array) => any; + onDownloadPDF: (...args: Array) => any; + onSaveQRCodeImage: (...args: Array) => any; + onClose: (...args: Array) => any; + onChangeVerificationStatus: (...args: Array) => any; + onSupportRequestClick: (...args: Array) => any; + isTrezor: boolean; }; - type State = { - selectedVerificationStatus: ?AddressVerificationCheckStatus, - isInvalidAddressConfirmed: boolean, - isReverifying: boolean, + selectedVerificationStatus: AddressVerificationCheckStatus | null | undefined; + isInvalidAddressConfirmed: boolean; + isReverifying: boolean; }; @observer @@ -166,13 +160,11 @@ class WalletReceiveDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { selectedVerificationStatus: null, isInvalidAddressConfirmed: false, isReverifying: false, }; - form = new ReactToolboxMobxForm({ fields: { noteInput: { @@ -182,7 +174,6 @@ class WalletReceiveDialog extends Component { }, }, }); - submit = () => { this.form.submit({ onSuccess: (form) => { @@ -195,11 +186,9 @@ class WalletReceiveDialog extends Component { }, }); }; - handleChange = (field: { value: string }) => { field.value = field.value.replace(/\n/g, ''); }; - constructPaths = (address: WalletAddress) => { const hardenedSpendingPath = utils.str_to_path(address.spendingPath); const derivationSpendingPath = hardenedPathToDerivationPath( @@ -210,15 +199,16 @@ class WalletReceiveDialog extends Component { (constructeSpendingPathChunk, index) => { const isChangeablePart = index >= derivationSpendingPath.constructed.length - 2; + if (isChangeablePart) { return /{constructeSpendingPathChunk}; } + return index === 0 ? constructeSpendingPathChunk : `/${constructeSpendingPathChunk}`; } ); - const derivationStakingPath = hardenedPathToDerivationPath( HW_SHELLEY_CONFIG.DEFAULT_DERIVATION_PATH ); @@ -227,21 +217,21 @@ class WalletReceiveDialog extends Component { (constructeStakingPathChunk, index) => { const isLastIndex = index === derivationStakingPath.constructed.length - 1; + if (isLastIndex) { return /{constructeStakingPathChunk}; } + return index === 0 ? constructeStakingPathChunk : `/${constructeStakingPathChunk}`; } ); - return { stakingPath, spendingPath, }; }; - onChangeVerificationStatus = (status: AddressVerificationCheckStatus) => { this.setState({ selectedVerificationStatus: @@ -251,7 +241,6 @@ class WalletReceiveDialog extends Component { }); this.props.onChangeVerificationStatus(status); }; - handleConfirmInvalidAddress = (isConfirmed: boolean) => { this.setState({ isInvalidAddressConfirmed: isConfirmed, @@ -292,8 +281,8 @@ class WalletReceiveDialog extends Component { ); const isSupportRequestButton = selectedVerificationStatus === AddressVerificationCheckStatuses.INVALID; - let actions; + if (isSupportRequestButton) { const supportRequestLinkUrl = intl.formatMessage( messages.supportRequestLinkUrl @@ -333,9 +322,7 @@ class WalletReceiveDialog extends Component { '--theme-receive-qr-code-foreground-color' ) : '#000'; - const constructedPaths = this.constructPaths(address); - const verificationOptions = [ { status: AddressVerificationCheckStatuses.VALID, @@ -352,12 +339,12 @@ class WalletReceiveDialog extends Component { }), }, ]; - const filteredVerificationOptions = filter( verificationOptions, (option) => { const isInvalidOption = option.status === AddressVerificationCheckStatuses.INVALID; + if ( (!selectedVerificationStatus && (!isInvalidOption || (isInvalidOption && isReverifying))) || @@ -366,10 +353,10 @@ class WalletReceiveDialog extends Component { ) { return option; } + return null; } ); - const showActions = !isHardwareWallet || (isHardwareWallet && @@ -377,12 +364,10 @@ class WalletReceiveDialog extends Component { AddressVerificationCheckStatuses.INVALID || selectedVerificationStatus === AddressVerificationCheckStatuses.VALID)); - const isAddressConfirmed = isAddressChecked && isAddressDerived && selectedVerificationStatus !== null; - return ( {

    @@ -489,7 +476,9 @@ class WalletReceiveDialog extends Component { {

    {intl.formatMessage( messages.invalidAddressWarningDescription, - { deviceType } + { + deviceType, + } )}

  • @@ -528,4 +519,4 @@ class WalletReceiveDialog extends Component { } } -export default WalletReceiveDialog \ No newline at end of file +export default WalletReceiveDialog; diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx b/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx index 0d3d20b412..9c795f7afb 100644 --- a/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx +++ b/source/renderer/app/components/wallet/receive/WalletReceiveRandom.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape, FormattedHTMLMessage } from 'react-intl'; @@ -22,7 +21,6 @@ import { VirtualAddressesList } from './VirtualAddressesList'; import styles from './WalletReceiveRandom.scss'; import AddressRandom from './AddressRandom'; import WalletAddress from '../../../domains/WalletAddress'; - const messages = defineMessages({ walletAddressLabel: { id: 'wallet.receive.page.walletAddressLabel', @@ -66,22 +64,20 @@ const messages = defineMessages({ description: 'Label for "Copy address" link on the wallet "Receive page"', }, }); - messages.fieldIsRequired = globalMessages.fieldIsRequired; - type Props = { - walletAddress: string, - isWalletAddressUsed: boolean, - walletAddresses: Array, - onGenerateAddress: Function, - onShareAddress: Function, - onCopyAddress: Function, - isSidebarExpanded: boolean, - walletHasPassword: boolean, - isSubmitting: boolean, - error?: ?LocalizableError, - showUsed: boolean, - onToggleUsedAddresses: Function, + walletAddress: string; + isWalletAddressUsed: boolean; + walletAddresses: Array; + onGenerateAddress: (...args: Array) => any; + onShareAddress: (...args: Array) => any; + onCopyAddress: (...args: Array) => any; + isSidebarExpanded: boolean; + walletHasPassword: boolean; + isSubmitting: boolean; + error?: LocalizableError | null | undefined; + showUsed: boolean; + onToggleUsedAddresses: (...args: Array) => any; }; @observer @@ -89,14 +85,11 @@ class WalletReceiveRandom extends Component { static contextTypes = { intl: intlShape.isRequired, }; - passwordField: Input; - toggleUsedAddresses = () => { const { onToggleUsedAddresses } = this.props; onToggleUsedAddresses(); }; - form = new ReactToolboxMobxForm( { fields: { @@ -115,6 +108,7 @@ class WalletReceiveRandom extends Component { this.context.intl.formatMessage(messages.fieldIsRequired), ]; } + return [true]; }, ], @@ -122,16 +116,18 @@ class WalletReceiveRandom extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { - validationDebounceWait: 0, // Disable debounce to avoid error state after clearing + validationDebounceWait: 0, + // Disable debounce to avoid error state after clearing validateOnChange: true, showErrorsOnBlur: false, showErrorsOnClear: false, }, } ); - renderRow = (address: WalletAddress, index: number) => ( { onShareAddress={this.props.onShareAddress} /> ); - submit = () => { this.form.submit({ onSuccess: (form) => { @@ -150,13 +145,10 @@ class WalletReceiveRandom extends Component { }, onError: () => {}, }); - // eslint-disable-next-line no-unused-expressions this.passwordField && this.passwordField.focus(); }; - handleSubmitOnEnter = submitOnEnter.bind(this, this.submit); - getFilteredAddresses = ( walletAddresses: Array ): Array => @@ -178,28 +170,22 @@ class WalletReceiveRandom extends Component { showUsed, } = this.props; const { intl } = this.context; - const walletAddressClasses = classnames([ styles.hash, isWalletAddressUsed ? styles.usedHash : null, ]); - const generateAddressWrapperClasses = classnames([ styles.generateAddressWrapper, isSidebarExpanded ? styles.fullWidthOnSmallScreen : null, ]); - const generateAddressButtonClasses = classnames([ 'primary', 'generateAddressButton', walletHasPassword ? styles.submitWithPasswordButton : styles.submitButton, isSubmitting ? styles.spinning : null, ]); - const passwordField = form.$('spendingPassword'); - const canSubmit = !isSubmitting && passwordField.value; - const generateAddressForm = (
    {walletHasPassword && ( @@ -224,7 +210,6 @@ class WalletReceiveRandom extends Component { />
    ); - // Get QRCode color value from active theme's CSS variable const qrCodeBackgroundColor = document.documentElement ? document.documentElement.style.getPropertyValue( @@ -236,7 +221,6 @@ class WalletReceiveRandom extends Component { '--theme-receive-qr-code-foreground-color' ) : '#000'; - return (
    @@ -258,8 +242,7 @@ class WalletReceiveRandom extends Component {
    {walletAddress} { } } -export default WalletReceiveRandom \ No newline at end of file +export default WalletReceiveRandom; diff --git a/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx b/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx index 342606baf6..8ebdbf6da6 100644 --- a/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx +++ b/source/renderer/app/components/wallet/receive/WalletReceiveSequential.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape, FormattedHTMLMessage } from 'react-intl'; @@ -10,7 +9,6 @@ import globalMessages from '../../../i18n/global-messages'; import { VirtualAddressesList } from './VirtualAddressesList'; import styles from './WalletReceiveSequential.scss'; import AddressSequential from './AddressSequential'; - const messages = defineMessages({ instructionsTitle: { id: 'wallet.receive.page.instructions.instructionsTitle', @@ -41,22 +39,19 @@ const messages = defineMessages({ 'Label for "show used" wallet addresses link on the wallet "Receive page"', }, }); - messages.fieldIsRequired = globalMessages.fieldIsRequired; - type Props = { - walletAddresses: Array, - onShareAddress: Function, - onCopyAddress: Function, - onToggleSubMenus: Object, - showUsed: boolean, - onToggleUsedAddresses: Function, + walletAddresses: Array; + onShareAddress: (...args: Array) => any; + onCopyAddress: (...args: Array) => any; + onToggleSubMenus: Record; + showUsed: boolean; + onToggleUsedAddresses: (...args: Array) => any; }; - type State = { - addressSlice: number, - addressWidth: number, - charWidth: number, + addressSlice: number; + addressWidth: number; + charWidth: number; }; @observer @@ -64,15 +59,12 @@ class WalletReceiveSequential extends Component { static contextTypes = { intl: intlShape.isRequired, }; - - containerElement: ?HTMLElement; - + containerElement: HTMLElement | null | undefined; state = { addressSlice: 0, addressWidth: 0, charWidth: 0, }; - // We need to track the mounted state in order to avoid calling // setState promise handling code after the component was already unmounted: // Read more: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html @@ -96,7 +88,7 @@ class WalletReceiveSequential extends Component { ); get addressLength() { - const [address: WalletAddress] = this.props.walletAddresses; + const [address] = this.props.walletAddresses; return address.id.length; } @@ -109,11 +101,16 @@ class WalletReceiveSequential extends Component { this.containerElement = containerElement; const addressWidth = addressElement.offsetWidth; const charWidth = addressWidth / this.addressLength; - this.setState({ charWidth, addressWidth }, this.calculateAddressSlice); + this.setState( + { + charWidth, + addressWidth, + }, + this.calculateAddressSlice + ); } }, 500); }; - calculateAddressSlice = () => { if (this._isMounted) { const { charWidth, addressWidth } = this.state; @@ -129,12 +126,10 @@ class WalletReceiveSequential extends Component { }); } }; - toggleUsedAddresses = () => { const { onToggleUsedAddresses } = this.props; onToggleUsedAddresses(); }; - renderRow = (address: WalletAddress, index: number) => { const { onShareAddress, onCopyAddress } = this.props; const { addressSlice } = this.state; @@ -149,7 +144,6 @@ class WalletReceiveSequential extends Component { /> ); }; - getFilteredAddresses = ( walletAddresses: Array ): Array => @@ -160,7 +154,6 @@ class WalletReceiveSequential extends Component { render() { const { walletAddresses, showUsed } = this.props; const { intl } = this.context; - return (
    @@ -200,4 +193,4 @@ class WalletReceiveSequential extends Component { } } -export default WalletReceiveSequential \ No newline at end of file +export default WalletReceiveSequential; diff --git a/source/renderer/app/components/wallet/send-form/AssetInput.tsx b/source/renderer/app/components/wallet/send-form/AssetInput.tsx index 629c2ad97e..c9db31a5a3 100644 --- a/source/renderer/app/components/wallet/send-form/AssetInput.tsx +++ b/source/renderer/app/components/wallet/send-form/AssetInput.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import type { Field } from 'mobx-react-form'; @@ -16,21 +15,17 @@ import { DiscreetTokenWalletAmount } from '../../../features/discreet-mode'; import Asset from '../../assets/Asset'; import styles from './AssetInput.scss'; import messages from './messages'; - type Props = { - uniqueId: string, - getAssetByUniqueId: Function, - assetFields: { - [uniqueId: string]: Field, - }, - addFocusableField: Function, - currentNumberFormat: NumberFormat, - removeAssetRow: Function, - handleSubmitOnEnter: Function, - clearAssetFieldValue: Function, - autoFocus: boolean, + uniqueId: string; + getAssetByUniqueId: (...args: Array) => any; + assetFields: Record; + addFocusableField: (...args: Array) => any; + currentNumberFormat: NumberFormat; + removeAssetRow: (...args: Array) => any; + handleSubmitOnEnter: (...args: Array) => any; + clearAssetFieldValue: (...args: Array) => any; + autoFocus: boolean; }; - const INPUT_FIELD_PADDING_DELTA = 10; @observer @@ -38,21 +33,21 @@ class AssetInput extends Component { static contextTypes = { intl: intlShape.isRequired, }; - - rightContentRef: { current: null | HTMLDivElement }; + rightContentRef: { + current: null | HTMLDivElement; + }; constructor(props: Props) { super(props); - this.rightContentRef = React.createRef(); } hasAssetValue = (asset: Field) => { return get(asset, 'value', false); }; - generateInputFieldStyle = () => { const { current: rightContentDom } = this.rightContentRef; + if (!rightContentDom) { return null; } @@ -79,6 +74,7 @@ class AssetInput extends Component { autoFocus, } = this.props; const asset = getAssetByUniqueId(uniqueId); + if (!asset) { return false; } @@ -87,7 +83,6 @@ class AssetInput extends Component { const ticker = get(metadata, 'ticker', null); const assetField = assetFields[uniqueId]; const inputFieldStyle = this.generateInputFieldStyle(); - return (
    @@ -135,15 +130,17 @@ class AssetInput extends Component { error={assetField.error} skin={AmountInputSkin} style={inputFieldStyle} - onKeyPress={(evt: SyntheticKeyboardEvent) => { + onKeyPress={(evt: React.KeyboardEvent) => { if (decimals === 0) { const { charCode } = evt; + if (charCode === 190 || charCode === 110 || charCode === 46) { evt.persist(); evt.preventDefault(); evt.stopPropagation(); } } + handleSubmitOnEnter(evt); }} allowSigns={false} @@ -191,4 +188,4 @@ class AssetInput extends Component { } } -export default AssetInput \ No newline at end of file +export default AssetInput; diff --git a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.ts b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.ts index b23e92badf..a966fc8a71 100644 --- a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.ts +++ b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.messages.ts @@ -1,10 +1,8 @@ -// @flow import { defineMessages } from 'react-intl'; import globalMessages from '../../../i18n/global-messages'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - export const getMessages = () => { - const messages: { [string]: ReactIntlMessage } = defineMessages({ + const messages: Record = defineMessages({ dialogTitle: { id: 'wallet.send.confirmationDialog.title', defaultMessage: '!!!Confirm transaction', diff --git a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx index 3295956e57..c53b0cc8a7 100644 --- a/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/send-form/WalletSendAssetsConfirmationDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component, Fragment } from 'react'; import { observer } from 'mobx-react'; import { Input } from 'react-polymorph/lib/components/Input'; @@ -31,50 +30,42 @@ import { getMessages } from './WalletSendAssetsConfirmationDialog.messages'; import { shouldShowEmptyWalletWarning } from '../../../utils/walletUtils'; import { hasTokensLeftAfterTransaction } from '../../../utils/assets'; import globalMessages from '../../../i18n/global-messages'; - const SHOW_TOTAL_AMOUNT = false; - type Props = { - amount: string, - receiver: string, - wallet: Wallet, - totalAmount: BigNumber, - selectedAssets: Array, - allAvailableTokens: Array, - assetsAmounts: Array, - transactionFee: ?string, - onSubmit: Function, - amountToNaturalUnits: (amountWithFractions: string) => string, - onCancel: Function, - onExternalLinkClick: Function, - isSubmitting: boolean, - isFlight: boolean, - error: ?LocalizableError, - hwDeviceStatus: HwDeviceStatus, - isHardwareWallet: boolean, - onInitiateTransaction: Function, - onCopyAssetParam: Function, - isTrezor: boolean, - formattedTotalAmount: string, + amount: string; + receiver: string; + wallet: Wallet; + totalAmount: BigNumber; + selectedAssets: Array; + allAvailableTokens: Array; + assetsAmounts: Array; + transactionFee: string | null | undefined; + onSubmit: (...args: Array) => any; + amountToNaturalUnits: (amountWithFractions: string) => string; + onCancel: (...args: Array) => any; + onExternalLinkClick: (...args: Array) => any; + isSubmitting: boolean; + isFlight: boolean; + error: LocalizableError | null | undefined; + hwDeviceStatus: HwDeviceStatus; + isHardwareWallet: boolean; + onInitiateTransaction: (...args: Array) => any; + onCopyAssetParam: (...args: Array) => any; + isTrezor: boolean; + formattedTotalAmount: string; }; - type State = { - selectedAssets: Array, - assetsAmounts: Array, - areTermsAccepted: boolean, + selectedAssets: Array; + assetsAmounts: Array; + areTermsAccepted: boolean; }; - const messages = getMessages(); @observer -class WalletSendAssetsConfirmationDialog extends Component< - Props, - State -> { +class WalletSendAssetsConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { selectedAssets: [], assetsAmounts: [], @@ -87,7 +78,10 @@ class WalletSendAssetsConfirmationDialog extends Component< // (this affects only hardware wallets for which we close the dialog // after transaction has been confirmed) const { selectedAssets, assetsAmounts } = this.props; - this.setState({ selectedAssets, assetsAmounts }); + this.setState({ + selectedAssets, + assetsAmounts, + }); } form = new ReactToolboxMobxForm( @@ -103,12 +97,14 @@ class WalletSendAssetsConfirmationDialog extends Component< validators: [ ({ field }) => { if (this.props.isHardwareWallet) return [true]; + if (field.value === '') { return [ false, this.context.intl.formatMessage(messages.fieldIsRequired), ]; } + return [true]; }, ], @@ -122,14 +118,15 @@ class WalletSendAssetsConfirmationDialog extends Component< }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { @@ -154,14 +151,12 @@ class WalletSendAssetsConfirmationDialog extends Component< onError: () => {}, }); }; - handleSubmitOnEnter = (event: KeyboardEvent) => (this.props.isHardwareWallet || this.form.$('passphrase').isValid) && submitOnEnter(this.submit, event); - renderConfirmationElement = ( isHardwareWallet: boolean - ): React$Element<*> | null => { + ): React.ReactElement, any> | null => { const passphraseField = this.form.$('passphrase'); const { areTermsAccepted } = this.state; const { @@ -171,8 +166,8 @@ class WalletSendAssetsConfirmationDialog extends Component< wallet, isTrezor, } = this.props; - let returnJSX = null; + if (!isFlight || (isFlight && areTermsAccepted)) { const { name } = wallet; returnJSX = isHardwareWallet ? ( @@ -196,22 +191,23 @@ class WalletSendAssetsConfirmationDialog extends Component< /> ); } + return returnJSX; }; - onCheckboxClick = (areTermsAccepted: boolean) => { const { isHardwareWallet, onInitiateTransaction } = this.props; - this.setState({ areTermsAccepted }); + this.setState({ + areTermsAccepted, + }); + if (isHardwareWallet) { onInitiateTransaction(); } }; - getAssetAmount = (index: number) => { const { assetsAmounts } = this.state; return get(assetsAmounts, index, 0); }; - getFormattedAssetAmount = ( { metadata, decimals }: AssetToken, index: number @@ -247,13 +243,11 @@ class WalletSendAssetsConfirmationDialog extends Component< formattedTotalAmount, totalAmount, } = this.props; - const buttonLabel = !isSubmitting ? ( intl.formatMessage(messages.sendButtonLabel) ) : ( ); - const actions = [ { label: intl.formatMessage(messages.backButtonLabel), @@ -272,13 +266,12 @@ class WalletSendAssetsConfirmationDialog extends Component< (!areTermsAccepted && isFlight), }, ]; - const assetsSeparatorBasicHeight = 27; const assetsSeparatorCalculatedHeight = selectedAssets.length ? assetsSeparatorBasicHeight * selectedAssets.length * 2 - 18 : assetsSeparatorBasicHeight; - let errorElement = null; + if (error) { const errorHasLink = !!error.values.linkLabel; errorElement = errorHasLink ? ( @@ -290,8 +283,8 @@ class WalletSendAssetsConfirmationDialog extends Component< intl.formatMessage(error) ); } - const { name } = wallet; + const { name } = wallet; return ( { - const messages: { [string]: ReactIntlMessage } = defineMessages({ + const messages: Record = defineMessages({ dialogTitle: { id: 'wallet.send.confirmationDialog.title', defaultMessage: '!!!Confirm transaction', diff --git a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx index 3df1a2d0a0..861cafdd5d 100644 --- a/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/send-form/WalletSendConfirmationDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { Input } from 'react-polymorph/lib/components/Input'; @@ -24,47 +23,39 @@ import { getMessages } from './WalletSendAssetsConfirmationDialog.messages'; import { shouldShowEmptyWalletWarning } from '../../../utils/walletUtils'; import type { AssetToken } from '../../../api/assets/types'; import globalMessages from '../../../i18n/global-messages'; - type Props = { - amount: string, - receiver: string, - wallet: Wallet, - totalAmount: BigNumber, - allAvailableTokens?: Array, - transactionFee: ?string, - onSubmit: Function, - amountToNaturalUnits: (amountWithFractions: string) => string, - onCancel: Function, - isSubmitting: boolean, - isFlight: boolean, - error: ?LocalizableError, - hwDeviceStatus: HwDeviceStatus, - isHardwareWallet: boolean, - onInitiateTransaction: Function, - onExternalLinkClick: Function, - isTrezor: boolean, - formattedTotalAmount: string, + amount: string; + receiver: string; + wallet: Wallet; + totalAmount: BigNumber; + allAvailableTokens?: Array; + transactionFee: string | null | undefined; + onSubmit: (...args: Array) => any; + amountToNaturalUnits: (amountWithFractions: string) => string; + onCancel: (...args: Array) => any; + isSubmitting: boolean; + isFlight: boolean; + error: LocalizableError | null | undefined; + hwDeviceStatus: HwDeviceStatus; + isHardwareWallet: boolean; + onInitiateTransaction: (...args: Array) => any; + onExternalLinkClick: (...args: Array) => any; + isTrezor: boolean; + formattedTotalAmount: string; }; - type State = { - areTermsAccepted: boolean, + areTermsAccepted: boolean; }; - const messages = getMessages(); @observer -class WalletSendConfirmationDialog extends Component< - Props, - State -> { +class WalletSendConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { areTermsAccepted: false, }; - form = new ReactToolboxMobxForm( { fields: { @@ -78,12 +69,14 @@ class WalletSendConfirmationDialog extends Component< validators: [ ({ field }) => { if (this.props.isHardwareWallet) return [true]; + if (field.value === '') { return [ false, this.context.intl.formatMessage(messages.fieldIsRequired), ]; } + return [true]; }, ], @@ -97,14 +90,15 @@ class WalletSendConfirmationDialog extends Component< }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { @@ -126,14 +120,12 @@ class WalletSendConfirmationDialog extends Component< onError: () => {}, }); }; - handleSubmitOnEnter = (event: KeyboardEvent) => (this.props.isHardwareWallet || this.form.$('passphrase').isValid) && submitOnEnter(this.submit, event); - renderConfirmationElement = ( isHardwareWallet: boolean - ): ?React$Element<*> => { + ): React.ReactElement, any> | null | undefined => { const passphraseField = this.form.$('passphrase'); const { areTermsAccepted } = this.state; const { @@ -167,12 +159,15 @@ class WalletSendConfirmationDialog extends Component< /> ); } + return null; }; - onCheckboxClick = (areTermsAccepted: boolean) => { const { isHardwareWallet, onInitiateTransaction } = this.props; - this.setState({ areTermsAccepted }); + this.setState({ + areTermsAccepted, + }); + if (isHardwareWallet) { onInitiateTransaction(); } @@ -200,13 +195,11 @@ class WalletSendConfirmationDialog extends Component< formattedTotalAmount, totalAmount, } = this.props; - const buttonLabel = !isSubmitting ? ( intl.formatMessage(messages.sendButtonLabel) ) : ( ); - const actions = [ { label: intl.formatMessage(messages.backButtonLabel), @@ -225,8 +218,8 @@ class WalletSendConfirmationDialog extends Component< (!areTermsAccepted && isFlight), }, ]; - let errorElement = null; + if (error) { const errorHasLink = !!error.values.linkLabel; errorElement = errorHasLink ? ( @@ -320,4 +313,4 @@ class WalletSendConfirmationDialog extends Component< } } -export default WalletSendConfirmationDialog \ No newline at end of file +export default WalletSendConfirmationDialog; diff --git a/source/renderer/app/components/wallet/send-form/messages.ts b/source/renderer/app/components/wallet/send-form/messages.ts index 35c99616c4..9b0cc56878 100644 --- a/source/renderer/app/components/wallet/send-form/messages.ts +++ b/source/renderer/app/components/wallet/send-form/messages.ts @@ -1,6 +1,4 @@ -// @flow import { defineMessages } from 'react-intl'; - export default defineMessages({ titleLabel: { id: 'wallet.send.form.title.label', diff --git a/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx b/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx index a5d21492b9..728a04bc46 100644 --- a/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ChangeSpendingPasswordDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -21,7 +20,6 @@ import styles from './ChangeSpendingPasswordDialog.scss'; import { FORM_VALIDATION_DEBOUNCE_WAIT } from '../../../config/timingConfig'; import { submitOnEnter } from '../../../utils/form'; import infoIconInline from '../../../assets/images/info-icon.inline.svg'; - const messages = defineMessages({ dialogTitleSetPassword: { id: 'wallet.settings.changePassword.dialog.title.setPassword', @@ -84,19 +82,18 @@ const messages = defineMessages({ description: 'Tooltip for the password input in the wallet dialog.', }, }); - type Props = { - currentPasswordValue: string, - newPasswordValue: string, - repeatedPasswordValue: string, - onSave: Function, - onCancel: Function, - onDataChange: Function, - isSubmitting: boolean, - error: ?LocalizableError, - isSpendingPasswordSet: boolean, - walletName: string, - currentLocale: string, + currentPasswordValue: string; + newPasswordValue: string; + repeatedPasswordValue: string; + onSave: (...args: Array) => any; + onCancel: (...args: Array) => any; + onDataChange: (...args: Array) => any; + isSubmitting: boolean; + error: LocalizableError | null | undefined; + isSpendingPasswordSet: boolean; + walletName: string; + currentLocale: string; }; @observer @@ -106,11 +103,9 @@ class ChangeSpendingPasswordDialog extends Component { newPasswordValue: '', repeatedPasswordValue: '', }; - static contextTypes = { intl: intlShape.isRequired, }; - form = new ReactToolboxMobxForm( { fields: { @@ -132,6 +127,7 @@ class ChangeSpendingPasswordDialog extends Component { ), ]; } + return [true]; }, ], @@ -188,7 +184,9 @@ class ChangeSpendingPasswordDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, @@ -196,7 +194,6 @@ class ChangeSpendingPasswordDialog extends Component { }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { @@ -210,11 +207,11 @@ class ChangeSpendingPasswordDialog extends Component { onError: () => {}, }); }; - handleSubmitOnEnter = submitOnEnter.bind(this, this.submit); - handleDataChange = (key: string, value: string) => { - this.props.onDataChange({ [key]: value }); + this.props.onDataChange({ + [key]: value, + }); }; render() { @@ -232,28 +229,21 @@ class ChangeSpendingPasswordDialog extends Component { styles.dialog, isSpendingPasswordSet ? 'changePasswordDialog' : 'createPasswordDialog', ]); - const confirmButtonClasses = classnames([ 'confirmButton', isSubmitting ? styles.isSubmitting : null, ]); - const spendingPasswordClasses = classnames([ styles.spendingPasswordField, currentLocale === 'ja-JP' ? styles.jpLangTooltipIcon : '', ]); - const newPasswordClasses = classnames(['newPassword', styles.newPassword]); - const currentPasswordField = form.$('currentPassword'); const newPasswordField = form.$('spendingPassword'); const repeatedPasswordField = form.$('repeatPassword'); - const canSubmit = !isSubmitting && form.isValid; - const currentPasswordError = canSubmit && error && error.code === 'wrong_encryption_passphrase'; - const actions = [ { className: confirmButtonClasses, @@ -263,7 +253,6 @@ class ChangeSpendingPasswordDialog extends Component { primary: true, }, ]; - return ( { ? 'dialogTitleSetPassword' : 'dialogTitleChangePassword' ], - { walletName } + { + walletName, + } )} subtitle={walletName} actions={actions} @@ -339,4 +330,4 @@ class ChangeSpendingPasswordDialog extends Component { } } -export default ChangeSpendingPasswordDialog \ No newline at end of file +export default ChangeSpendingPasswordDialog; diff --git a/source/renderer/app/components/wallet/settings/DelegateWalletButton.tsx b/source/renderer/app/components/wallet/settings/DelegateWalletButton.tsx index 8fd9fa3cb0..67c0c8808b 100644 --- a/source/renderer/app/components/wallet/settings/DelegateWalletButton.tsx +++ b/source/renderer/app/components/wallet/settings/DelegateWalletButton.tsx @@ -1,9 +1,7 @@ -// @flow import React, { Component } from 'react'; import { defineMessages, intlShape } from 'react-intl'; import { Button } from 'react-polymorph/lib/components/Button'; import styles from './DelegateWalletButton.scss'; - const messages = defineMessages({ label: { id: 'wallet.settings.delegateWalletButtonLabel', @@ -11,12 +9,10 @@ const messages = defineMessages({ description: 'Label for the delegate button on wallet settings', }, }); - type Props = { - disabled?: boolean, - onDelegate: Function, + disabled?: boolean; + onDelegate: (...args: Array) => any; }; - export default class DelegateWalletButton extends Component { static contextTypes = { intl: intlShape.isRequired, diff --git a/source/renderer/app/components/wallet/settings/DeleteWallet.tsx b/source/renderer/app/components/wallet/settings/DeleteWallet.tsx index 56ed4b8542..0c90509750 100644 --- a/source/renderer/app/components/wallet/settings/DeleteWallet.tsx +++ b/source/renderer/app/components/wallet/settings/DeleteWallet.tsx @@ -1,4 +1,3 @@ -// @flow import type { Node } from 'react'; import React from 'react'; import { observer } from 'mobx-react'; @@ -8,8 +7,7 @@ import type { ReactIntlMessage } from '../../../types/i18nTypes'; import BorderedBox from '../../widgets/BorderedBox'; import WalletSettingsRemoveButton from './WalletSettingsRemoveButton'; import WalletSettingsActionConfirmationDialog from './WalletSettingsRemoveConfirmationDialog'; - -export const messages: { [string]: ReactIntlMessage } = defineMessages({ +export const messages: Record = defineMessages({ deleteWalletHeader: { id: 'wallet.settings.deleteWallet.header', defaultMessage: '!!!Delete wallet', @@ -33,15 +31,13 @@ export const messages: { [string]: ReactIntlMessage } = defineMessages({ description: 'Label for the delete button on wallet settings', }, }); - type Props = { - openDialogAction: Function, - isDialogOpen: Function, - deleteWalletDialogContainer: Node, - onBlockForm: Function, - intl: intlShape.isRequired, + openDialogAction: (...args: Array) => any; + isDialogOpen: (...args: Array) => any; + deleteWalletDialogContainer: Node; + onBlockForm: (...args: Array) => any; + intl: intlShape.isRequired; }; - const DeleteWallet = observer( ({ openDialogAction, @@ -51,7 +47,6 @@ const DeleteWallet = observer( intl, }: Props) => { const label = intl.formatMessage(messages.deleteButton); - return ( <> @@ -81,5 +76,4 @@ const DeleteWallet = observer( ); } ); - export default injectIntl(DeleteWallet); diff --git a/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.tsx b/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.tsx index 8a5ca89e06..872f63ea42 100644 --- a/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.tsx +++ b/source/renderer/app/components/wallet/settings/DeleteWalletConfirmation.tsx @@ -1,5 +1,3 @@ -// @flow - import React from 'react'; import { Checkbox } from 'react-polymorph/lib/components/Checkbox'; import { CheckboxSkin } from 'react-polymorph/lib/skins/simple/CheckboxSkin'; @@ -7,15 +5,14 @@ import { Input } from 'react-polymorph/lib/components/Input'; import { InputSkin } from 'react-polymorph/lib/skins/simple/InputSkin'; import { submitOnEnter } from '../../../utils/form'; import styles from './DeleteWalletConfirmationDialog.scss'; - type Props = { - isBackupNoticeAccepted: boolean, - confirmationValue: string, - onAcceptBackupNotice: Function, - onConfirmationValueChange: Function, - handleSubmit: Function, - inputLabel: string, - checkboxLabel: string, + isBackupNoticeAccepted: boolean; + confirmationValue: string; + onAcceptBackupNotice: (...args: Array) => any; + onConfirmationValueChange: (...args: Array) => any; + handleSubmit: (...args: Array) => any; + inputLabel: string; + checkboxLabel: string; }; const DeleteWalletConfirmation = ({ diff --git a/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx b/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx index 4dacc668a1..1309449226 100644 --- a/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ExportWalletToFileDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import type { Node } from 'react'; import { observer } from 'mobx-react'; @@ -15,7 +14,6 @@ import LocalizableError from '../../../i18n/LocalizableError'; import styles from './ExportWalletToFileDialog.scss'; import { FORM_VALIDATION_DEBOUNCE_WAIT } from '../../../config/timingConfig'; import { submitOnEnter } from '../../../utils/form'; - const messages = defineMessages({ headline: { id: 'wallet.settings.exportToFile.dialog.headline', @@ -32,8 +30,7 @@ const messages = defineMessages({ id: 'wallet.settings.exportToFile.dialog.submit.label', defaultMessage: '!!!Export', description: 'Label for export wallet to file submit button.', - }, - // TODO: re-enable when we have full/readOnly exports + }, // TODO: re-enable when we have full/readOnly exports // fullTabTitle: { // id: 'wallet.export.choices.tab.title.full', // defaultMessage: '!!!Full', @@ -45,29 +42,24 @@ const messages = defineMessages({ // description: 'Tab title "Read-only" on wallet export dialog.' // }, }); - type ExportType = 'full' | 'readOnly'; - const EXPORT_TYPE = { FULL: 'full', READ_ONLY: 'readOnly', }; - -export type OnSubmitParams = $Exact<{ - exportType: ExportType, - password: ?string, -}>; - +export type OnSubmitParams = { + exportType: ExportType; + password: string | null | undefined; +}; type Props = { - walletName: string, - isSubmitting: boolean, - onSubmit: (OnSubmitParams) => Promise, - onClose: () => void, - error?: ?LocalizableError, + walletName: string; + isSubmitting: boolean; + onSubmit: (arg0: OnSubmitParams) => Promise; + onClose: () => void; + error?: LocalizableError | null | undefined; }; - type State = { - exportType: ExportType, + exportType: ExportType; }; @observer @@ -86,7 +78,6 @@ class ExportWalletToFileDialog extends Component { // onChangeExportType(exportType: ExportType) { // this.setState({ exportType }); // } - form = new ReactToolboxMobxForm( { fields: { @@ -116,14 +107,15 @@ class ExportWalletToFileDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: async (form) => { @@ -136,7 +128,6 @@ class ExportWalletToFileDialog extends Component { }, }); }; - handleSubmitOnEnter = submitOnEnter.bind(this, this.submit); render() { @@ -145,7 +136,6 @@ class ExportWalletToFileDialog extends Component { const { onClose, walletName, isSubmitting, error } = this.props; // const { exportType } = this.state; const dialogClasses = classnames([styles.component, 'WalletExportDialog']); - const actions = [ { className: isSubmitting ? styles.isSubmitting : null, @@ -154,9 +144,7 @@ class ExportWalletToFileDialog extends Component { onClick: this.submit, }, ]; - // const spendingPasswordField = form.$('spendingPassword'); - return ( { closeButton={} > {/* TODO: re-enable when we have full/readOnly exports -
    - - + +
    - */}
    {/* - + */} {error &&

    {intl.formatMessage(error)}

    } @@ -209,4 +197,4 @@ class ExportWalletToFileDialog extends Component { } } -export default ExportWalletToFileDialog \ No newline at end of file +export default ExportWalletToFileDialog; diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.tsx b/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.tsx index aba0eb7b1a..928a50f44b 100644 --- a/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.tsx +++ b/source/renderer/app/components/wallet/settings/ICOPublicKeyBox.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import BorderedBox from '../../widgets/BorderedBox'; @@ -8,8 +7,7 @@ import ICOPublicKeyDialog from './ICOPublicKeyDialog'; import PublicKeyField from './PublicKeyField'; import type { Locale } from '../../../../../common/types/locales.types'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - -export const messages: { [string]: ReactIntlMessage } = defineMessages({ +export const messages: Record = defineMessages({ publicKey: { id: 'wallet.settings.icoPublicKey', defaultMessage: '!!!ICO public key', @@ -33,13 +31,12 @@ export const messages: { [string]: ReactIntlMessage } = defineMessages({ description: 'Show QR code tooltip.', }, }); - type Props = { - publicKey: ?string, - locale: Locale, - onCopyICOPublicKey: Function, - openDialogAction: Function, - intl: intlShape.isRequired, + publicKey: string | null | undefined; + locale: Locale; + onCopyICOPublicKey: (...args: Array) => any; + openDialogAction: (...args: Array) => any; + intl: intlShape.isRequired; }; const ICOPublicKeyBox = (props: Props) => { @@ -50,7 +47,6 @@ const ICOPublicKeyBox = (props: Props) => { openDialogAction, intl, } = props; - return ( <> @@ -60,10 +56,14 @@ const ICOPublicKeyBox = (props: Props) => { locale={locale} onCopyPublicKey={onCopyICOPublicKey} onShowQRCode={() => - openDialogAction({ dialog: PublicKeyQRCodeDialog }) + openDialogAction({ + dialog: PublicKeyQRCodeDialog, + }) } onOpenWalletKeyDialog={() => - openDialogAction({ dialog: ICOPublicKeyDialog }) + openDialogAction({ + dialog: ICOPublicKeyDialog, + }) } messages={messages} /> diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx b/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx index 088a79240e..1d02781e01 100644 --- a/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ICOPublicKeyDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; @@ -14,8 +13,7 @@ import DialogCloseButton from '../../widgets/DialogCloseButton'; import LocalizableError from '../../../i18n/LocalizableError'; import { isValidSpendingPassword } from '../../../utils/validations'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - -const messages: { [string]: ReactIntlMessage } = defineMessages({ +const messages: Record = defineMessages({ title: { id: 'wallet.settings.icoPublicKeyDialog.title', defaultMessage: '!!!Reveal ICO public key', @@ -33,13 +31,12 @@ const messages: { [string]: ReactIntlMessage } = defineMessages({ description: 'Description on the reveal ICO Id dialog.', }, }); - type Props = { - onRevealPublicKey: Function, - onClose: Function, - error: ?LocalizableError, - hasReceivedICOPublicKey: boolean, - walletName: string, + onRevealPublicKey: (...args: Array) => any; + onClose: (...args: Array) => any; + error: LocalizableError | null | undefined; + hasReceivedICOPublicKey: boolean; + walletName: string; }; @observer @@ -50,6 +47,7 @@ class ICOPublicKeyDialog extends Component { componentDidUpdate() { const { hasReceivedICOPublicKey, onClose } = this.props; + if (hasReceivedICOPublicKey) { onClose(); } @@ -77,6 +75,7 @@ class ICOPublicKeyDialog extends Component { ), ]; } + return [true]; }, ], @@ -84,24 +83,26 @@ class ICOPublicKeyDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { const { spendingPassword } = form.values(); const { onRevealPublicKey } = this.props; - onRevealPublicKey({ spendingPassword }); + onRevealPublicKey({ + spendingPassword, + }); }, }); }; - handleSubmitOnEnter = submitOnEnter.bind(this, this.submit); render() { @@ -143,4 +144,4 @@ class ICOPublicKeyDialog extends Component { } } -export default ICOPublicKeyDialog \ No newline at end of file +export default ICOPublicKeyDialog; diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.ts b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.ts index 34b57a43ca..1492c57b01 100644 --- a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.ts +++ b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.messages.ts @@ -1,10 +1,6 @@ -// @flow import { defineMessages } from 'react-intl'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - -export const messages: { - [string]: ReactIntlMessage, -} = defineMessages({ +export const messages: Record = defineMessages({ dialogTitle: { id: 'wallet.settings.icoPublicKey', defaultMessage: '!!!ICO Public Key', diff --git a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.tsx b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.tsx index d8d184f7de..4f855873bd 100644 --- a/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.tsx +++ b/source/renderer/app/components/wallet/settings/ICOPublicKeyQRCodeDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { observer } from 'mobx-react'; import { injectIntl, intlShape } from 'react-intl'; @@ -11,18 +10,15 @@ import Dialog from '../../widgets/Dialog'; import iconCopy from '../../../assets/images/clipboard-ic.inline.svg'; import styles from './PublicKeyQRCodeDialog.scss'; import globalMessages from '../../../i18n/global-messages'; - import { messages } from './ICOPublicKeyQRCodeDialog.messages'; - type Props = { - walletName: string, - walletPublicKey: string, - onCopyWalletPublicKey: Function, - onClose: Function, - derivationPath: string, - intl: intlShape.isRequired, + walletName: string; + walletPublicKey: string; + onCopyWalletPublicKey: (...args: Array) => any; + onClose: (...args: Array) => any; + derivationPath: string; + intl: intlShape.isRequired; }; - const ICOPublicKeyQRCodeDialog = observer((props: Props) => { const { walletName, @@ -32,14 +28,12 @@ const ICOPublicKeyQRCodeDialog = observer((props: Props) => { derivationPath, intl, } = props; - const actions = [ { label: intl.formatMessage(globalMessages.close), onClick: onClose, }, ]; - // Get QRCode color value from active theme's CSS variable const qrCodeBackgroundColor = document.documentElement ? document.documentElement.style.getPropertyValue( @@ -51,7 +45,6 @@ const ICOPublicKeyQRCodeDialog = observer((props: Props) => { '--theme-receive-qr-code-foreground-color' ) : '#000'; - return ( { ); }); - export default injectIntl(ICOPublicKeyQRCodeDialog); diff --git a/source/renderer/app/components/wallet/settings/PublicKeyField.tsx b/source/renderer/app/components/wallet/settings/PublicKeyField.tsx index 91be6bb52d..4346444481 100644 --- a/source/renderer/app/components/wallet/settings/PublicKeyField.tsx +++ b/source/renderer/app/components/wallet/settings/PublicKeyField.tsx @@ -1,4 +1,3 @@ -// @flow import React, { useCallback, useState, useEffect } from 'react'; import SVGInline from 'react-svg-inline'; import classnames from 'classnames'; @@ -15,16 +14,15 @@ import type { Locale } from '../../../../../common/types/locales.types'; import { LOCALES } from '../../../../../common/types/locales.types'; import styles from './PublicKeyField.scss'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - type Props = { - publicKey: string, - locale: Locale, - onCopyPublicKey: Function, - onShowQRCode: Function, - onOpenWalletKeyDialog: Function, - intl: intlShape.isRequired, - messages: { [string]: ReactIntlMessage }, - description?: string, + publicKey: string; + locale: Locale; + onCopyPublicKey: (...args: Array) => any; + onShowQRCode: (...args: Array) => any; + onOpenWalletKeyDialog: (...args: Array) => any; + intl: intlShape.isRequired; + messages: Record; + description?: string; }; const PublicKeyField = (props: Props) => { @@ -38,9 +36,7 @@ const PublicKeyField = (props: Props) => { description, onCopyPublicKey, } = props; - const [publicKeyHidden, setPublicKeyHidden] = useState(!publicKey); - const togglePublicKeyVisibility = useCallback(() => { if (!publicKey) { onOpenWalletKeyDialog(); @@ -48,21 +44,17 @@ const PublicKeyField = (props: Props) => { setPublicKeyHidden((prevCheck: boolean) => !prevCheck); } }); - // This is called when the publicKey is set useEffect(() => { setPublicKeyHidden(!publicKey); }, [publicKey]); - // This is called when the component is mounted the first time useEffect(() => { setPublicKeyHidden(true); }, []); - const handleCopyPublicKey = useCallback(() => onCopyPublicKey(publicKey), [ publicKey, ]); - const fieldStyles = classnames([ styles.field, publicKeyHidden || !publicKey ? styles.valueHidden : styles.valueShown, @@ -71,23 +63,19 @@ const PublicKeyField = (props: Props) => { const hiddenValuePlaceholder = intl.formatMessage( messages.publicKeyShowInstruction ); - const toggleButtonTooltip = intl.formatMessage( globalMessages[publicKeyHidden ? 'reveal' : 'hide'] ); - const qrCodeButtonStyles = classnames([ styles.imageButton, styles.qrCodeButton, 'flat', ]); - const revealHideButtonStyles = classnames([ styles.imageButton, publicKeyHidden ? styles.revealButton : styles.hideButton, 'flat', ]); - return (
    diff --git a/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.tsx b/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.tsx index 610473b9db..42801412a8 100644 --- a/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.tsx +++ b/source/renderer/app/components/wallet/settings/PublicKeyFieldSkin.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import type { ElementRef } from 'react'; import classnames from 'classnames'; @@ -11,16 +10,14 @@ import type { InputProps } from 'react-polymorph/lib/components/Input'; import { pickDOMProps } from 'react-polymorph/lib/utils/props'; import copyImage from '../../../assets/images/copy.inline.svg'; import styles from './PublicKeyField.scss'; - type Props = InputProps & { - inputRef: ElementRef<'input'>, - theme: Object, - themeId: string, - tooltip: Node, - valueVisible: boolean, - onCopyValue: Function, + inputRef: ElementRef<'input'>; + theme: Record; + themeId: string; + tooltip: Node; + valueVisible: boolean; + onCopyValue: (...args: Array) => any; }; - export default (props: Props) => { const renderInput = () => ( { if (props.onFocus) { props.onFocus(); } + if (props.inputRef && props.inputRef.current) { props.inputRef.current.select(); } + props.onCopyValue(); }} /> ); + const render = () => props.valueVisible ? ( @@ -56,6 +56,7 @@ export default (props: Props) => { if (props.inputRef && props.inputRef.current) { props.inputRef.current.select(); } + props.onCopyValue(); }} > diff --git a/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx b/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx index 65b136dcea..58baa558b6 100644 --- a/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx +++ b/source/renderer/app/components/wallet/settings/SetWalletPassword.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; @@ -6,7 +5,6 @@ import SVGInline from 'react-svg-inline'; import insecureWalletIcon from '../../../assets/images/insecure-wallet.inline.svg'; import styles from './SetWalletPassword.scss'; import ChangeSpendingPasswordDialogContainer from '../../../containers/wallet/dialogs/settings/ChangeSpendingPasswordDialogContainer'; - const messages = defineMessages({ setPasswordButton: { id: 'wallet.settings.setWalletPassword.dialog.setPasswordButton', @@ -28,10 +26,9 @@ const messages = defineMessages({ 'Title for the "Set wallet password" dialog when there is not password set.', }, }); - type Props = { - isSetWalletPasswordDialogOpen: boolean, - onSetWalletPassword: Function, + isSetWalletPasswordDialogOpen: boolean; + onSetWalletPassword: (...args: Array) => any; }; @observer @@ -43,7 +40,6 @@ class SetWalletPassword extends Component { render() { const { intl } = this.context; const { isSetWalletPasswordDialogOpen, onSetWalletPassword } = this.props; - return ( <>
    @@ -77,4 +73,4 @@ class SetWalletPassword extends Component { } } -export default SetWalletPassword \ No newline at end of file +export default SetWalletPassword; diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletButton.tsx b/source/renderer/app/components/wallet/settings/UndelegateWalletButton.tsx index 065abb6b17..9784a6e7da 100644 --- a/source/renderer/app/components/wallet/settings/UndelegateWalletButton.tsx +++ b/source/renderer/app/components/wallet/settings/UndelegateWalletButton.tsx @@ -1,9 +1,7 @@ -// @flow import React, { Component } from 'react'; import { defineMessages, intlShape } from 'react-intl'; import { Button } from 'react-polymorph/lib/components/Button'; import styles from './UndelegateWalletButton.scss'; - const messages = defineMessages({ label: { id: 'wallet.settings.undelegateWalletButtonLabel', @@ -11,12 +9,10 @@ const messages = defineMessages({ description: 'Label for the undelegate button on wallet settings', }, }); - type Props = { - disabled?: boolean, - onUndelegate: Function, + disabled?: boolean; + onUndelegate: (...args: Array) => any; }; - export default class UndelegateWalletButton extends Component { static contextTypes = { intl: intlShape.isRequired, diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx b/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx index 43172b6f88..396c818b71 100644 --- a/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/settings/UndelegateWalletConfirmationDialog.tsx @@ -1,4 +1,3 @@ -// @flow /* eslint-disable jsx-a11y/label-has-associated-control, jsx-a11y/label-has-for */ import React, { Component } from 'react'; import { observer } from 'mobx-react'; @@ -22,7 +21,6 @@ import styles from './UndelegateWalletConfirmationDialog.scss'; import globalMessages from '../../../i18n/global-messages'; import LocalizableError from '../../../i18n/LocalizableError'; import { submitOnEnter } from '../../../utils/form'; - const messages = defineMessages({ title: { id: 'wallet.settings.undelegate.dialog.title', @@ -101,21 +99,19 @@ const messages = defineMessages({ '"Calculating fees" message in the "Undelegate wallet" dialog.', }, }); - messages.fieldIsRequired = globalMessages.fieldIsRequired; - type Props = { - selectedWallet: ?Wallet, - stakePoolName: ?string, - stakePoolTicker: ?string, - onConfirm: Function, - onCancel: Function, - onExternalLinkClick: Function, - isSubmitting: boolean, - error: ?LocalizableError, - fees: ?DelegationCalculateFeeResponse, - hwDeviceStatus: HwDeviceStatus, - isTrezor: boolean, + selectedWallet: Wallet | null | undefined; + stakePoolName: string | null | undefined; + stakePoolTicker: string | null | undefined; + onConfirm: (...args: Array) => any; + onCancel: (...args: Array) => any; + onExternalLinkClick: (...args: Array) => any; + isSubmitting: boolean; + error: LocalizableError | null | undefined; + fees: DelegationCalculateFeeResponse | null | undefined; + hwDeviceStatus: HwDeviceStatus; + isTrezor: boolean; }; @observer @@ -123,7 +119,6 @@ class UndelegateWalletConfirmationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - form = new ReactToolboxMobxForm( { fields: { @@ -141,6 +136,7 @@ class UndelegateWalletConfirmationDialog extends Component { this.context.intl.formatMessage(messages.fieldIsRequired), ]; } + return [true]; }, ], @@ -159,6 +155,7 @@ class UndelegateWalletConfirmationDialog extends Component { this.context.intl.formatMessage(messages.fieldIsRequired), ]; } + return [true]; }, ], @@ -179,12 +176,14 @@ class UndelegateWalletConfirmationDialog extends Component { 'isHardwareWallet' ); if (isHardwareWallet) return [true]; + if (field.value === '') { return [ false, this.context.intl.formatMessage(messages.fieldIsRequired), ]; } + return [true]; }, ], @@ -192,14 +191,15 @@ class UndelegateWalletConfirmationDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - confirmationDisabled = () => { const { form } = this; const { fees, isSubmitting, hwDeviceStatus, selectedWallet } = this.props; @@ -226,7 +226,6 @@ class UndelegateWalletConfirmationDialog extends Component { !passphraseIsValid ); }; - handleSubmit = () => { if (this.confirmationDisabled()) { return false; @@ -242,10 +241,8 @@ class UndelegateWalletConfirmationDialog extends Component { onError: () => null, }); }; - handleSubmitOnEnter = (event: KeyboardEvent) => submitOnEnter(this.handleSubmit, event); - generateErrorElement = () => { const { error, onExternalLinkClick } = this.props; @@ -262,7 +259,6 @@ class UndelegateWalletConfirmationDialog extends Component { ) : ( this.context.intl.formatMessage(error) ); - return result; }; @@ -304,7 +300,6 @@ class UndelegateWalletConfirmationDialog extends Component { }, ]; const errorElement = this.generateErrorElement(); - return ( { {stakePoolTicker ? ( ) : ( { } } -export default UndelegateWalletConfirmationDialog \ No newline at end of file +export default UndelegateWalletConfirmationDialog; diff --git a/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx b/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx index 221a4d5544..ca4a21fcd3 100644 --- a/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx +++ b/source/renderer/app/components/wallet/settings/UndelegateWalletSuccessDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape, FormattedHTMLMessage } from 'react-intl'; @@ -10,7 +9,6 @@ import globalMessages from '../../../i18n/global-messages'; import sadLogo from '../../../assets/images/untada.inline.svg'; import humanizeDurationByLocale from '../../../utils/humanizeDurationByLocale'; import { EPOCH_COUNTDOWN_INTERVAL } from '../../../config/stakingConfig'; - const messages = defineMessages({ title: { id: 'wallet.settings.undelegate.result.dialog.title', @@ -30,23 +28,22 @@ const messages = defineMessages({ description: 'Description 2 for the "Undelegate Result" dialog.', }, }); - type Props = { - walletName: string, - futureEpochStartTime: string, - currentLocale: string, - onClose: Function, + walletName: string; + futureEpochStartTime: string; + currentLocale: string; + onClose: (...args: Array) => any; +}; +type State = { + timeUntilNextEpochStart: number; }; -type State = { timeUntilNextEpochStart: number }; @observer -class UndelegateWalletSuccessDialog extends Component< - Props, - State -> { - intervalHandler: ?IntervalID = null; - state = { timeUntilNextEpochStart: 0 }; - +class UndelegateWalletSuccessDialog extends Component { + intervalHandler: IntervalID | null | undefined = null; + state = { + timeUntilNextEpochStart: 0, + }; static contextTypes = { intl: intlShape.isRequired, }; @@ -65,7 +62,9 @@ class UndelegateWalletSuccessDialog extends Component< 0, new Date(futureEpochStartTime).getTime() - new Date().getTime() ); - this.setState({ timeUntilNextEpochStart }); + this.setState({ + timeUntilNextEpochStart, + }); }; componentWillUnmount() { @@ -84,12 +83,10 @@ class UndelegateWalletSuccessDialog extends Component< primary: true, }, ]; - const timeUntilNextEpochStart = humanizeDurationByLocale( this.state.timeUntilNextEpochStart, currentLocale ); - return ( = defineMessages({ unpairWalletHeader: { id: 'wallet.settings.unpairWallet.header', defaultMessage: '!!!Unpair wallet', @@ -32,15 +30,13 @@ export const messages: { [string]: ReactIntlMessage } = defineMessages({ description: 'Label for the unpair button on wallet settings', }, }); - type Props = { - openDialogAction: Function, - isDialogOpen: Function, - unpairWalletDialogContainer: Node, - onBlockForm: Function, - intl: intlShape.isRequired, + openDialogAction: (...args: Array) => any; + isDialogOpen: (...args: Array) => any; + unpairWalletDialogContainer: Node; + onBlockForm: (...args: Array) => any; + intl: intlShape.isRequired; }; - const UnpairWallet = observer( ({ openDialogAction, @@ -50,7 +46,6 @@ const UnpairWallet = observer( intl, }: Props) => { const label = intl.formatMessage(messages.unpairButton); - return ( <> @@ -81,5 +76,4 @@ const UnpairWallet = observer( ); } ); - export default injectIntl(UnpairWallet); diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.tsx b/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.tsx index 86907c301f..86a62d49e6 100644 --- a/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.tsx +++ b/source/renderer/app/components/wallet/settings/WalletPublicKeyBox.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { defineMessages, injectIntl } from 'react-intl'; import BorderedBox from '../../widgets/BorderedBox'; @@ -8,8 +7,7 @@ import PublicKeyDialog from './WalletPublicKeyDialog'; import type { Locale } from '../../../../../common/types/locales.types'; import PublicKeyField from './PublicKeyField'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - -export const messages: { [string]: ReactIntlMessage } = defineMessages({ +export const messages: Record = defineMessages({ publicKey: { id: 'wallet.settings.walletPublicKey', defaultMessage: '!!!Wallet public key', @@ -27,17 +25,15 @@ export const messages: { [string]: ReactIntlMessage } = defineMessages({ description: 'Show QR code tooltip.', }, }); - type Props = { - publicKey: ?string, - locale: Locale, - onCopyWalletPublicKey: Function, - openDialogAction: Function, + publicKey: string | null | undefined; + locale: Locale; + onCopyWalletPublicKey: (...args: Array) => any; + openDialogAction: (...args: Array) => any; }; const WalletPublicKeyBox = (props: Props) => { const { publicKey, locale, onCopyWalletPublicKey, openDialogAction } = props; - return ( <> @@ -46,10 +42,14 @@ const WalletPublicKeyBox = (props: Props) => { locale={locale} onCopyPublicKey={onCopyWalletPublicKey} onShowQRCode={() => - openDialogAction({ dialog: WalletPublicKeyQRCodeDialog }) + openDialogAction({ + dialog: WalletPublicKeyQRCodeDialog, + }) } onOpenWalletKeyDialog={() => - openDialogAction({ dialog: PublicKeyDialog }) + openDialogAction({ + dialog: PublicKeyDialog, + }) } messages={messages} /> diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx b/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx index 03de1e0eb9..59b5d5b312 100644 --- a/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletPublicKeyDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; @@ -13,8 +12,7 @@ import Dialog from '../../widgets/Dialog'; import DialogCloseButton from '../../widgets/DialogCloseButton'; import LocalizableError from '../../../i18n/LocalizableError'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - -const messages: { [string]: ReactIntlMessage } = defineMessages({ +const messages: Record = defineMessages({ title: { id: 'wallet.settings.walletPublicKeyDialog.title', defaultMessage: '!!!Reveal wallet public key', @@ -32,13 +30,12 @@ const messages: { [string]: ReactIntlMessage } = defineMessages({ description: 'Description on the reveal Wallet Id dialog.', }, }); - type Props = { - onRevealPublicKey: Function, - onClose: Function, - error: ?LocalizableError, - hasReceivedWalletPublicKey: boolean, - walletName: string, + onRevealPublicKey: (...args: Array) => any; + onClose: (...args: Array) => any; + error: LocalizableError | null | undefined; + hasReceivedWalletPublicKey: boolean; + walletName: string; }; @observer @@ -49,6 +46,7 @@ class WalletPublicKeyDialog extends Component { componentDidUpdate() { const { hasReceivedWalletPublicKey, onClose } = this.props; + if (hasReceivedWalletPublicKey) { onClose(); } @@ -76,6 +74,7 @@ class WalletPublicKeyDialog extends Component { ), ]; } + return [true]; }, ], @@ -83,24 +82,26 @@ class WalletPublicKeyDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { const { spendingPassword } = form.values(); const { onRevealPublicKey } = this.props; - onRevealPublicKey({ spendingPassword }); + onRevealPublicKey({ + spendingPassword, + }); }, }); }; - handleSubmitOnEnter = submitOnEnter.bind(this, this.submit); render() { @@ -142,4 +143,4 @@ class WalletPublicKeyDialog extends Component { } } -export default WalletPublicKeyDialog \ No newline at end of file +export default WalletPublicKeyDialog; diff --git a/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.tsx b/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.tsx index 8f1855a474..313f706bb9 100644 --- a/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletPublicKeyQRCodeDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { observer } from 'mobx-react'; import { injectIntl, intlShape } from 'react-intl'; @@ -12,17 +11,15 @@ import iconCopy from '../../../assets/images/clipboard-ic.inline.svg'; import styles from './PublicKeyQRCodeDialog.scss'; import globalMessages from '../../../i18n/global-messages'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - type Props = { - walletName: string, - walletPublicKey: string, - onCopyWalletPublicKey: Function, - onClose: Function, - messages: { [string]: ReactIntlMessage }, - derivationPath: string, - intl: intlShape.isRequired, + walletName: string; + walletPublicKey: string; + onCopyWalletPublicKey: (...args: Array) => any; + onClose: (...args: Array) => any; + messages: Record; + derivationPath: string; + intl: intlShape.isRequired; }; - const WalletPublicKeyQRCodeDialog = observer((props: Props) => { const { walletName, @@ -33,14 +30,12 @@ const WalletPublicKeyQRCodeDialog = observer((props: Props) => { derivationPath, intl, } = props; - const actions = [ { label: intl.formatMessage(globalMessages.close), onClick: onClose, }, ]; - // Get QRCode color value from active theme's CSS variable const qrCodeBackgroundColor = document.documentElement ? document.documentElement.style.getPropertyValue( @@ -52,7 +47,6 @@ const WalletPublicKeyQRCodeDialog = observer((props: Props) => { '--theme-receive-qr-code-foreground-color' ) : '#000'; - return ( { ); }); - export default injectIntl(WalletPublicKeyQRCodeDialog); diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx index 1c3c5dc552..d5f94e1b51 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseStep1Dialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; @@ -7,7 +6,6 @@ import { CheckboxSkin } from 'react-polymorph/lib/skins/simple/CheckboxSkin'; import DialogCloseButton from '../../widgets/DialogCloseButton'; import Dialog from '../../widgets/Dialog'; import styles from './WalletRecoveryPhraseStepDialogs.scss'; - export const messages = defineMessages({ recoveryPhraseStep1Title: { id: 'wallet.settings.recoveryPhraseStep1Title', @@ -34,30 +32,23 @@ export const messages = defineMessages({ description: 'Label for the recoveryPhraseStep1Button on wallet settings.', }, }); - type Props = { - onContinue: Function, - onClose: Function, - walletName: string, + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; + walletName: string; }; - type State = { - safetyAgreement: boolean, + safetyAgreement: boolean; }; @observer -class WalletRecoveryPhraseStep1Dialog extends Component< - Props, - State -> { +class WalletRecoveryPhraseStep1Dialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { safetyAgreement: false, }; - onToggleSafetyAgreement = (checked: boolean) => { this.setState({ safetyAgreement: checked, @@ -69,7 +60,6 @@ class WalletRecoveryPhraseStep1Dialog extends Component< const { onContinue, onClose, walletName } = this.props; const { safetyAgreement } = this.state; const isSubmitting = false; - const actions = [ { className: isSubmitting ? styles.isSubmitting : null, @@ -79,7 +69,6 @@ class WalletRecoveryPhraseStep1Dialog extends Component< disabled: !safetyAgreement, }, ]; - return ( , - walletName: string, + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; + expectedWordCount: number | Array; + walletName: string; }; - type State = { - isVerifying: boolean, + isVerifying: boolean; }; @observer -class WalletRecoveryPhraseStep2Dialog extends Component< - Props, - State -> { +class WalletRecoveryPhraseStep2Dialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { isVerifying: false, }; - form = new ReactToolboxMobxForm( { fields: { @@ -105,7 +96,9 @@ class WalletRecoveryPhraseStep2Dialog extends Component< }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, }, @@ -119,7 +112,6 @@ class WalletRecoveryPhraseStep2Dialog extends Component< const { isVerifying } = this.state; const recoveryPhraseField = form.$('recoveryPhrase'); const { length: enteredWordCount } = recoveryPhraseField.value; - const canSubmit = !recoveryPhraseField.error && !isVerifying && @@ -133,17 +125,19 @@ class WalletRecoveryPhraseStep2Dialog extends Component< label: intl.formatMessage(messages.recoveryPhraseStep2Button), primary: true, onClick: () => { - this.setState({ isVerifying: true }); - onContinue({ recoveryPhrase }); + this.setState({ + isVerifying: true, + }); + onContinue({ + recoveryPhrase, + }); }, disabled: !canSubmit, }, ]; - const maxSelections = Array.isArray(expectedWordCount) ? Math.max(...expectedWordCount) : expectedWordCount; - return ( ) => any; + walletName: string; }; - type State = { - safetyAgreement: boolean, + safetyAgreement: boolean; }; @observer -class WalletRecoveryPhraseStep3Dialog extends Component< - Props, - State -> { +class WalletRecoveryPhraseStep3Dialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { safetyAgreement: false, }; - onToggleSafetyAgreement = (checked: boolean) => { this.setState({ safetyAgreement: checked, @@ -68,7 +59,6 @@ class WalletRecoveryPhraseStep3Dialog extends Component< const { intl } = this.context; const { onClose, walletName } = this.props; const { safetyAgreement } = this.state; - const actions = [ { label: intl.formatMessage(messages.recoveryPhraseStep3Button), @@ -77,9 +67,7 @@ class WalletRecoveryPhraseStep3Dialog extends Component< disabled: !safetyAgreement, }, ]; - const dialogStyles = classnames([styles.dialog, 'verification-successful']); - return ( ) => any; + onContinue: (...args: Array) => any; + openExternalLink: (...args: Array) => any; + walletName: string; }; @observer @@ -61,10 +58,10 @@ class WalletRecoveryPhraseStep4Dialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; + render() { const { intl } = this.context; const { onClose, onContinue, openExternalLink, walletName } = this.props; - const actions = [ { label: intl.formatMessage(messages.recoveryPhraseStep4Button), @@ -72,13 +69,11 @@ class WalletRecoveryPhraseStep4Dialog extends Component { className: 'attention', }, ]; - const dialogStyles = classnames([ styles.dialog, styles.dialog4, 'verification-unsuccessful', ]); - return ( { } } -export default WalletRecoveryPhraseStep4Dialog \ No newline at end of file +export default WalletRecoveryPhraseStep4Dialog; diff --git a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx index 08ba087dae..280b9aba3c 100644 --- a/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx +++ b/source/renderer/app/components/wallet/settings/WalletRecoveryPhraseVerificationWidget.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { camelCase } from 'lodash'; @@ -19,7 +18,6 @@ import { } from '../../../config/walletRecoveryPhraseVerificationConfig'; import { getStatusFromWalletData } from '../../../utils/walletRecoveryPhraseVerificationUtils'; import { LOCALES } from '../../../../../common/types/locales.types'; - export const messages = defineMessages({ title: { id: 'wallet.settings.recoveryPhraseVerification.title', @@ -123,14 +121,13 @@ export const messages = defineMessages({ 'Label for the recoveryPhraseVerificationButton on wallet settings.', }, }); - export type Props = { - creationDate: Date, - recoveryPhraseVerificationDate: ?Date, - onVerify: Function, - wordCount: number, - locale: string, - isLegacy: boolean, + creationDate: Date; + recoveryPhraseVerificationDate: Date | null | undefined; + onVerify: (...args: Array) => any; + wordCount: number; + locale: string; + isLegacy: boolean; }; @observer @@ -234,26 +231,24 @@ class WalletRecoveryPhraseVerificationWidget extends Component { creationDate, recoveryPhraseVerificationDate, }); - const statusStyle = camelCase(`status ${recoveryPhraseVerificationStatus}`); const statusStyles = classnames([styles.status, styles[statusStyle]]); - let statusButtonType = 'flat'; if (recoveryPhraseVerificationStatus === statuses.WARNING) statusButtonType = 'primary'; else if (recoveryPhraseVerificationStatus === statuses.NOTIFICATION) statusButtonType = 'attention'; - const statusButtonStyles = classnames([ styles.statusButton, statusButtonType, ]); - return (

    {intl.formatMessage(messages.title)}

    - {intl.formatMessage(messages.description, { wordCount })} + {intl.formatMessage(messages.description, { + wordCount, + })} {isLegacy && ( <>   @@ -295,4 +290,4 @@ class WalletRecoveryPhraseVerificationWidget extends Component { } } -export default WalletRecoveryPhraseVerificationWidget \ No newline at end of file +export default WalletRecoveryPhraseVerificationWidget; diff --git a/source/renderer/app/components/wallet/settings/WalletSettings.tsx b/source/renderer/app/components/wallet/settings/WalletSettings.tsx index c9a29c26ee..525ae9f173 100644 --- a/source/renderer/app/components/wallet/settings/WalletSettings.tsx +++ b/source/renderer/app/components/wallet/settings/WalletSettings.tsx @@ -1,4 +1,3 @@ -// @flow import type { Node } from 'react'; import React, { Component } from 'react'; import { observer } from 'mobx-react'; @@ -32,8 +31,7 @@ import ICOPublicKeyQRCodeDialog from './ICOPublicKeyQRCodeDialog'; import WalletPublicKeyDialog from './WalletPublicKeyDialog'; import WalletPublicKeyQRCodeDialog from './WalletPublicKeyQRCodeDialog'; import type { ReactIntlMessage } from '../../../types/i18nTypes'; - -export const messages: { [string]: ReactIntlMessage } = defineMessages({ +export const messages: Record = defineMessages({ assuranceLevelLabel: { id: 'wallet.settings.assurance', defaultMessage: '!!!Transaction assurance security level', @@ -97,51 +95,49 @@ export const messages: { [string]: ReactIntlMessage } = defineMessages({ description: "You still don't have password set message.", }, }); - type Props = { - walletId: string, - walletName: string, - isRestoring: boolean, - isSyncing: boolean, - isDelegating: boolean, - walletPublicKey: ?string, - icoPublicKey: ?string, - creationDate: Date, - spendingPasswordUpdateDate: ?Date, - error?: ?LocalizableError, - openDialogAction: Function, - isDialogOpen: Function, - onFieldValueChange: Function, - onStartEditing: Function, - onStopEditing: Function, - onCancel: Function, - onVerifyRecoveryPhrase: Function, - onCopyWalletPublicKey: Function, - onCopyICOPublicKey: Function, - updateDataForActiveDialogAction: Function, - onDelegateClick: Function, - nameValidator: Function, - isLegacy: boolean, - changeSpendingPasswordDialog: Node, - walletPublicKeyDialogContainer: Node, - icoPublicKeyDialogContainer: Node, - walletPublicKeyQRCodeDialogContainer: Node, - icoPublicKeyQRCodeDialogContainer: Node, - undelegateWalletDialogContainer: Node, - deleteWalletDialogContainer: Node, - unpairWalletDialogContainer: Node, - shouldDisplayRecoveryPhrase: boolean, - recoveryPhraseVerificationDate: ?Date, - recoveryPhraseVerificationStatus: string, - recoveryPhraseVerificationStatusType: string, - wordCount: number, - locale: Locale, - isSpendingPasswordSet: boolean, - isHardwareWallet: boolean, + walletId: string; + walletName: string; + isRestoring: boolean; + isSyncing: boolean; + isDelegating: boolean; + walletPublicKey: string | null | undefined; + icoPublicKey: string | null | undefined; + creationDate: Date; + spendingPasswordUpdateDate: Date | null | undefined; + error?: LocalizableError | null | undefined; + openDialogAction: (...args: Array) => any; + isDialogOpen: (...args: Array) => any; + onFieldValueChange: (...args: Array) => any; + onStartEditing: (...args: Array) => any; + onStopEditing: (...args: Array) => any; + onCancel: (...args: Array) => any; + onVerifyRecoveryPhrase: (...args: Array) => any; + onCopyWalletPublicKey: (...args: Array) => any; + onCopyICOPublicKey: (...args: Array) => any; + updateDataForActiveDialogAction: (...args: Array) => any; + onDelegateClick: (...args: Array) => any; + nameValidator: (...args: Array) => any; + isLegacy: boolean; + changeSpendingPasswordDialog: Node; + walletPublicKeyDialogContainer: Node; + icoPublicKeyDialogContainer: Node; + walletPublicKeyQRCodeDialogContainer: Node; + icoPublicKeyQRCodeDialogContainer: Node; + undelegateWalletDialogContainer: Node; + deleteWalletDialogContainer: Node; + unpairWalletDialogContainer: Node; + shouldDisplayRecoveryPhrase: boolean; + recoveryPhraseVerificationDate: Date | null | undefined; + recoveryPhraseVerificationStatus: string; + recoveryPhraseVerificationStatusType: string; + wordCount: number; + locale: Locale; + isSpendingPasswordSet: boolean; + isHardwareWallet: boolean; }; - type State = { - isFormBlocked: boolean, + isFormBlocked: boolean; }; @observer @@ -149,7 +145,6 @@ class WalletSettings extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { isFormBlocked: false, }; @@ -157,6 +152,7 @@ class WalletSettings extends Component { componentDidUpdate() { const { isDialogOpen } = this.props; const { isFormBlocked } = this.state; + // Set "name" input to active and "unblock form" on Dialog close if ( !isDialogOpen(WalletSettingsActionConfirmationDialog) && @@ -173,13 +169,15 @@ class WalletSettings extends Component { } onBlockForm = () => { - this.setState({ isFormBlocked: true }); + this.setState({ + isFormBlocked: true, + }); }; - unblockForm = () => { - this.setState({ isFormBlocked: false }); + this.setState({ + isFormBlocked: false, + }); }; - onUndelegateWalletClick = async () => { const { walletId, @@ -191,10 +189,11 @@ class WalletSettings extends Component { dialog: UndelegateWalletConfirmationDialog, }); updateDataForActiveDialogAction({ - data: { walletId }, + data: { + walletId, + }, }); }; - renderUndelegateWalletBox = () => { const { intl } = this.context; const { @@ -289,12 +288,9 @@ class WalletSettings extends Component { deleteWalletDialogContainer, unpairWalletDialogContainer, } = this.props; - const { isFormBlocked } = this.state; - // Set Japanese locale to moment. Default is en-US moment.locale(momentLocales[locale]); - const passwordMessage = isSpendingPasswordSet ? intl.formatMessage(messages.passwordLastUpdated, { lastUpdated: moment(spendingPasswordUpdateDate) @@ -302,7 +298,6 @@ class WalletSettings extends Component { .fromNow(), }) : intl.formatMessage(messages.passwordNotSet); - return (
    @@ -411,4 +406,4 @@ class WalletSettings extends Component { } } -export default WalletSettings \ No newline at end of file +export default WalletSettings; diff --git a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.tsx b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.tsx index 6f1d58f440..f5d4848b38 100644 --- a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.tsx +++ b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveButton.tsx @@ -1,13 +1,11 @@ -// @flow import React from 'react'; import { Button } from 'react-polymorph/lib/components/Button'; import { ButtonSkin } from 'react-polymorph/lib/skins/simple/ButtonSkin'; import styles from './RemoveWalletButton.scss'; - type Props = { - onClick: Function, - label: string, - disabled?: boolean, + onClick: (...args: Array) => any; + label: string; + disabled?: boolean; }; const WalletSettingsRemoveButton = ({ diff --git a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.tsx b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.tsx index feffde9328..f2d39b1959 100644 --- a/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/settings/WalletSettingsRemoveConfirmationDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import classnames from 'classnames'; import { FormattedHTMLMessage, injectIntl, intlShape } from 'react-intl'; @@ -10,37 +9,33 @@ import globalMessages from '../../../i18n/global-messages'; import { DELETE_WALLET_COUNTDOWN } from '../../../config/timingConfig'; import LoadingSpinner from '../../widgets/LoadingSpinner'; import DeleteWalletConfirmation from './DeleteWalletConfirmation'; - export type WalletSettingRemoveMessages = { - dialogTitle: Message, - confirmButtonLabel: Message, - confirmationQuestion: $Exact, - confirmBackupNotice: Message, - enterRecoveryWordLabel: Message, + dialogTitle: Message; + confirmButtonLabel: Message; + confirmationQuestion: Message; + confirmBackupNotice: Message; + enterRecoveryWordLabel: Message; }; - type Message = { - id: string, - defaultMessage: string, - description: string, + id: string; + defaultMessage: string; + description: string; }; - type Props = { - walletName: string, - countdownFn: Function, - isBackupNoticeAccepted: boolean, - confirmationValue: string, - onAcceptBackupNotice: Function, - onContinue: Function, - onCancel: Function, - onConfirmationValueChange: Function, - isSubmitting: boolean, - isTest: boolean, - isUnpair: boolean, - messages: WalletSettingRemoveMessages, - intl: intlShape.isRequired, + walletName: string; + countdownFn: (...args: Array) => any; + isBackupNoticeAccepted: boolean; + confirmationValue: string; + onAcceptBackupNotice: (...args: Array) => any; + onContinue: (...args: Array) => any; + onCancel: (...args: Array) => any; + onConfirmationValueChange: (...args: Array) => any; + isSubmitting: boolean; + isTest: boolean; + isUnpair: boolean; + messages: WalletSettingRemoveMessages; + intl: intlShape.isRequired; }; - const WalletSettingsRemoveConfirmationDialog = observer((props: Props) => { const { countdownFn, @@ -57,31 +52,28 @@ const WalletSettingsRemoveConfirmationDialog = observer((props: Props) => { messages, intl, } = props; - const countdownRemaining = countdownFn(isTest ? 0 : DELETE_WALLET_COUNTDOWN); const countdownDisplay = !isUnpair && countdownRemaining > 0 ? ` (${countdownRemaining})` : ''; const isCountdownFinished = countdownRemaining <= 0; const isWalletNameConfirmationCorrect = - confirmationValue.normalize('NFKC') === walletName.normalize('NFKC'); // Always normalize non-breaking space into regular space. + confirmationValue.normalize('NFKC') === walletName.normalize('NFKC'); + // Always normalize non-breaking space into regular space. const isDisabled = !isUnpair && (!isCountdownFinished || !isBackupNoticeAccepted || !isWalletNameConfirmationCorrect); const handleSubmit = React.useCallback(() => !isDisabled && onContinue()); - const buttonClasses = classnames([ 'attention', isSubmitting ? styles.isSubmitting : null, ]); - const buttonLabel = !isSubmitting ? ( `${intl.formatMessage(messages.confirmButtonLabel)} ${countdownDisplay}` ) : ( ); - const actions = [ { label: intl.formatMessage(globalMessages.cancel), @@ -95,7 +87,6 @@ const WalletSettingsRemoveConfirmationDialog = observer((props: Props) => { primary: true, }, ]; - return ( { {!isUnpair && ( @@ -126,5 +119,4 @@ const WalletSettingsRemoveConfirmationDialog = observer((props: Props) => { ); }); - export default injectIntl(WalletSettingsRemoveConfirmationDialog); diff --git a/source/renderer/app/components/wallet/skins/AmountInputSkin.tsx b/source/renderer/app/components/wallet/skins/AmountInputSkin.tsx index b45b33fa6e..47b092c870 100644 --- a/source/renderer/app/components/wallet/skins/AmountInputSkin.tsx +++ b/source/renderer/app/components/wallet/skins/AmountInputSkin.tsx @@ -1,10 +1,8 @@ -// @flow import React, { Component } from 'react'; import { defineMessages, intlShape } from 'react-intl'; import BigNumber from 'bignumber.js'; import { InputSkin } from 'react-polymorph/lib/skins/simple/InputSkin'; import styles from './AmountInputSkin.scss'; - export const messages = defineMessages({ feesLabel: { id: 'wallet.amountInput.feesLabel', @@ -19,15 +17,13 @@ export const messages = defineMessages({ 'Label for the "Calculating fees" message above amount input field.', }, }); - type Props = { - currency: string, - fees: ?BigNumber, - total: ?BigNumber, - error: boolean, - isCalculatingFees: boolean, + currency: string; + fees: BigNumber | null | undefined; + total: BigNumber | null | undefined; + error: boolean; + isCalculatingFees: boolean; }; - export default class AmountInputSkin extends Component { static contextTypes = { intl: intlShape.isRequired, @@ -36,7 +32,6 @@ export default class AmountInputSkin extends Component { render() { const { error, fees, total, currency, isCalculatingFees } = this.props; const { intl } = this.context; - return (
    @@ -47,7 +42,9 @@ export default class AmountInputSkin extends Component { )} {fees && !error && !isCalculatingFees && ( - {intl.formatMessage(messages.feesLabel, { amount: fees })} + {intl.formatMessage(messages.feesLabel, { + amount: fees, + })} )} diff --git a/source/renderer/app/components/wallet/summary/WalletSummary.tsx b/source/renderer/app/components/wallet/summary/WalletSummary.tsx index bd55cbf1a3..6f77d8fd6c 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummary.tsx +++ b/source/renderer/app/components/wallet/summary/WalletSummary.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; @@ -9,7 +8,6 @@ import WalletSummaryCurrency from './WalletSummaryCurrency'; import type { AssetToken } from '../../../api/assets/types'; import WalletTokensList from '../tokens/wallet-tokens-list/WalletTokensList'; import { MAX_TOKENS_ON_SUMMARY_PAGE } from '../../../config/numbersConfig'; - const messages = defineMessages({ tokensListTitle: { id: 'wallet.summary.assets.tokensTitle', @@ -17,30 +15,29 @@ const messages = defineMessages({ description: 'Tokens title in the wallet summary', }, }); - type Props = { - wallet: Wallet, - numberOfRecentTransactions: number, - numberOfTransactions?: number, - numberOfPendingTransactions: number, - isLoadingTransactions: boolean, - currentLocale: string, - currencyIsFetchingRate: boolean, - currencyIsActive: boolean, - currencySelected: ?Currency, - currencyRate: ?number, - currencyLastFetched: ?Date, - onCurrencySettingClick: Function, - assets: Array, - onOpenAssetSend: Function, - onCopyAssetParam: Function, - onAssetSettings: Function, - isLoadingAssets: boolean, - assetSettingsDialogWasOpened: boolean, - onExternalLinkClick: Function, - onViewAllButtonClick: Function, - onToggleFavorite: Function, - tokenFavorites: Object, + wallet: Wallet; + numberOfRecentTransactions: number; + numberOfTransactions?: number; + numberOfPendingTransactions: number; + isLoadingTransactions: boolean; + currentLocale: string; + currencyIsFetchingRate: boolean; + currencyIsActive: boolean; + currencySelected: Currency | null | undefined; + currencyRate: number | null | undefined; + currencyLastFetched: Date | null | undefined; + onCurrencySettingClick: (...args: Array) => any; + assets: Array; + onOpenAssetSend: (...args: Array) => any; + onCopyAssetParam: (...args: Array) => any; + onAssetSettings: (...args: Array) => any; + isLoadingAssets: boolean; + assetSettingsDialogWasOpened: boolean; + onExternalLinkClick: (...args: Array) => any; + onViewAllButtonClick: (...args: Array) => any; + onToggleFavorite: (...args: Array) => any; + tokenFavorites: Record; }; @observer @@ -75,9 +72,7 @@ class WalletSummary extends Component { tokenFavorites, } = this.props; const { intl } = this.context; - const { isRestoring } = wallet; - return ( <> { } } -export default WalletSummary \ No newline at end of file +export default WalletSummary; diff --git a/source/renderer/app/components/wallet/summary/WalletSummaryAsset.tsx b/source/renderer/app/components/wallet/summary/WalletSummaryAsset.tsx index 4ae19d96e5..34de4b6a0b 100644 --- a/source/renderer/app/components/wallet/summary/WalletSummaryAsset.tsx +++ b/source/renderer/app/components/wallet/summary/WalletSummaryAsset.tsx @@ -1,4 +1,3 @@ -// @flow import React, { useState } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape, injectIntl } from 'react-intl'; @@ -14,7 +13,6 @@ import AssetContent from '../../assets/AssetContent'; import type { AssetToken } from '../../../api/assets/types'; import arrow from '../../../assets/images/collapse-arrow-small.inline.svg'; import warningIcon from '../../../assets/images/asset-token-warning-ic.inline.svg'; - const messages = defineMessages({ tokenSendButton: { id: 'wallet.summary.asset.tokenSendButton', @@ -44,20 +42,17 @@ const messages = defineMessages({ description: 'Asset settings recommended pop over content', }, }); - type Props = { - asset: AssetToken, - onOpenAssetSend: Function, - onCopyAssetParam: Function, - onAssetSettings: Function, - anyAssetWasHovered: boolean, - isLoading: boolean, - assetSettingsDialogWasOpened: boolean, - intl: intlShape.isRequired, + asset: AssetToken; + onOpenAssetSend: (...args: Array) => any; + onCopyAssetParam: (...args: Array) => any; + onAssetSettings: (...args: Array) => any; + anyAssetWasHovered: boolean; + isLoading: boolean; + assetSettingsDialogWasOpened: boolean; + intl: intlShape.isRequired; }; - type IsExpanded = boolean; - const WalletSummaryAsset = observer((props: Props) => { const [isExpanded, setIsExpanded] = useState(false); @@ -136,6 +131,7 @@ const WalletSummaryAsset = observer((props: Props) => { decimals !== recommendedDecimals; let settingsButtonLabel = intl.formatMessage(messages.settingsButtonLabel); let warningPopOverMessage; + if (hasWarning) { warningPopOverMessage = typeof decimals === 'number' @@ -148,14 +144,18 @@ const WalletSummaryAsset = observer((props: Props) => { ); } + const settingsButton = (
    ); + if (!isDuplicate) { previousWalletId = wallet.id; rowNumber++; } + return walletRow; })} @@ -452,10 +449,12 @@ class WalletSelectImportDialog extends Component {
    ); + if (!isDuplicate) { previousWalletId = wallet.id; rowNumber++; } + return walletRow; })}
    @@ -491,4 +490,4 @@ class WalletSelectImportDialog extends Component { } } -export default WalletSelectImportDialog \ No newline at end of file +export default WalletSelectImportDialog; diff --git a/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx index e97689abdb..657c6a3542 100644 --- a/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/ConfigurationDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -24,7 +23,6 @@ import LocalizableError from '../../../i18n/LocalizableError'; import { FORM_VALIDATION_DEBOUNCE_WAIT } from '../../../config/timingConfig'; import infoIconInline from '../../../assets/images/info-icon.inline.svg'; import LoadingSpinner from '../../widgets/LoadingSpinner'; - const messages = defineMessages({ description1: { id: 'wallet.restore.dialog.step.configuration.description1', @@ -79,18 +77,17 @@ const messages = defineMessages({ description: 'Tooltip for the password input in the create wallet dialog.', }, }); - type Props = { - isSubmitting: boolean, - onContinue: Function, - onClose: Function, - onBack: Function, - onChange: Function, - walletName: string, - spendingPassword: string, - repeatPassword: string, - error?: ?LocalizableError, - currentLocale: string, + isSubmitting: boolean; + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; + onBack: (...args: Array) => any; + onChange: (...args: Array) => any; + walletName: string; + spendingPassword: string; + repeatPassword: string; + error?: LocalizableError | null | undefined; + currentLocale: string; }; @observer @@ -98,7 +95,6 @@ class ConfigurationDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - static defaultProps = { error: null, }; @@ -182,14 +178,15 @@ class ConfigurationDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, validationDebounceWait: FORM_VALIDATION_DEBOUNCE_WAIT, }, } ); - submit = () => { this.form.submit({ onSuccess: (form) => { @@ -198,12 +195,12 @@ class ConfigurationDialog extends Component { onContinue(walletName, spendingPassword); }, onError: () => - handleFormErrors('.ConfigurationDialog_error', { focusElement: true }), + handleFormErrors('.ConfigurationDialog_error', { + focusElement: true, + }), }); }; - handleSubmitOnEnter = submitOnEnter.bind(this, this.submit); - resetForm = () => { const { form } = this; // Cancel all debounced field validations @@ -218,29 +215,23 @@ class ConfigurationDialog extends Component { const { intl } = this.context; const { onClose, onBack, error, isSubmitting, currentLocale } = this.props; const { form } = this; - const walletNameField = form.$('walletName'); const spendingPasswordField = form.$('spendingPassword'); const repeatPasswordField = form.$('repeatPassword'); - const walletNameFieldClasses = classnames([ styles.walletName, 'walletName', ]); - const spendingPasswordClasses = classnames([ styles.spendingPasswordField, currentLocale === 'ja-JP' ? styles.jpLangTooltipIcon : '', ]); - const buttonLabel = !isSubmitting ? ( intl.formatMessage(messages.continueButtonLabel) ) : ( ); - const canSubmit = !isSubmitting && form.isValid; - return ( { } } -export default ConfigurationDialog \ No newline at end of file +export default ConfigurationDialog; diff --git a/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx index b9d2891d43..c5b7cf28c6 100644 --- a/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/MnemonicsDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; @@ -19,7 +18,6 @@ import type { WalletYoroiKind, WalletHardwareKind, } from '../../../types/walletRestoreTypes'; - const messages = defineMessages({ autocompletePlaceholder: { id: 'wallet.restore.dialog.step.mnemonics.autocomplete.placeholder', @@ -50,20 +48,19 @@ const messages = defineMessages({ description: 'Label for invalid recovery phrase', }, }); - type Props = { - onContinue: Function, - onClose: Function, - onBack: Function, - onSetWalletMnemonics: Function, - onValidateMnemonics: Function, - mnemonics: Array, - walletKind: ?WalletKind, - walletKindDaedalus: ?WalletDaedalusKind, - walletKindYoroi: ?WalletYoroiKind, - walletKindHardware: ?WalletHardwareKind, - expectedWordCount: Array | number, - maxWordCount: number, + onContinue: (...args: Array) => any; + onClose: (...args: Array) => any; + onBack: (...args: Array) => any; + onSetWalletMnemonics: (...args: Array) => any; + onValidateMnemonics: (...args: Array) => any; + mnemonics: Array; + walletKind: WalletKind | null | undefined; + walletKindDaedalus: WalletDaedalusKind | null | undefined; + walletKindYoroi: WalletYoroiKind | null | undefined; + walletKindHardware: WalletHardwareKind | null | undefined; + expectedWordCount: Array | number; + maxWordCount: number; }; @observer @@ -71,7 +68,6 @@ class MnemonicsDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - form = new ReactToolboxMobxForm( { fields: { @@ -90,13 +86,14 @@ class MnemonicsDialog extends Component { }, }, { - plugins: { vjf: vjf() }, + plugins: { + vjf: vjf(), + }, options: { validateOnChange: true, }, } ); - submit = () => { this.form.submit({ onSuccess: this.props.onContinue, @@ -174,4 +171,4 @@ class MnemonicsDialog extends Component { } } -export default MnemonicsDialog \ No newline at end of file +export default MnemonicsDialog; diff --git a/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.tsx index 571228bd00..cff3e67f0a 100644 --- a/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/SuccessDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import { defineMessages, FormattedHTMLMessage, intlShape } from 'react-intl'; import SVGInline from 'react-svg-inline'; @@ -13,7 +12,6 @@ import { WALLET_DAEDALUS_KINDS, WALLET_YOROI_KINDS, } from '../../../config/walletRestoreConfig'; - const messages = defineMessages({ closeButtonLabel: { id: 'wallet.restore.dialog.step.success.dialog.close', @@ -42,13 +40,11 @@ const messages = defineMessages({ 'Description "line 3" on the wallet restore "success" step dialog.', }, }); - type Props = { - onClose: Function, - walletKindDaedalus: ?WalletDaedalusKind, - walletKindYoroi: ?WalletYoroiKind, + onClose: (...args: Array) => any; + walletKindDaedalus: WalletDaedalusKind | null | undefined; + walletKindYoroi: WalletYoroiKind | null | undefined; }; - export default class SuccessDialog extends Component { static contextTypes = { intl: intlShape.isRequired, @@ -57,7 +53,6 @@ export default class SuccessDialog extends Component { render() { const { intl } = this.context; const { onClose, walletKindDaedalus, walletKindYoroi } = this.props; - const isDaedalusBalanceWallet = walletKindDaedalus === WALLET_DAEDALUS_KINDS.BYRON_12_WORD || walletKindDaedalus === WALLET_DAEDALUS_KINDS.BYRON_27_WORD; @@ -67,7 +62,6 @@ export default class SuccessDialog extends Component { walletKindYoroi === WALLET_YOROI_KINDS.BYRON_15_WORD; const isYoroiRewardsWallet = walletKindYoroi === WALLET_YOROI_KINDS.SHELLEY_15_WORD; - return ( ) => any; + onClose: (...args: Array) => any; + onSetWalletKind: (...args: Array) => any; + walletKind: WalletKind | null | undefined; + walletKindDaedalus: WalletDaedalusKind | null | undefined; + walletKindYoroi: WalletYoroiKind | null | undefined; + walletKindHardware: WalletHardwareKind | null | undefined; }; - -type State = { - [key: HardwareWalletAcceptance]: boolean, -}; - +type State = Record; export default class WalletTypeDialog extends Component { static contextTypes = { intl: intlShape.isRequired, }; - state = { hardwareWalletAcceptance1: false, hardwareWalletAcceptance2: false, hardwareWalletAcceptance3: false, }; - toggleAcceptance = (param: HardwareWalletAcceptance) => this.setState((currentState) => set({}, param, !currentState[param])); - getWalletKind = ( - kinds: Object, + kinds: Record, message: string, - value: ?string, + value: string | null | undefined, kindParam?: string ) => ( { const kind: WalletKinds = kinds[key]; const messageParam = `label${kindParam || ''}WalletKind${kind}`; const msg = messages[messageParam]; + if (!msg) { throw new Error(`Missing ${messageParam} message`); } + return { key: kind, disabled: false, diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx index eaf7878923..28c261c2b3 100644 --- a/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/widgets/ConfirmationDialog.tsx @@ -1,11 +1,9 @@ -// @flow import React, { Component } from 'react'; import { observer } from 'mobx-react'; import classnames from 'classnames'; import { defineMessages, intlShape } from 'react-intl'; import Dialog from '../../../widgets/Dialog'; import styles from './ConfirmationDialog.scss'; - const messages = defineMessages({ headline: { id: 'wallet.restore.dialog.confirmation.headline', @@ -33,10 +31,9 @@ const messages = defineMessages({ '"Abort" button label for the wallet restoration cancellation confirmation dialog.', }, }); - type Props = { - onConfirm: Function, - onCancel: Function, + onConfirm: (...args: Array) => any; + onCancel: (...args: Array) => any; }; @observer @@ -48,15 +45,11 @@ class ConfirmationDialog extends Component { render() { const { intl } = this.context; const { onConfirm, onCancel } = this.props; - const dialogClasses = classnames([styles.component, 'ConfirmDialog']); - const confirmButtonClasses = classnames([ - 'confirmButton', - // 'attention', + 'confirmButton', // 'attention', styles.confirmButton, ]); - const actions = [ { className: 'cancelButton', @@ -70,7 +63,6 @@ class ConfirmationDialog extends Component { onClick: onConfirm, }, ]; - return ( { } } -export default ConfirmationDialog \ No newline at end of file +export default ConfirmationDialog; diff --git a/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.tsx b/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.tsx index e16fe2c590..fadd815226 100644 --- a/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.tsx +++ b/source/renderer/app/components/wallet/wallet-restore/widgets/WalletRestoreDialog.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Component } from 'react'; import type { Node } from 'react'; import { defineMessages, intlShape, FormattedHTMLMessage } from 'react-intl'; @@ -10,7 +9,6 @@ import styles from './WalletRestoreDialog.scss'; import { RESTORE_WALLET_STEPS } from '../../../../config/walletRestoreConfig'; import type { DialogActionItems } from '../../../widgets/Dialog'; import type { RestoreWalletStep } from '../../../../types/walletRestoreTypes'; - const messages = defineMessages({ dialogTitle: { id: 'wallet.restore.dialog.title', @@ -28,15 +26,13 @@ const messages = defineMessages({ description: 'Step couters in the wallet restore dialog.', }, }); - type Props = { - stepNumber?: number, - actions?: DialogActionItems, - onClose?: Function, - onBack?: Function, - children: Node, + stepNumber?: number; + actions?: DialogActionItems; + onClose?: (...args: Array) => any; + onBack?: (...args: Array) => any; + children: Node; }; - export default class WalletRestoreDialog extends Component { static contextTypes = { intl: intlShape.isRequired, @@ -64,7 +60,6 @@ export default class WalletRestoreDialog extends Component { }} /> ); - return ( { static contextTypes = { intl: intlShape.isRequired, @@ -39,7 +35,7 @@ export default class WalletRestoreSteps extends Component { } get stepsList() { - return (this: any).filteredSteps.map((stepId) => + return (this as any).filteredSteps.map((stepId) => this.context.intl.formatMessage(messages[`${stepId}Step`]) ); } diff --git a/source/renderer/app/components/widgets/BackToTopButton.tsx b/source/renderer/app/components/widgets/BackToTopButton.tsx index 75f7145d82..55b456dfd3 100644 --- a/source/renderer/app/components/widgets/BackToTopButton.tsx +++ b/source/renderer/app/components/widgets/BackToTopButton.tsx @@ -1,10 +1,8 @@ -// @flow import React, { Component } from 'react'; import classnames from 'classnames'; import { defineMessages, intlShape } from 'react-intl'; import { throttle } from 'lodash'; import styles from './BackToTopButton.scss'; - const messages = defineMessages({ backToTopLabel: { id: 'backToTopButton.label', @@ -12,40 +10,32 @@ const messages = defineMessages({ description: '"backToTop" button label.', }, }); - type Props = { - scrollableElementClassName: string, - buttonTopPosition: number, - scrollTopToActivate: number, - isForceHidden?: boolean, + scrollableElementClassName: string; + buttonTopPosition: number; + scrollTopToActivate: number; + isForceHidden?: boolean; }; - type State = { - isActive: boolean, + isActive: boolean; }; - export default class BackToTopButton extends Component { static contextTypes = { intl: intlShape.isRequired, }; - static defaultProps = { scrollTopToActivate: 20, buttonTopPosition: 20, isForceHidden: false, }; - state = { isActive: false, }; - _isMounted = false; - - scrollableDomElement: ?HTMLElement = null; + scrollableDomElement: HTMLElement | null | undefined = null; componentDidMount() { this._isMounted = true; - setTimeout(() => { if (this._isMounted) { this.scrollableDomElement = document.querySelector( @@ -60,6 +50,7 @@ export default class BackToTopButton extends Component { }) ); } + return null; }, 0); } @@ -76,22 +67,28 @@ export default class BackToTopButton extends Component { this.getIsBackToTopActive ); } + return null; } getIsBackToTopActive = () => { const { isActive } = this.state; const { scrollTopToActivate } = this.props; + if (this.scrollableDomElement instanceof HTMLElement && this._isMounted) { const scrollPosition = this.scrollableDomElement.scrollTop; + if (scrollPosition > scrollTopToActivate && !isActive) { - this.setState({ isActive: true }); + this.setState({ + isActive: true, + }); } else if (scrollPosition <= scrollTopToActivate && isActive) { - this.setState({ isActive: false }); + this.setState({ + isActive: false, + }); } } }; - backToTop = () => { if (this.scrollableDomElement instanceof HTMLElement) { this.scrollableDomElement.scrollTop = 0; @@ -106,12 +103,12 @@ export default class BackToTopButton extends Component { [styles.isActive]: isActive, }); const top = isActive ? buttonTopPosition : buttonTopPosition - 10; - if (isForceHidden) return null; - return (
    diff --git a/source/renderer/app/components/widgets/DialogBackButton.tsx b/source/renderer/app/components/widgets/DialogBackButton.tsx index 1d3881ce8c..f290097688 100644 --- a/source/renderer/app/components/widgets/DialogBackButton.tsx +++ b/source/renderer/app/components/widgets/DialogBackButton.tsx @@ -1,13 +1,10 @@ -// @flow import React, { Component } from 'react'; import SVGInline from 'react-svg-inline'; import backArrow from '../../assets/images/back-arrow-ic.inline.svg'; import styles from './DialogBackButton.scss'; - type Props = { - onBack: Function, + onBack: (...args: Array) => any; }; - export default class DialogBackButton extends Component { render() { const { onBack } = this.props; diff --git a/source/renderer/app/components/widgets/DialogCloseButton.tsx b/source/renderer/app/components/widgets/DialogCloseButton.tsx index 1828a8b38f..12a9f19aba 100644 --- a/source/renderer/app/components/widgets/DialogCloseButton.tsx +++ b/source/renderer/app/components/widgets/DialogCloseButton.tsx @@ -1,16 +1,13 @@ -// @flow import React, { Component } from 'react'; import SVGInline from 'react-svg-inline'; import closeCross from '../../assets/images/close-cross.inline.svg'; import styles from './DialogCloseButton.scss'; - type Props = { - onClose?: Function, - icon?: string, - disabled?: boolean, - className?: string, + onClose?: (...args: Array) => any; + icon?: string; + disabled?: boolean; + className?: string; }; - export default class DialogCloseButton extends Component { render() { const { onClose, icon, disabled, className } = this.props; diff --git a/source/renderer/app/components/widgets/ExternalLinkButton.tsx b/source/renderer/app/components/widgets/ExternalLinkButton.tsx index dbdb427c88..041b292b4e 100644 --- a/source/renderer/app/components/widgets/ExternalLinkButton.tsx +++ b/source/renderer/app/components/widgets/ExternalLinkButton.tsx @@ -1,21 +1,15 @@ -// @flow import React from 'react'; - import classnames from 'classnames'; import { Button } from 'react-polymorph/lib/components/Button'; import SVGInline from 'react-svg-inline'; import externalLinkIcon from '../../assets/images/external-link-ic.inline.svg'; - import styles from './ExternalLinkButton.scss'; - type Props = { - label: string, - onClick: Function, + label: string; + onClick: (...args: Array) => any; }; - export function ExternalLinkButton({ label, onClick }: Props) { const buttonStyles = classnames(['flat', styles.overrideButton]); - return (