From 59fd7f38f2b5f5bb196d45a790ea4f04f7dbfaa7 Mon Sep 17 00:00:00 2001 From: Huiqi ZHENG Date: Thu, 31 Mar 2022 15:51:59 +0200 Subject: [PATCH 01/77] add User-agent as http header --- src/components/TabIcon.js | 2 +- src/families/index.js | 1 - src/live-common-setup.js | 10 ++++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/TabIcon.js b/src/components/TabIcon.js index 5d159b7625..390ae76038 100644 --- a/src/components/TabIcon.js +++ b/src/components/TabIcon.js @@ -2,8 +2,8 @@ import React from "react"; import { View, StyleSheet } from "react-native"; import { useTranslation } from "react-i18next"; -import LText from "./LText"; import styled from "styled-components/native"; +import LText from "./LText"; const ICON_SIZE = 24; diff --git a/src/families/index.js b/src/families/index.js index 36a628392a..b1f2d141e9 100644 --- a/src/families/index.js +++ b/src/families/index.js @@ -9,4 +9,3 @@ export * from "./algorand"; export * from "./polkadot"; export * from "./solana"; export * from "./crypto_org"; - diff --git a/src/live-common-setup.js b/src/live-common-setup.js index 315a687f43..86d058e083 100644 --- a/src/live-common-setup.js +++ b/src/live-common-setup.js @@ -12,6 +12,9 @@ import { setPlatformVersion } from "@ledgerhq/live-common/lib/platform/version"; import { registerTransportModule } from "@ledgerhq/live-common/lib/hw"; import type { TransportModule } from "@ledgerhq/live-common/lib/hw"; import { setDeviceMode } from "@ledgerhq/live-common/lib/hw/actions/app"; +import VersionNumber from "react-native-version-number"; +import { Platform } from "react-native"; +import axios from "axios"; import BluetoothTransport from "./react-native-hw-transport-ble"; import "./experimental"; @@ -133,3 +136,10 @@ registerTransportModule({ open: id => BluetoothTransport.open(id), disconnect: id => BluetoothTransport.disconnect(id), }); + +if (process.env.NODE_ENV === "production") { + axios.defaults.headers.common["User-Agent"] = + Platform.OS === "ios" + ? `Live-IOS/${VersionNumber.appVersion}` + : `Live-Android/${VersionNumber.appVersion}`; +} From 0df7ab033920ceb2fe5a8c11251d472c11074466 Mon Sep 17 00:00:00 2001 From: Huiqi ZHENG Date: Thu, 31 Mar 2022 15:59:15 +0200 Subject: [PATCH 02/77] small refactoring --- src/components/TabIcon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/TabIcon.js b/src/components/TabIcon.js index 390ae76038..5d159b7625 100644 --- a/src/components/TabIcon.js +++ b/src/components/TabIcon.js @@ -2,8 +2,8 @@ import React from "react"; import { View, StyleSheet } from "react-native"; import { useTranslation } from "react-i18next"; -import styled from "styled-components/native"; import LText from "./LText"; +import styled from "styled-components/native"; const ICON_SIZE = 24; From 7557fb7b0e32b84aaa527cdedab3a5ada476f9e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Apr 2022 16:46:11 +0200 Subject: [PATCH 03/77] Bump urijs from 1.19.10 to 1.19.11 (#2426) Bumps [urijs](https://github.com/medialize/URI.js) from 1.19.10 to 1.19.11. - [Release notes](https://github.com/medialize/URI.js/releases) - [Changelog](https://github.com/medialize/URI.js/blob/gh-pages/CHANGELOG.md) - [Commits](https://github.com/medialize/URI.js/compare/v1.19.10...v1.19.11) --- updated-dependencies: - dependency-name: urijs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 607246e10c..0eaff247e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16824,9 +16824,9 @@ uri-js@^4.2.2: punycode "^2.1.0" urijs@^1.19.1: - version "1.19.10" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.10.tgz#8e2fe70a8192845c180f75074884278f1eea26cb" - integrity sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg== + version "1.19.11" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" + integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== urix@^0.1.0: version "0.1.0" From 91d5f107dac04b619429f419eb9bcf1a71d049f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Apr 2022 16:46:33 +0200 Subject: [PATCH 04/77] Bump plist from 3.0.4 to 3.0.5 (#2421) Bumps [plist](https://github.com/TooTallNate/node-plist) from 3.0.4 to 3.0.5. - [Release notes](https://github.com/TooTallNate/node-plist/releases) - [Changelog](https://github.com/TooTallNate/plist.js/blob/master/History.md) - [Commits](https://github.com/TooTallNate/node-plist/commits) --- updated-dependencies: - dependency-name: plist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0eaff247e7..4a84e2fd64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13660,9 +13660,9 @@ pkg-up@^3.1.0: find-up "^3.0.0" plist@^3.0.2, plist@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" - integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== dependencies: base64-js "^1.5.1" xmlbuilder "^9.0.7" From 20e1ea9fc02ab17bc5edc8e752fea815d9688e4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Apr 2022 16:47:24 +0200 Subject: [PATCH 05/77] Bump moment from 2.29.1 to 2.29.2 (#2410) Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.2. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.2) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4a84e2fd64..52c777f72b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12629,9 +12629,9 @@ mockdate@^3.0.2: integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ== moment@^2.19.3, moment@^2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + version "2.29.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" + integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== morgan@^1.6.1: version "1.10.0" From 69cfdc731af4a05ef699d47cc35a6f91e5c1bc37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Apr 2022 16:48:17 +0200 Subject: [PATCH 06/77] Bump minimist from 1.2.5 to 1.2.6 (#2411) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 52c777f72b..e5605d88c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12528,9 +12528,9 @@ minimalistic-crypto-utils@^1.0.1: brace-expansion "^1.1.7" minimist@^1.1.1, minimist@^1.1.2, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" From ec1001c5cf13857ff529ee2c0a1ff504c62f3034 Mon Sep 17 00:00:00 2001 From: nparigi-ledger Date: Fri, 22 Apr 2022 17:57:24 +0200 Subject: [PATCH 07/77] Fix - Settings - touchable row without margin --- src/components/SettingsCard.tsx | 2 +- src/components/SettingsRow.tsx | 2 +- src/screens/Settings/SettingsNavigationScrollView.tsx | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/SettingsCard.tsx b/src/components/SettingsCard.tsx index 7ffe470572..e77fb7b084 100644 --- a/src/components/SettingsCard.tsx +++ b/src/components/SettingsCard.tsx @@ -37,7 +37,7 @@ function Card({ const StyledCard = styled(Card)` background-color: ${p => p.theme.colors.palette.background.main}; - padding: ${p => p.theme.space[7]}px 0; + padding: ${p => p.theme.space[7]}px ${p => p.theme.space[6]}px; flex-direction: row; align-items: center; `; diff --git a/src/components/SettingsRow.tsx b/src/components/SettingsRow.tsx index 9871a69267..14a8e01661 100644 --- a/src/components/SettingsRow.tsx +++ b/src/components/SettingsRow.tsx @@ -10,7 +10,7 @@ import Touchable from "./Touchable"; const StyledTouchableRow = styled(Touchable)<{ compact?: boolean }>` background-color: ${p => p.theme.colors.palette.background.main}; - padding: ${p => p.theme.space[p.compact ? 6 : 7]}px 0; + padding: ${p => p.theme.space[p.compact ? 6 : 7]}px ${p => p.theme.space[6]}px; flex-direction: row; align-items: center; border-bottom-color: ${p => p.theme.colors.palette.neutral.c40}; diff --git a/src/screens/Settings/SettingsNavigationScrollView.tsx b/src/screens/Settings/SettingsNavigationScrollView.tsx index 1e17d9abbd..30bafdc5d1 100644 --- a/src/screens/Settings/SettingsNavigationScrollView.tsx +++ b/src/screens/Settings/SettingsNavigationScrollView.tsx @@ -8,8 +8,6 @@ const styles = StyleSheet.create({ export const SettingsNavigationScrollView = styled(NavigationScrollView).attrs({ contentContainerStyle: styles.root, -})` - padding: 0 ${p => p.theme.space[6]}px; -`; +})``; export default SettingsNavigationScrollView; From 8755d84b5f9908658a9981b732806d49282d0619 Mon Sep 17 00:00:00 2001 From: Team Live Date: Fri, 22 Apr 2022 22:43:16 +0000 Subject: [PATCH 08/77] Bump android version to v3.0.8-36176142 (nightly) --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index ef085abb4f..72326c502b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -157,7 +157,7 @@ android { multiDexEnabled true minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 36176141 + versionCode 36176142 versionName "3.0.8" resValue "string", "build_config_package", "com.ledger.live" testBuildType System.getProperty('testBuildType', 'debug') From 686fc8301353ff10dcefc047bacae7f218beb923 Mon Sep 17 00:00:00 2001 From: Team Live Date: Mon, 25 Apr 2022 22:42:43 +0000 Subject: [PATCH 09/77] Bump android version to v3.0.8-36176143 (nightly) --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 72326c502b..7fdd9db8e5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -157,7 +157,7 @@ android { multiDexEnabled true minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 36176142 + versionCode 36176143 versionName "3.0.8" resValue "string", "build_config_package", "com.ledger.live" testBuildType System.getProperty('testBuildType', 'debug') From 0f9ff983ea19e6247289ba49de827d1474d87322 Mon Sep 17 00:00:00 2001 From: L Date: Tue, 26 Apr 2022 12:35:02 +0200 Subject: [PATCH 10/77] support/v3-cleanup (#2450) * support/cleanup removal of unused js files + linting * fix flow --- scripts/v3clean.js | 56 ++ src/analytics/TrackScreen.js | 26 - src/analytics/TrackScreen.tsx | 1 - src/colors.js | 154 ----- src/components/AccountCard.js | 135 ---- src/components/AccountGraphCard.js | 267 -------- src/components/AccountSectionLabel.js | 56 -- src/components/Alert.js | 361 ----------- src/components/BottomModal.js | 124 ---- src/components/BottomModalChoice.js | 110 ---- src/components/BottomModalChoice.tsx | 2 - src/components/Button.js | 362 ----------- .../CameraScreen/QRCodeBottomLayer.js | 62 -- src/components/CameraScreen/QRCodeTopLayer.js | 28 - src/components/Card.js | 31 - src/components/Carousel/Slide.js | 81 --- src/components/Carousel/index.js | 249 ------- src/components/CheckBox.js | 87 --- src/components/ChoiceButton.js | 115 ---- src/components/CurrencyIcon.js | 112 ---- src/components/CurrencyRate.js | 69 -- src/components/CurrencyUnitValue.js | 54 -- src/components/Delta.js | 82 --- src/components/DeviceAction/rendering.js | 610 ------------------ src/components/DeviceActionModal.js | 88 --- src/components/DiscreetModeButton.js | 38 -- src/components/ExternalLink.js | 64 -- src/components/FabAccountButtonBar.js | 228 ------- src/components/FabActions.js | 173 ----- src/components/FilteredSearchBar.js | 149 ----- src/components/FirmwareUpdateBanner.js | 255 -------- src/components/GenericErrorView.js | 134 ---- src/components/Graph/index.js | 3 +- src/components/GraphCard.js | 214 ------ src/components/HeaderBackImage.js | 21 - src/components/HeaderTitle.js | 26 - src/components/InfoModal.js | 168 ----- src/components/LText/index.js | 94 --- src/components/LText/index.tsx | 1 - src/components/ModalBottomAction.js | 68 -- src/components/NavigationScrollView.js | 26 - src/components/Nft/NftCollectionRow.js | 87 --- src/components/OperationRow.js | 294 --------- src/components/OperationRowNftName.js | 70 -- src/components/ParentCurrencyIcon.js | 53 -- src/components/PasswordInput.js | 146 ----- src/components/Pills.js | 121 ---- src/components/Placeholder.js | 43 -- src/components/RequireTerms.js | 213 ------ .../RequiresBLE/BluetoothDisabled.js | 67 -- .../RootNavigator/AccountsNavigator.js | 62 -- src/components/RootNavigator/BaseNavigator.js | 556 ---------------- .../CustomBlockRouterNavigator.js | 101 --- .../RootNavigator/ExchangeNavigator.js | 63 -- .../RootNavigator/ImportAccountsNavigator.js | 56 -- src/components/RootNavigator/MainNavigator.js | 145 ----- .../RootNavigator/ManagerNavigator.js | 106 --- .../NotificationCenterNavigator.js | 70 -- .../RootNavigator/OnboardingNavigator.js | 121 ---- .../RootNavigator/ReceiveFundsNavigator.js | 79 --- .../RootNavigator/SendFundsNavigator.js | 191 ------ .../RootNavigator/SettingsNavigator.js | 276 -------- .../RootNavigator/SwapFormNavigator.js | 79 --- src/components/RootNavigator/SwapNavigator.js | 96 --- src/components/SectionHeader.js | 27 - src/components/SelectDevice/BluetoothEmpty.js | 96 --- src/components/SelectDevice/DeviceItem.js | 91 --- .../SelectDevice/USBEmpty.android.js | 64 -- src/components/SelectDevice/index.js | 265 -------- src/components/SelectableAccountsList.js | 385 ----------- src/components/SettingsCard.js | 74 --- src/components/SettingsRow.js | 177 ----- src/components/StepHeader.js | 43 -- src/components/SubAccountRow.js | 144 ----- src/components/Switch.js | 17 - src/components/TabIcon.js | 63 -- src/components/TextInput.android.js | 172 ----- src/components/TextInput.ios.js | 58 -- src/components/TouchHintCircle.js | 111 ---- src/components/ValidateOnDevice.js | 252 -------- src/components/ValidateSuccess.js | 119 ---- src/components/useExportLogs.js | 42 -- src/config/urls.js | 150 ----- src/context/AuthPass/AuthScreen.js | 3 +- src/context/Locale.js | 2 +- src/families/algorand/Rewards/index.js | 127 ---- src/families/cosmos/Delegations/Row.js | 109 ---- src/families/cosmos/Delegations/index.js | 538 --------------- src/families/crypto_org/AccountSubHeader.js | 89 --- .../crypto_org/AccountSubHeaderDrawer.js | 81 --- src/families/elrond/AccountSubHeader.js | 89 --- src/families/elrond/AccountSubHeaderDrawer.js | 84 --- .../polkadot/NominateFlow/ValidatorItem.js | 2 +- src/families/polkadot/Nominations/Actions.js | 122 ---- .../polkadot/Nominations/NominationRow.js | 163 ----- src/families/polkadot/Nominations/index.js | 410 ------------ .../polkadot/components/CollapsibleList.js | 159 ----- src/families/polkadot/operationDetails.js | 451 ------------- src/families/tezos/AccountBodyHeader.js | 197 ------ src/families/tezos/AccountHeader.js | 79 --- src/families/tezos/DelegationFlow/Started.js | 125 ---- src/families/tezos/DelegationFlow/Summary.js | 471 -------------- src/families/tezos/DelegationFlow/Summary.tsx | 1 - .../tron/VoteFlow/01-SelectValidator/Item.js | 122 ---- .../VoteFlow/01-SelectValidator/SearchBox.js | 83 --- src/families/tron/VoteFlow/02-VoteModal.js | 337 ---------- src/families/tron/VoteFlow/02-VoteRow.js | 260 -------- src/families/tron/Votes/Header.js | 46 -- src/families/tron/Votes/Row.js | 132 ---- src/families/tron/Votes/index.js | 369 ----------- src/icons/AppTree.js | 57 -- src/icons/OperationStatusIcon/index.js | 60 -- src/modals/Create.js | 110 ---- src/modals/Create.tsx | 2 - src/navigation/navigatorConfig.js | 25 - src/navigation/styles.js | 11 - src/screens/Account/AccountHeaderRight.js | 72 --- src/screens/Account/AccountHeaderTitle.js | 52 -- src/screens/Account/EmptyStateAccount.js | 171 ----- src/screens/Account/Header.js | 4 +- src/screens/Account/LendingBanners.js | 110 ---- src/screens/Account/ListHeaderComponent.js | 274 -------- src/screens/Account/NftCollectionsList.js | 210 ------ src/screens/Account/SubAccountsList.js | 320 --------- src/screens/Account/TokenContractAddress.js | 117 ---- src/screens/Account/hooks/useActions.js | 171 ----- .../Account/hooks/useLendingActions.js | 99 --- src/screens/Account/index.js | 315 --------- .../AccountSettings/DeleteAccountModal.js | 85 --- .../AccountSettings/DeleteAccountRow.js | 31 - .../AccountSettings/EditAccountName.js | 158 ----- src/screens/AccountSettings/index.js | 103 --- src/screens/Accounts/AccountOrder.js | 34 - src/screens/Accounts/AccountOrderModal.js | 41 -- src/screens/Accounts/AccountRow.js | 402 ------------ src/screens/Accounts/AccountSyncStatus.js | 117 ---- src/screens/Accounts/AddAccount.js | 38 -- src/screens/Accounts/NoAccounts.js | 24 - src/screens/Accounts/OrderOption.js | 61 -- src/screens/Accounts/index.js | 118 ---- src/screens/AddAccounts/01-SelectCrypto.js | 1 - src/screens/AddAccounts/03-Accounts.js | 2 +- src/screens/AddAccounts/AddAccountsModal.js | 63 -- src/screens/EditDeviceName.js | 217 ------- src/screens/EditDeviceName.tsx | 2 +- src/screens/Exchange/BuyOption.js | 97 --- src/screens/Exchange/ProviderBullet.js | 41 -- src/screens/FreezeFunds/02-Amount.js | 439 ------------- src/screens/ImportAccounts/DisplayResult.js | 260 -------- src/screens/ImportAccounts/DisplayResult.tsx | 33 +- .../ImportAccounts/DisplayResultItem.js | 54 -- src/screens/ImportAccounts/ResultSection.js | 49 -- src/screens/Manager/AppsList/AppFilter.js | 75 --- src/screens/Manager/AppsList/AppIcon.js | 71 -- src/screens/Manager/AppsList/AppIcon.tsx | 4 +- .../Manager/AppsList/AppInstallButton.js | 109 ---- src/screens/Manager/AppsList/AppRow.js | 208 ------ .../Manager/AppsList/AppStateButton.js | 166 ----- .../Manager/AppsList/AppUninstallButton.js | 64 -- src/screens/Manager/AppsList/AppUpdateAll.js | 126 ---- .../Manager/AppsList/AppUpdateStepper.js | 120 ---- .../Manager/AppsList/UninstallAllButton.js | 68 -- src/screens/Manager/AppsScreen.js | 514 --------------- .../Manager/Device/DeviceAppStorage.js | 179 ----- src/screens/Manager/Device/DeviceName.js | 93 --- src/screens/Manager/Device/index.js | 259 -------- src/screens/Manager/Manager.js | 201 ------ .../Manager/Modals/AppDependenciesModal.js | 148 ----- src/screens/Manager/Modals/FilterModal.js | 252 -------- .../Manager/Modals/FirmwareUpdateModal.js | 60 -- .../Manager/Modals/QuitManagerModal.js | 118 ---- .../Manager/Modals/StorageWarningModal.js | 81 --- .../Manager/Modals/UninstallAllModal.js | 80 --- .../Modals/UninstallDependenciesModal.js | 178 ----- src/screens/Manager/Modals/UpdateAllModal.js | 172 ----- src/screens/Manager/index.js | 242 ------- src/screens/Manager/index.tsx | 4 +- src/screens/Market/MarketDataProvider.tsx | 420 ------------ src/screens/NotificationCenter/News.js | 136 ---- src/screens/NotificationCenter/NewsRow.js | 159 ----- .../NotificationCenter/Snackbar/Snackbar.js | 200 ------ src/screens/NotificationCenter/Status.js | 164 ----- src/screens/Onboarding/OnboardingQuiz.js | 276 -------- src/screens/Onboarding/OnboardingQuizFinal.js | 55 -- src/screens/Onboarding/shared/SeedWarning.js | 90 --- .../Onboarding/steps/deviceSelection.js | 117 ---- src/screens/Onboarding/steps/finish.js | 157 ----- .../Onboarding/steps/importAccounts.js | 54 -- src/screens/Onboarding/steps/language.js | 103 --- src/screens/Onboarding/steps/newDeviceInfo.js | 218 ------- src/screens/Onboarding/steps/pairNew.js | 217 ------- .../Onboarding/steps/recoveryPhrase.js | 43 -- .../Onboarding/steps/setupDevice/index.js | 39 -- src/screens/Onboarding/steps/terms.js | 158 ----- .../Onboarding/steps/useCaseSelection.js | 180 ------ src/screens/Onboarding/steps/welcome.js | 295 --------- src/screens/OperationDetails/Footer.js | 53 -- src/screens/PairDevices/Paired.js | 114 ---- .../PairDevices/PendingGenuineCheck.js | 72 --- src/screens/PairDevices/PendingPairing.js | 62 -- src/screens/PairDevices/RenderError.js | 147 ----- src/screens/PairDevices/Scanning.js | 103 --- src/screens/PairDevices/ScanningHeader.js | 60 -- src/screens/PairDevices/ScanningTimeout.js | 106 --- src/screens/Platform/AppCard.js | 11 +- src/screens/Platform/CatalogBanner.js | 61 -- src/screens/Platform/DAppDisclaimer.js | 211 ------ src/screens/Platform/DAppDisclaimer.tsx | 1 + src/screens/Portfolio/EmptyStatePortfolio.js | 147 ----- src/screens/Portfolio/EmptyStatePortfolio.tsx | 6 +- src/screens/Portfolio/GraphCardContainer.js | 38 -- src/screens/Portfolio/Header.js | 126 ---- src/screens/Portfolio/TabIcon.js | 24 - src/screens/Portfolio/index.js | 258 -------- src/screens/ReceiveFunds/01-SelectAccount.js | 190 ------ src/screens/ReceiveFunds/02-ConnectDevice.js | 3 - src/screens/ReceiveFunds/03-Confirmation.js | 2 - src/screens/Settings/About/AppVersionRow.js | 39 -- .../Settings/About/LiveReviewRow.android.js | 30 - .../Settings/About/LiveReviewRow.ios.js | 30 - .../Settings/About/PrivacyPolicyRow.js | 33 - .../Settings/About/TermsConditionsRow.js | 43 -- src/screens/Settings/About/index.js | 35 - .../Accounts/HideEmptyTokenAccountsRow.js | 49 -- src/screens/Settings/Accounts/index.js | 168 ----- .../CryptoAssets/Currencies/CurrenciesList.js | 60 -- .../Currencies/CurrencySettings.js | 202 ------ src/screens/Settings/Debug/index.js | 115 ---- .../Settings/Experimental/FeatureInteger.js | 161 ----- .../Settings/Experimental/FeatureRow.js | 50 -- .../Settings/Experimental/FeatureSwitch.js | 51 -- src/screens/Settings/Experimental/index.js | 51 -- src/screens/Settings/General/AnalyticsRow.js | 98 --- .../Settings/General/AuthSecurityToggle.js | 42 -- src/screens/Settings/General/BiometricsRow.js | 94 --- src/screens/Settings/General/CarouselRow.js | 38 -- .../Settings/General/ConfirmPassword.js | 111 ---- .../Settings/General/CountervalueSettings.js | 32 - .../General/CountervalueSettingsRow.js | 31 - src/screens/Settings/General/LanguageRow.js | 59 -- src/screens/Settings/General/PasswordForm.js | 117 ---- .../Settings/General/PasswordRemove.js | 83 --- .../Settings/General/ReportErrorsRow.js | 33 - .../Settings/General/ThemeSettingsRow.js | 82 --- src/screens/Settings/General/index.js | 33 - src/screens/Settings/Help/ClearCacheRow.js | 98 --- .../Settings/Help/ConfigureDeviceRow.js | 34 - src/screens/Settings/Help/ExportLogsRow.js | 20 - src/screens/Settings/Help/HardResetRow.js | 62 -- src/screens/Settings/Help/LedgerSupportRow.js | 31 - src/screens/Settings/Help/index.js | 32 - src/screens/Settings/HelpButton.js | 22 - src/screens/Settings/Resources.js | 98 --- src/screens/Settings/index.js | 123 ---- src/screens/Swap/Connect.js | 2 +- .../Swap/FormSelection/AccountAmountRow.js | 2 +- src/screens/Transfer.js | 55 -- src/screens/makeGenericSelectScreen.js | 123 ---- 258 files changed, 98 insertions(+), 30772 deletions(-) create mode 100644 scripts/v3clean.js delete mode 100644 src/analytics/TrackScreen.js delete mode 100644 src/colors.js delete mode 100644 src/components/AccountCard.js delete mode 100644 src/components/AccountGraphCard.js delete mode 100644 src/components/AccountSectionLabel.js delete mode 100644 src/components/Alert.js delete mode 100644 src/components/BottomModal.js delete mode 100644 src/components/BottomModalChoice.js delete mode 100644 src/components/Button.js delete mode 100644 src/components/CameraScreen/QRCodeBottomLayer.js delete mode 100644 src/components/CameraScreen/QRCodeTopLayer.js delete mode 100644 src/components/Card.js delete mode 100644 src/components/Carousel/Slide.js delete mode 100644 src/components/Carousel/index.js delete mode 100644 src/components/CheckBox.js delete mode 100644 src/components/ChoiceButton.js delete mode 100644 src/components/CurrencyIcon.js delete mode 100644 src/components/CurrencyRate.js delete mode 100644 src/components/CurrencyUnitValue.js delete mode 100644 src/components/Delta.js delete mode 100644 src/components/DeviceAction/rendering.js delete mode 100644 src/components/DeviceActionModal.js delete mode 100644 src/components/DiscreetModeButton.js delete mode 100644 src/components/ExternalLink.js delete mode 100644 src/components/FabAccountButtonBar.js delete mode 100644 src/components/FabActions.js delete mode 100644 src/components/FilteredSearchBar.js delete mode 100644 src/components/FirmwareUpdateBanner.js delete mode 100644 src/components/GenericErrorView.js delete mode 100644 src/components/GraphCard.js delete mode 100644 src/components/HeaderBackImage.js delete mode 100644 src/components/HeaderTitle.js delete mode 100644 src/components/InfoModal.js delete mode 100644 src/components/LText/index.js delete mode 100644 src/components/ModalBottomAction.js delete mode 100644 src/components/NavigationScrollView.js delete mode 100644 src/components/Nft/NftCollectionRow.js delete mode 100644 src/components/OperationRow.js delete mode 100644 src/components/OperationRowNftName.js delete mode 100644 src/components/ParentCurrencyIcon.js delete mode 100644 src/components/PasswordInput.js delete mode 100644 src/components/Pills.js delete mode 100644 src/components/Placeholder.js delete mode 100644 src/components/RequireTerms.js delete mode 100644 src/components/RequiresBLE/BluetoothDisabled.js delete mode 100644 src/components/RootNavigator/AccountsNavigator.js delete mode 100644 src/components/RootNavigator/BaseNavigator.js delete mode 100644 src/components/RootNavigator/CustomBlockRouterNavigator.js delete mode 100644 src/components/RootNavigator/ExchangeNavigator.js delete mode 100644 src/components/RootNavigator/ImportAccountsNavigator.js delete mode 100644 src/components/RootNavigator/MainNavigator.js delete mode 100644 src/components/RootNavigator/ManagerNavigator.js delete mode 100644 src/components/RootNavigator/NotificationCenterNavigator.js delete mode 100644 src/components/RootNavigator/OnboardingNavigator.js delete mode 100644 src/components/RootNavigator/ReceiveFundsNavigator.js delete mode 100644 src/components/RootNavigator/SendFundsNavigator.js delete mode 100644 src/components/RootNavigator/SettingsNavigator.js delete mode 100644 src/components/RootNavigator/SwapFormNavigator.js delete mode 100644 src/components/RootNavigator/SwapNavigator.js delete mode 100644 src/components/SectionHeader.js delete mode 100644 src/components/SelectDevice/BluetoothEmpty.js delete mode 100644 src/components/SelectDevice/DeviceItem.js delete mode 100644 src/components/SelectDevice/USBEmpty.android.js delete mode 100644 src/components/SelectDevice/index.js delete mode 100644 src/components/SelectableAccountsList.js delete mode 100644 src/components/SettingsCard.js delete mode 100644 src/components/SettingsRow.js delete mode 100644 src/components/StepHeader.js delete mode 100644 src/components/SubAccountRow.js delete mode 100644 src/components/Switch.js delete mode 100644 src/components/TabIcon.js delete mode 100644 src/components/TextInput.android.js delete mode 100644 src/components/TextInput.ios.js delete mode 100644 src/components/TouchHintCircle.js delete mode 100644 src/components/ValidateOnDevice.js delete mode 100644 src/components/ValidateSuccess.js delete mode 100644 src/components/useExportLogs.js delete mode 100644 src/config/urls.js delete mode 100644 src/families/algorand/Rewards/index.js delete mode 100644 src/families/cosmos/Delegations/Row.js delete mode 100644 src/families/cosmos/Delegations/index.js delete mode 100644 src/families/crypto_org/AccountSubHeader.js delete mode 100644 src/families/crypto_org/AccountSubHeaderDrawer.js delete mode 100644 src/families/elrond/AccountSubHeader.js delete mode 100644 src/families/elrond/AccountSubHeaderDrawer.js delete mode 100644 src/families/polkadot/Nominations/Actions.js delete mode 100644 src/families/polkadot/Nominations/NominationRow.js delete mode 100644 src/families/polkadot/Nominations/index.js delete mode 100644 src/families/polkadot/components/CollapsibleList.js delete mode 100644 src/families/polkadot/operationDetails.js delete mode 100644 src/families/tezos/AccountBodyHeader.js delete mode 100644 src/families/tezos/AccountHeader.js delete mode 100644 src/families/tezos/DelegationFlow/Started.js delete mode 100644 src/families/tezos/DelegationFlow/Summary.js delete mode 100644 src/families/tron/VoteFlow/01-SelectValidator/Item.js delete mode 100644 src/families/tron/VoteFlow/01-SelectValidator/SearchBox.js delete mode 100644 src/families/tron/VoteFlow/02-VoteModal.js delete mode 100644 src/families/tron/VoteFlow/02-VoteRow.js delete mode 100644 src/families/tron/Votes/Header.js delete mode 100644 src/families/tron/Votes/Row.js delete mode 100644 src/families/tron/Votes/index.js delete mode 100644 src/icons/AppTree.js delete mode 100644 src/icons/OperationStatusIcon/index.js delete mode 100644 src/modals/Create.js delete mode 100644 src/navigation/navigatorConfig.js delete mode 100644 src/screens/Account/AccountHeaderRight.js delete mode 100644 src/screens/Account/AccountHeaderTitle.js delete mode 100644 src/screens/Account/EmptyStateAccount.js delete mode 100644 src/screens/Account/LendingBanners.js delete mode 100644 src/screens/Account/ListHeaderComponent.js delete mode 100644 src/screens/Account/NftCollectionsList.js delete mode 100644 src/screens/Account/SubAccountsList.js delete mode 100644 src/screens/Account/TokenContractAddress.js delete mode 100644 src/screens/Account/hooks/useActions.js delete mode 100644 src/screens/Account/hooks/useLendingActions.js delete mode 100644 src/screens/Account/index.js delete mode 100644 src/screens/AccountSettings/DeleteAccountModal.js delete mode 100644 src/screens/AccountSettings/DeleteAccountRow.js delete mode 100644 src/screens/AccountSettings/EditAccountName.js delete mode 100644 src/screens/AccountSettings/index.js delete mode 100644 src/screens/Accounts/AccountOrder.js delete mode 100644 src/screens/Accounts/AccountOrderModal.js delete mode 100644 src/screens/Accounts/AccountRow.js delete mode 100644 src/screens/Accounts/AccountSyncStatus.js delete mode 100644 src/screens/Accounts/AddAccount.js delete mode 100644 src/screens/Accounts/NoAccounts.js delete mode 100644 src/screens/Accounts/OrderOption.js delete mode 100644 src/screens/Accounts/index.js delete mode 100644 src/screens/AddAccounts/AddAccountsModal.js delete mode 100644 src/screens/EditDeviceName.js delete mode 100644 src/screens/Exchange/BuyOption.js delete mode 100644 src/screens/Exchange/ProviderBullet.js delete mode 100644 src/screens/FreezeFunds/02-Amount.js delete mode 100644 src/screens/ImportAccounts/DisplayResult.js delete mode 100644 src/screens/ImportAccounts/DisplayResultItem.js delete mode 100644 src/screens/ImportAccounts/ResultSection.js delete mode 100644 src/screens/Manager/AppsList/AppFilter.js delete mode 100644 src/screens/Manager/AppsList/AppIcon.js delete mode 100644 src/screens/Manager/AppsList/AppInstallButton.js delete mode 100644 src/screens/Manager/AppsList/AppRow.js delete mode 100644 src/screens/Manager/AppsList/AppStateButton.js delete mode 100644 src/screens/Manager/AppsList/AppUninstallButton.js delete mode 100644 src/screens/Manager/AppsList/AppUpdateAll.js delete mode 100644 src/screens/Manager/AppsList/AppUpdateStepper.js delete mode 100644 src/screens/Manager/AppsList/UninstallAllButton.js delete mode 100644 src/screens/Manager/AppsScreen.js delete mode 100644 src/screens/Manager/Device/DeviceAppStorage.js delete mode 100644 src/screens/Manager/Device/DeviceName.js delete mode 100644 src/screens/Manager/Device/index.js delete mode 100644 src/screens/Manager/Manager.js delete mode 100644 src/screens/Manager/Modals/AppDependenciesModal.js delete mode 100644 src/screens/Manager/Modals/FilterModal.js delete mode 100644 src/screens/Manager/Modals/FirmwareUpdateModal.js delete mode 100644 src/screens/Manager/Modals/QuitManagerModal.js delete mode 100644 src/screens/Manager/Modals/StorageWarningModal.js delete mode 100644 src/screens/Manager/Modals/UninstallAllModal.js delete mode 100644 src/screens/Manager/Modals/UninstallDependenciesModal.js delete mode 100644 src/screens/Manager/Modals/UpdateAllModal.js delete mode 100644 src/screens/Manager/index.js delete mode 100644 src/screens/Market/MarketDataProvider.tsx delete mode 100644 src/screens/NotificationCenter/News.js delete mode 100644 src/screens/NotificationCenter/NewsRow.js delete mode 100644 src/screens/NotificationCenter/Snackbar/Snackbar.js delete mode 100644 src/screens/NotificationCenter/Status.js delete mode 100644 src/screens/Onboarding/OnboardingQuiz.js delete mode 100644 src/screens/Onboarding/OnboardingQuizFinal.js delete mode 100644 src/screens/Onboarding/shared/SeedWarning.js delete mode 100644 src/screens/Onboarding/steps/deviceSelection.js delete mode 100644 src/screens/Onboarding/steps/finish.js delete mode 100644 src/screens/Onboarding/steps/importAccounts.js delete mode 100644 src/screens/Onboarding/steps/language.js delete mode 100644 src/screens/Onboarding/steps/newDeviceInfo.js delete mode 100644 src/screens/Onboarding/steps/pairNew.js delete mode 100644 src/screens/Onboarding/steps/recoveryPhrase.js delete mode 100644 src/screens/Onboarding/steps/setupDevice/index.js delete mode 100644 src/screens/Onboarding/steps/terms.js delete mode 100644 src/screens/Onboarding/steps/useCaseSelection.js delete mode 100644 src/screens/Onboarding/steps/welcome.js delete mode 100644 src/screens/OperationDetails/Footer.js delete mode 100644 src/screens/PairDevices/Paired.js delete mode 100644 src/screens/PairDevices/PendingGenuineCheck.js delete mode 100644 src/screens/PairDevices/PendingPairing.js delete mode 100644 src/screens/PairDevices/RenderError.js delete mode 100644 src/screens/PairDevices/Scanning.js delete mode 100644 src/screens/PairDevices/ScanningHeader.js delete mode 100644 src/screens/PairDevices/ScanningTimeout.js delete mode 100644 src/screens/Platform/CatalogBanner.js delete mode 100644 src/screens/Platform/DAppDisclaimer.js delete mode 100644 src/screens/Portfolio/EmptyStatePortfolio.js delete mode 100644 src/screens/Portfolio/GraphCardContainer.js delete mode 100644 src/screens/Portfolio/Header.js delete mode 100644 src/screens/Portfolio/TabIcon.js delete mode 100644 src/screens/Portfolio/index.js delete mode 100644 src/screens/ReceiveFunds/01-SelectAccount.js delete mode 100644 src/screens/Settings/About/AppVersionRow.js delete mode 100644 src/screens/Settings/About/LiveReviewRow.android.js delete mode 100644 src/screens/Settings/About/LiveReviewRow.ios.js delete mode 100644 src/screens/Settings/About/PrivacyPolicyRow.js delete mode 100644 src/screens/Settings/About/TermsConditionsRow.js delete mode 100644 src/screens/Settings/About/index.js delete mode 100644 src/screens/Settings/Accounts/HideEmptyTokenAccountsRow.js delete mode 100644 src/screens/Settings/Accounts/index.js delete mode 100644 src/screens/Settings/CryptoAssets/Currencies/CurrenciesList.js delete mode 100644 src/screens/Settings/CryptoAssets/Currencies/CurrencySettings.js delete mode 100644 src/screens/Settings/Debug/index.js delete mode 100644 src/screens/Settings/Experimental/FeatureInteger.js delete mode 100644 src/screens/Settings/Experimental/FeatureRow.js delete mode 100644 src/screens/Settings/Experimental/FeatureSwitch.js delete mode 100644 src/screens/Settings/Experimental/index.js delete mode 100644 src/screens/Settings/General/AnalyticsRow.js delete mode 100644 src/screens/Settings/General/AuthSecurityToggle.js delete mode 100644 src/screens/Settings/General/BiometricsRow.js delete mode 100644 src/screens/Settings/General/CarouselRow.js delete mode 100644 src/screens/Settings/General/ConfirmPassword.js delete mode 100644 src/screens/Settings/General/CountervalueSettings.js delete mode 100644 src/screens/Settings/General/CountervalueSettingsRow.js delete mode 100644 src/screens/Settings/General/LanguageRow.js delete mode 100644 src/screens/Settings/General/PasswordForm.js delete mode 100644 src/screens/Settings/General/PasswordRemove.js delete mode 100644 src/screens/Settings/General/ReportErrorsRow.js delete mode 100644 src/screens/Settings/General/ThemeSettingsRow.js delete mode 100644 src/screens/Settings/General/index.js delete mode 100644 src/screens/Settings/Help/ClearCacheRow.js delete mode 100644 src/screens/Settings/Help/ConfigureDeviceRow.js delete mode 100644 src/screens/Settings/Help/ExportLogsRow.js delete mode 100644 src/screens/Settings/Help/HardResetRow.js delete mode 100644 src/screens/Settings/Help/LedgerSupportRow.js delete mode 100644 src/screens/Settings/Help/index.js delete mode 100644 src/screens/Settings/HelpButton.js delete mode 100644 src/screens/Settings/Resources.js delete mode 100644 src/screens/Settings/index.js delete mode 100644 src/screens/Transfer.js delete mode 100644 src/screens/makeGenericSelectScreen.js diff --git a/scripts/v3clean.js b/scripts/v3clean.js new file mode 100644 index 0000000000..93d4b06cb0 --- /dev/null +++ b/scripts/v3clean.js @@ -0,0 +1,56 @@ +const { rm } = require("fs"); + +const exec = require("child_process").exec; + +/* eslint-disable no-console */ + +async function executeAsync(command) { + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + reject(error); + } else if (stderr) { + reject(stderr); + } else { + resolve(stdout); + } + }); + }); +} + +async function listTsJsFilesPairs() { + const jsFilesPath = {}; + const jsTsPairs = []; + await executeAsync('git ls-files | grep -e ".\\.js$"').then(res => + res.split("\n").map(path => (jsFilesPath[path] = true)), + ); + return executeAsync('git ls-files | grep -e ".\\.ts$" -e ".\\.tsx$"') + .then(res => + res.split("\n").forEach(path => { + const beforeExtensionPath = path + .split(".") + .slice(0, -1) + .join("."); + const jsFilePath = `${beforeExtensionPath}.js`; + if (jsFilesPath[jsFilePath]) { + jsTsPairs.push({ + tsFilePath: path, + jsFilePath, + }); + } + }), + ) + .then(() => jsTsPairs); +} + +async function removeJS() { + const pairs = await listTsJsFilesPairs(); + + pairs.forEach(({ jsFilePath }) => { + rm(jsFilePath); + }); + + return true; +} + +removeJS().then(() => console.log("JS files removed")); diff --git a/src/analytics/TrackScreen.js b/src/analytics/TrackScreen.js deleted file mode 100644 index c8ebbf6f0d..0000000000 --- a/src/analytics/TrackScreen.js +++ /dev/null @@ -1,26 +0,0 @@ -// @flow -import { useEffect, useRef } from "react"; -import { useIsFocused } from "@react-navigation/native"; -import { screen } from "./segment"; - -type Props = { - category: string, - name?: string, -}; - -export default function TrackScreen({ category, name, ...props }: Props) { - const isFocused = useIsFocused(); - const isFocusedRef = useRef(); - - useEffect(() => { - if (isFocusedRef.current !== isFocused) { - isFocusedRef.current = isFocused; - - if (isFocusedRef.current) { - screen(category, name, props); - } - } - }, [category, name, props, isFocused]); - - return null; -} diff --git a/src/analytics/TrackScreen.tsx b/src/analytics/TrackScreen.tsx index 0edb6779cc..1f17124cf7 100644 --- a/src/analytics/TrackScreen.tsx +++ b/src/analytics/TrackScreen.tsx @@ -1,4 +1,3 @@ -// @flow import { useEffect, useRef } from "react"; import { useIsFocused } from "@react-navigation/native"; import { screen } from "./segment"; diff --git a/src/colors.js b/src/colors.js deleted file mode 100644 index bd8b927417..0000000000 --- a/src/colors.js +++ /dev/null @@ -1,154 +0,0 @@ -// @flow -import React from "react"; -import color from "color"; -import { useTheme } from "@react-navigation/native"; - -export const ensureContrast = (color1: string, color2: string) => { - const colorL1 = color(color1).luminosity() + 0.05; - const colorL2 = color(color2).luminosity() + 0.05; - - const lRatio = colorL1 > colorL2 ? colorL1 / colorL2 : colorL2 / colorL1; - - if (lRatio < 1.5) { - return color(color1) - .rotate(180) - .negate() - .string(); - } - return color1; -}; - -export const rgba = (c: string, a: number) => - color(c) - .alpha(a) - .rgb() - .toString(); - -export const darken = (c: string, a: number) => - color(c) - .darken(a) - .toString(); - -export const lighten = (c: string, a: number) => - color(c) - .lighten(a) - .toString(); - -export function withTheme(Component: React$ComponentType<*>) { - return (props: *) => { - const { colors } = useTheme(); - return ; - }; -} - -export const lightTheme = { - dark: false, - colors: { - primary: "hsla(247, 56%, 68%, 1)", - background: "hsla(0, 0%, 100%, 1)", - card: "hsla(0, 0%, 100%, 1)", - text: "rgb(28, 28, 30)", - border: "rgb(199, 199, 204)", - notification: "rgb(255, 69, 58)", - contrastBackground: "#142533", - contrastBackgroundText: "#ffffff", - /* MAIN */ - live: "#bdb3ff", - alert: "#ea2e49", - success: "#66BE54", - darkBlue: "#142533", - smoke: "#666666", - grey: "#999999", - fog: "#D8D8D8", - white: "#ffffff", - green: "rgb(102, 190, 84)", - ledgerGreen: "#41ccb4", - black: "#000000", - orange: "#ff7701", - yellow: "#ffd24a", - separator: "#ebebeb", - warning: "#ff9900", - darkWarning: "#E08700", - - /* DERIVATIVES */ - lightLive: "#bdb3ff19", - lightAlert: "#ea2e490c", - lightFog: "#EEEEEE", - lightGrey: "#F9F9F9", - lightOrange: "#FF984F", - translucentGreen: "rgba(102, 190, 84, 0.2)", - translucentGrey: "rgba(153, 153, 153, 0.2)", - lightLiveBg: "#e3dfff", - - errorBg: "#ff0042", - - /* PILLS */ - pillForeground: "#999999", - pillActiveBackground: rgba("#bdb3ff", 0.1), - pillActiveForeground: "#bdb3ff", - pillActiveDisabledForeground: "#999999", - - /** SNACKBAR */ - snackBarBg: "#142533", - snackBarColor: "#FFF", - - /** SKELETON */ - skeletonBg: "#E9EAEB", - }, -}; - -export const darkTheme = { - dark: true, - colors: { - primary: "hsla(247, 56%, 68%, 1)", - card: "#1C1D1F", - background: "#131415", - text: "#FFFFFF", - border: "rgba(255, 255, 255, 0.1)", - notification: "rgb(255, 69, 58)", - contrastBackground: "#223544", - contrastBackgroundText: "#ffffff", - /* MAIN */ - live: "#bdb3ff", - alert: "#ea2e49", - success: "#66BE54", - darkBlue: "#FAFAFA", - smoke: "#aaa", - grey: "#aaa", - fog: "#A8A8A8", - white: "#000000", - green: "rgb(102, 190, 84)", - ledgerGreen: "#41ccb4", - black: "#FFFFFF", - orange: "#ff7701", - yellow: "#ffd24a", - separator: "#ebebeb", - warning: "#ff9900", - darkWarning: "#E08700", - - /* DERIVATIVES */ - lightLive: "#bdb3ff19", - lightAlert: "#ea2e490c", - lightFog: "#1c202b", - lightGrey: "rgba(255,255,255, 0.05)", - lightOrange: "#FF984F", - translucentGreen: "rgba(102, 190, 84, 0.2)", - translucentGrey: "rgba(153, 153, 153, 0.2)", - lightLiveBg: "#222635", - - errorBg: "#ff0042", - - /* PILLS */ - pillForeground: "#999999", - pillActiveBackground: rgba("#bdb3ff", 0.1), - pillActiveForeground: "#bdb3ff", - pillActiveDisabledForeground: "#999999", - - /** SNACKBAR */ - snackBarBg: "#000000", - snackBarColor: "#FFF", - - /** SKELETON */ - skeletonBg: "#2a2d33", - }, -}; diff --git a/src/components/AccountCard.js b/src/components/AccountCard.js deleted file mode 100644 index d5bd5ca2fe..0000000000 --- a/src/components/AccountCard.js +++ /dev/null @@ -1,135 +0,0 @@ -// @flow -import { - getAccountName, - getAccountSpendableBalance, -} from "@ledgerhq/live-common/lib/account"; -import React, { PureComponent } from "react"; -import { View, StyleSheet } from "react-native"; -import type { AccountLike } from "@ledgerhq/live-common/lib/types"; -import { - getAccountCurrency, - getAccountUnit, -} from "@ledgerhq/live-common/lib/account/helpers"; -import { getTagDerivationMode } from "@ledgerhq/live-common/lib/derivation"; -import Card from "./Card"; -import CurrencyIcon from "./CurrencyIcon"; -import CurrencyUnitValue from "./CurrencyUnitValue"; -import LText from "./LText"; -import { withTheme } from "../colors"; - -type Props = { - account: AccountLike, - onPress?: () => void, - style?: any, - disabled?: boolean, - colors: *, - useFullBalance?: Boolean, - AccountSubTitle?: React$Node, -}; - -class AccountCard extends PureComponent { - render() { - const { - onPress, - account, - style, - disabled, - colors, - useFullBalance, - AccountSubTitle, - } = this.props; - const currency = getAccountCurrency(account); - const unit = getAccountUnit(account); - const tag = - account.derivationMode !== undefined && - account.derivationMode !== null && - // $FlowFixMe - getTagDerivationMode(currency, account.derivationMode); - - return ( - - - - - - {getAccountName(account)} - - {AccountSubTitle} - - - {tag ? ( - - - {tag} - - - ) : null} - - - - - - - - ); - } -} - -const styles = StyleSheet.create({ - card: { - flex: 1, - flexDirection: "row", - paddingVertical: 16, - alignItems: "center", - backgroundColor: "transparent", - }, - accountName: { - flexGrow: 1, - flexShrink: 1, - marginLeft: 8, - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - }, - badgeContainer: { - paddingHorizontal: 4, - paddingVertical: 2, - borderRadius: 4, - borderWidth: 1, - justifyContent: "space-between", - alignItems: "center", - marginLeft: 16, - }, - badgeLabel: { fontSize: 7, textTransform: "uppercase" }, - accountNameText: { - fontSize: 14, - flexShrink: 1, - }, - balanceContainer: { - marginLeft: 16, - alignItems: "flex-end", - }, - accountNameContainer: { flexShrink: 1 }, -}); - -export default withTheme(AccountCard); diff --git a/src/components/AccountGraphCard.js b/src/components/AccountGraphCard.js deleted file mode 100644 index 1f04df408c..0000000000 --- a/src/components/AccountGraphCard.js +++ /dev/null @@ -1,267 +0,0 @@ -// @flow -import React, { useState, useCallback } from "react"; -import { useTheme } from "@react-navigation/native"; -import { View, StyleSheet, Platform } from "react-native"; -import type { - Unit, - Currency, - AccountLike, -} from "@ledgerhq/live-common/lib/types"; -import { - getAccountCurrency, - getAccountUnit, -} from "@ledgerhq/live-common/lib/account"; -import { getCurrencyColor } from "@ledgerhq/live-common/lib/currencies"; -import type { - ValueChange, - PortfolioRange, - BalanceHistoryWithCountervalue, -} from "@ledgerhq/live-common/lib/portfolio/v2/types"; - -import { ensureContrast } from "../colors"; -import getWindowDimensions from "../logic/getWindowDimensions"; -import { useTimeRange } from "../actions/settings"; -import Delta from "./Delta"; -import FormatDate from "./FormatDate"; -import Graph from "./Graph"; -import Pills from "./Pills"; -import TransactionsPendingConfirmationWarning from "./TransactionsPendingConfirmationWarning"; -import Card from "./Card"; -import LText from "./LText"; -import CurrencyUnitValue from "./CurrencyUnitValue"; -import Placeholder from "./Placeholder"; -import type { Item } from "./Graph/types"; -import DiscreetModeButton from "./DiscreetModeButton"; - -type Props = { - account: AccountLike, - range: PortfolioRange, - history: BalanceHistoryWithCountervalue, - valueChange: ValueChange, - countervalueAvailable: boolean, - counterValueCurrency: Currency, - useCounterValue?: boolean, - renderTitle?: ({ - useCounterValue?: boolean, - cryptoCurrencyUnit: Unit, - counterValueUnit: Unit, - item: Item, - }) => React$Node, - renderAccountSummary: () => ?React$Node, -}; - -export default function AccountGraphCard({ - account, - countervalueAvailable, - history, - range, - counterValueCurrency, - renderTitle, - useCounterValue, - valueChange, - renderAccountSummary, -}: Props) { - const { colors } = useTheme(); - const [hoveredItem, setHoverItem] = useState(); - const [, setTimeRange, timeRangeItems] = useTimeRange(); - const mapCryptoValue = useCallback(d => d.value || 0, []); - const mapCounterValue = useCallback( - d => (d.countervalue ? d.countervalue : 0), - [], - ); - - const isAvailable = !useCounterValue || countervalueAvailable; - - const currency = getAccountCurrency(account); - const unit = getAccountUnit(account); - const graphColor = ensureContrast( - getCurrencyColor(currency), - colors.background, - ); - - return ( - - - - - - - {renderAccountSummary && ( - {renderAccountSummary()} - )} - - ); -} - -function GraphCardHeader({ - useCounterValue, - cryptoCurrencyUnit, - counterValueUnit, - to, - hoveredItem, - renderTitle, - isLoading, - valueChange, - account, -}: { - account: AccountLike, - isLoading: boolean, - cryptoCurrencyUnit: Unit, - counterValueUnit: Unit, - to: Item, - hoveredItem: ?Item, - renderTitle?: ({ - useCounterValue?: boolean, - cryptoCurrencyUnit: Unit, - counterValueUnit: Unit, - item: Item, - }) => React$Node, - useCounterValue?: boolean, - valueChange: ValueChange, -}) { - const unit = useCounterValue ? counterValueUnit : cryptoCurrencyUnit; - const item = hoveredItem || to; - - return ( - - - - {renderTitle ? ( - renderTitle({ - counterValueUnit, - useCounterValue, - cryptoCurrencyUnit, - item, - }) - ) : ( - - - - - - - )} - - - {isLoading ? ( - <> - - - - ) : hoveredItem && hoveredItem.date ? ( - - - - ) : valueChange ? ( - - - - - ) : null} - - - - - ); -} - -const styles = StyleSheet.create({ - root: { - paddingVertical: 16, - margin: 16, - ...Platform.select({ - android: { - elevation: 1, - }, - ios: { - shadowOpacity: 0.03, - shadowRadius: 8, - shadowOffset: { - height: 4, - }, - }, - }), - }, - warningWrapper: { - display: "flex", - flexDirection: "row", - alignItems: "center", - }, - balanceTextContainer: { - marginBottom: 5, - alignItems: "center", - justifyContent: "center", - }, - balanceText: { - fontSize: 22, - }, - subtitleContainer: { - flexDirection: "row", - justifyContent: "center", - alignItems: "center", - marginTop: 10, - marginBottom: 20, - }, - pillsContainer: { - marginTop: 16, - alignItems: "center", - }, - accountSummary: { - marginTop: 16, - alignItems: "center", - paddingHorizontal: 16, - flexDirection: "row", - overflow: "hidden", - }, - deltaPercent: { - marginRight: 8, - }, - graphHeader: { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "flex-start", - paddingHorizontal: 16, - flexWrap: "nowrap", - }, - graphHeaderBalance: { alignItems: "flex-start", flex: 1 }, - delta: { - height: 24, - flexDirection: "row", - flexWrap: "wrap", - }, -}); diff --git a/src/components/AccountSectionLabel.js b/src/components/AccountSectionLabel.js deleted file mode 100644 index c9701d08a9..0000000000 --- a/src/components/AccountSectionLabel.js +++ /dev/null @@ -1,56 +0,0 @@ -// @flow -import React from "react"; -import { View, TouchableOpacity, StyleSheet } from "react-native"; -import LText from "./LText"; - -type Props = { - name: string, - icon?: React$Node, - onPress?: () => void, - RightComponent?: React$Node, -}; - -export default function AccountSectionLabel({ - name, - icon, - onPress, - RightComponent, -}: Props) { - return ( - - - - {name} - - {icon} - - {!!RightComponent && ( - {RightComponent} - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - flexDirection: "row", - alignItems: "center", - paddingVertical: 12, - }, - label: { - flex: 1, - flexDirection: "row", - alignItems: "center", - }, - labelText: { - fontSize: 18, - marginRight: 6, - }, - rightWrapper: { - alignSelf: "flex-end", - }, -}); diff --git a/src/components/Alert.js b/src/components/Alert.js deleted file mode 100644 index c7385921ee..0000000000 --- a/src/components/Alert.js +++ /dev/null @@ -1,361 +0,0 @@ -// @flow -import React, { useCallback, useMemo } from "react"; -import { Trans } from "react-i18next"; -import { - TouchableOpacity, - StyleSheet, - View, - Text, - Linking, -} from "react-native"; -import { useDispatch, useSelector } from "react-redux"; -import { useTheme } from "@react-navigation/native"; -import LText from "./LText"; -import { rgba } from "../colors"; -import { dismissBanner } from "../actions/settings"; -import { dismissedBannersSelector } from "../reducers/settings"; - -import IconInfo from "../icons/Info"; -import IconCheckCircle from "../icons/CheckCircle"; -import IconExclamationCircle from "../icons/ExclamationCircle"; -import IconWarning from "../icons/Warning"; -import IconCloseCircle from "../icons/CloseCircle"; -import IconHandShield from "../icons/HandShield"; -import IconLightBulb from "../icons/LightBulb"; -import IconExternalLink from "../icons/ExternalLink"; - -const HORIZONTAL_ICON_SIZE = 16; -const BIG_ICON_SIZE = 32; -const VERTICAL_ICON_SIZE = 32; - -const hitSlop = { - top: 0, - left: 0, - right: 0, - bottom: 0, -}; - -type AlertType = - | "primary" - | "secondary" - | "success" - | "warning" - | "error" - | "hint" - | "security" - | "help" - | "danger" - | "update"; - -type Props = { - id?: string, - type: AlertType, - children: React$Node, - left?: React$Node, - bottom?: React$Node, - title?: string, - vertical?: boolean, - noIcon?: boolean, - closeable?: boolean, - onLearnMore?: () => any, - learnMoreKey?: string, - learnMoreUrl?: string, - learnMoreIsInternal?: boolean, -}; - -function useAlertStyle(type: AlertType, vertical?: boolean) { - const { colors } = useTheme(); - - switch (type) { - case "primary": - return { - backgroundColor: colors.pillActiveBackground, - textColor: colors.live, - icon: ( - - ), - }; - case "hint": - return { - backgroundColor: colors.pillActiveBackground, - textColor: colors.live, - icon: ( - - ), - }; - case "success": - return { - backgroundColor: rgba(colors.success, 0.1), - textColor: colors.success, - icon: ( - - ), - }; - case "warning": - return { - backgroundColor: rgba(colors.orange, 0.1), - textColor: colors.orange, - icon: ( - - ), - }; - case "error": - return { - backgroundColor: rgba(colors.alert, 0.1), - textColor: colors.alert, - icon: ( - - ), - }; - case "update": - return { - backgroundColor: colors.orange, - textColor: "#FFF", - icon: ( - - ), - }; - case "security": - return { - backgroundColor: colors.card, - textColor: colors.text, - borderColor: colors.fog, - icon: ( - - ), - }; - case "help": - return { - backgroundColor: colors.card, - textColor: colors.text, - borderColor: colors.fog, - icon: ( - - ), - }; - case "danger": - return { - backgroundColor: colors.card, - textColor: colors.alert, - borderColor: colors.fog, - icon: ( - - ), - }; - case "secondary": - default: - return { - backgroundColor: rgba(colors.smoke, 0.1), - textColor: colors.smoke, - icon: ( - - ), - }; - } -} - -export default function Alert({ - id, - type = "secondary", - children: description, - left, - bottom, - title, - vertical, - noIcon, - closeable = false, - onLearnMore, - learnMoreUrl, - learnMoreKey, - learnMoreIsInternal = false, -}: Props) { - const dismissedBanners = useSelector(dismissedBannersSelector); - const dispatch = useDispatch(); - - const { - backgroundColor, - textColor, - borderColor = null, - icon, - } = useAlertStyle(type, vertical); - - const hasLearnMore = !!onLearnMore || !!learnMoreUrl; - const handleLearnMore = useCallback( - () => - onLearnMore - ? onLearnMore() - : learnMoreUrl - ? Linking.openURL(learnMoreUrl) - : undefined, - [onLearnMore, learnMoreUrl], - ); - - const learnMore = hasLearnMore && ( - - {" "} - - - - {!learnMoreIsInternal && ( - <> - {" "} - - - )} - - ); - - const onDismiss = useCallback(() => { - if (id) { - dispatch(dismissBanner(id)); - } - }, [id, dispatch]); - - const isDismissed = useMemo(() => dismissedBanners.includes(id), [ - dismissedBanners, - id, - ]); - - return ( - !isDismissed && ( - - - {left || (!noIcon && icon) ? ( - - {left || icon} - - ) : null} - - - {title ? ( - - {title} - - ) : null} - - - {description} - - {learnMore} - - - {closeable && ( - - - - )} - - {bottom ? {bottom} : null} - - ) - ); -} - -const styles = StyleSheet.create({ - root: { - width: "100%", - flexDirection: "column", - borderRadius: 4, - paddingVertical: 16, - paddingHorizontal: 16, - }, - container: { - flexDirection: "row", - alignItems: "center", - }, - vertical: { - width: "100%", - flexDirection: "column", - }, - withBorder: { - borderWidth: 1, - borderStyle: "dashed", - }, - leftContainer: { - marginRight: 16, - }, - topContainer: { - marginBottom: 16, - }, - bottomContainer: { - marginTop: 16, - }, - content: { - flex: 1, - alignItems: "flex-start", - }, - verticalContent: { - flex: 0, - alignItems: "center", - }, - textCentered: { - textAlign: "center", - }, - learnMore: { - textDecorationLine: "underline", - marginTop: 8, - }, - closeContainer: { - position: "absolute", - top: "-20%", - right: "-3%", - }, -}); diff --git a/src/components/BottomModal.js b/src/components/BottomModal.js deleted file mode 100644 index fc4f985f0f..0000000000 --- a/src/components/BottomModal.js +++ /dev/null @@ -1,124 +0,0 @@ -// @flow - -import React, { useEffect, useState } from "react"; -import { View, StyleSheet, Platform } from "react-native"; -import { useSelector } from "react-redux"; -import ReactNativeModal from "react-native-modal"; -import type { ViewStyleProp } from "react-native/Libraries/StyleSheet/StyleSheet"; -import { useTheme } from "@react-navigation/native"; -import TrackScreen from "../analytics/TrackScreen"; -import { isModalLockedSelector } from "../reducers/appstate"; -import StyledStatusBar from "./StyledStatusBar"; -import ButtonUseTouchable from "../context/ButtonUseTouchable"; -import getWindowDimensions from "../logic/getWindowDimensions"; - -let isModalOpenedref = false; - -export type Props = { - id?: string, - isOpened?: boolean, - onClose?: () => void, - onModalHide?: () => void, - children?: *, - style?: ViewStyleProp, - preventBackdropClick?: boolean, - containerStyle?: ViewStyleProp, - styles?: ViewStyleProp, -}; - -// Add some extra padding at the bottom of the modal -// and make it overflow the bottom of the screen -// so that the underlying UI doesn't show up -// when it gets the position wrong and display too high -// See Jira LL-451 and GitHub #617 -const EXTRA_PADDING_SAMSUNG_FIX = 100; - -const { width, height } = getWindowDimensions(); - -const BottomModal = ({ - isOpened, - onClose = () => {}, - children, - style, - preventBackdropClick, - id, - containerStyle, - styles: propStyles, - ...rest -}: Props) => { - const { colors } = useTheme(); - const [open, setIsOpen] = useState(false); - const isModalLocked = useSelector(isModalLockedSelector); - const backDropProps = preventBackdropClick - ? {} - : { - onBackdropPress: !isModalLocked ? onClose : undefined, - onBackButtonPress: !isModalLocked ? onClose : undefined, - }; - - // workaround to make sure no double modal can be opened at same time - useEffect( - () => () => { - isModalOpenedref = false; - }, - [], - ); - - useEffect(() => { - if (!!isModalOpenedref && isOpened) { - onClose(); - } else { - setIsOpen(isOpened); - } - isModalOpenedref = isOpened; - }, [isOpened]); // do not add onClose it might cause some issues on modals ie: filter manager modal - - return ( - - - - - {open && id ? : null} - - {children} - - - - ); -}; - -const styles = StyleSheet.create({ - root: { - justifyContent: "flex-end", - margin: 0, - }, - modal: { - borderTopLeftRadius: 10, - borderTopRightRadius: 10, - paddingTop: 8, - paddingBottom: EXTRA_PADDING_SAMSUNG_FIX + 24, - marginBottom: EXTRA_PADDING_SAMSUNG_FIX * -1, - }, -}); - -export default BottomModal; diff --git a/src/components/BottomModalChoice.js b/src/components/BottomModalChoice.js deleted file mode 100644 index be4ffffb63..0000000000 --- a/src/components/BottomModalChoice.js +++ /dev/null @@ -1,110 +0,0 @@ -// @flow - -import React, { memo } from "react"; -import { View, StyleSheet } from "react-native"; -import { useTheme } from "@react-navigation/native"; -import Touchable from "./Touchable"; - -import { rgba } from "../colors"; -import LText from "./LText"; - -const hitSlop = { - top: 0, - left: 0, - right: 0, - bottom: 0, -}; - -type Props = { - onPress: ?() => any, - Icon: React$ComponentType<*>, - title: string, - description?: string, - event: string, - eventProperties?: Object, -}; - -function BottomModalChoice({ - Icon, - title, - description, - onPress, - event, - eventProperties, -}: Props) { - const { colors } = useTheme(); - - return ( - - - {Icon ? : null} - - - - {title} - - {!!description && ( - - {description} - - )} - - - ); -} - -export default memo(BottomModalChoice); - -function IconWrapper({ - Icon, - color, -}: { - Icon: React$ComponentType<*>, - color: string, -}) { - const iconWrapperBg = rgba(color, 0.1); - return ( - - - - ); -} - -const styles = StyleSheet.create({ - root: { - flexDirection: "row", - paddingVertical: 20, - alignItems: "center", - }, - disabled: { - opacity: 0.3, - }, - left: { - paddingLeft: 24, - paddingRight: 16, - alignItems: "center", - justifyContent: "center", - }, - body: { - flexGrow: 1, - }, - title: { - fontSize: 16, - }, - description: { - fontSize: 14, - }, - iconWrapper: { - width: 32, - height: 32, - borderRadius: 32, - alignItems: "center", - justifyContent: "center", - }, -}); diff --git a/src/components/BottomModalChoice.tsx b/src/components/BottomModalChoice.tsx index 568faf9819..d80a59ff63 100644 --- a/src/components/BottomModalChoice.tsx +++ b/src/components/BottomModalChoice.tsx @@ -1,5 +1,3 @@ -// @flow - import React, { memo } from "react"; import styled from "styled-components/native"; import { Text, Icon, Flex } from "@ledgerhq/native-ui"; diff --git a/src/components/Button.js b/src/components/Button.js deleted file mode 100644 index 6f529949b9..0000000000 --- a/src/components/Button.js +++ /dev/null @@ -1,362 +0,0 @@ -/* @flow */ - -import React, { - useEffect, - useState, - useCallback, - memo, - useContext, - useMemo, -} from "react"; -import { RectButton } from "react-native-gesture-handler"; -import { - StyleSheet, - ActivityIndicator, - View, - Animated, - TouchableOpacity, -} from "react-native"; -import type { ViewStyleProp } from "react-native/Libraries/StyleSheet/StyleSheet"; -import { useTheme, useIsFocused } from "@react-navigation/native"; -import Config from "react-native-config"; -import LText from "./LText"; -import ButtonUseTouchable from "../context/ButtonUseTouchable"; -import { track } from "../analytics"; - -const WAIT_TIME_BEFORE_SPINNER = 150; -const BUTTON_HEIGHT = 48; -const ANIM_OFFSET = 20; -const ANIM_DURATION = 300; - -type ButtonType = - | "primary" - | "lightPrimary" - | "negativePrimary" - | "secondary" - | "lightSecondary" - | "darkSecondary" - | "greySecondary" - | "tertiary" - | "alert"; - -export type BaseButtonProps = { - type: ButtonType, - // when on press returns a promise, - // the button will toggle in a pending state and - // will wait the promise to complete before enabling the button again - // it also displays a spinner if it takes more than WAIT_TIME_BEFORE_SPINNER - onPress?: () => ?Promise | any, - // text of the button - title?: React$Node | string, - containerStyle?: ViewStyleProp, - titleStyle?: *, - IconLeft?: React$ComponentType<{ size: number, color: string }>, - IconRight?: React$ComponentType<{ size: number, color: string }>, - disabled?: boolean, - outline?: boolean, - // for analytics - event?: string, - eventProperties?: Object, - size?: number, - testID?: string, - pending?: boolean, -}; - -type Props = BaseButtonProps & { - useTouchable: boolean, - colors: *, - isFocused: boolean, -}; - -function ButtonWrapped(props: BaseButtonProps) { - const { colors } = useTheme(); - const isFocused = useIsFocused(); // @Warning be careful not to import the wrapped button outside of navigation context - const useTouchable = useContext(ButtonUseTouchable); - return ( - - ); -} - -export function BaseButton({ - // required props - title, - onPress, - titleStyle, - IconLeft, - IconRight, - disabled, - type, - useTouchable, - outline = true, - // everything else - containerStyle, - event, - eventProperties, - pending, - // $FlowFixMe - ...otherProps -}: Props) { - const { colors } = useTheme(); - const [spinnerOn, setSpinnerOn] = useState(); - const [anim] = useState(new Animated.Value(0)); - - useEffect(() => { - setSpinnerOn(pending); - }, [pending]); - - useEffect(() => { - if (spinnerOn) { - Animated.spring(anim, { - toValue: 1, - duration: ANIM_DURATION, - useNativeDriver: true, - delay: WAIT_TIME_BEFORE_SPINNER, - }).start(); - } else { - Animated.spring(anim, { - toValue: 0, - duration: ANIM_DURATION, - useNativeDriver: true, - }).start(); - } - }, [spinnerOn, anim]); - - const onPressHandler = useCallback(async () => { - if (!onPress) return; - if (event) { - track(event, eventProperties); - } - let isPromise; - try { - const res = onPress(); - isPromise = !!res && !!res.then; - if (isPromise) { - // it's a promise, we will use pending state - setSpinnerOn(true); - await res; - } - } finally { - if (isPromise) { - setSpinnerOn(false); - } - } - }, [event, eventProperties, onPress]); - - if (__DEV__ && "style" in otherProps) { - console.warn( - "Button props 'style' must not be used. Use 'containerStyle' instead.", - ); - } - - const theme = { - primaryContainer: { backgroundColor: colors.live }, - primaryTitle: { color: "white" }, - - lightPrimaryContainer: { backgroundColor: colors.lightLive }, - lightPrimaryTitle: { color: colors.live }, - - negativePrimaryContainer: { backgroundColor: "white" }, - negativePrimaryTitle: { color: colors.live }, - - secondaryContainer: { backgroundColor: "transparent" }, - secondaryTitle: { color: colors.grey }, - secondaryOutlineBorder: { borderColor: colors.fog }, - - lightSecondaryContainer: { backgroundColor: "transparent" }, - lightSecondaryTitle: { color: colors.live }, - - greySecondaryContainer: { backgroundColor: "transparent" }, - greySecondaryTitle: { color: colors.grey }, - - darkSecondaryContainer: { backgroundColor: "transparent" }, - darkSecondaryTitle: { color: colors.smoke }, - darkSecondaryOutlineBorder: { borderColor: colors.smoke }, - - tertiaryContainer: { backgroundColor: "transparent" }, - tertiaryTitle: { color: colors.live }, - tertiaryOutlineBorder: { borderColor: colors.live }, - - alertContainer: { backgroundColor: colors.alert }, - alertTitle: { color: "white" }, - - disabledContainer: { backgroundColor: colors.lightFog }, - disabledTitle: { color: colors.grey }, - }; - - const isDisabled = disabled || !onPress || spinnerOn; - - const needsBorder = - (type === "secondary" || type === "tertiary" || type === "darkSecondary") && - !isDisabled && - outline; - - const mainContainerStyle = [ - styles.container, - isDisabled ? theme.disabledContainer : theme[`${type}Container`], - containerStyle, - ]; - - const borderStyle = [styles.outlineBorder, theme[`${type}OutlineBorder`]]; - - const textStyle = [ - styles.title, - titleStyle, - isDisabled ? theme.disabledTitle : theme[`${type}Title`], - ]; - - const iconColor = isDisabled - ? theme.disabledTitle.color - : (theme[`${type}Title`] || {}).color; - - const titleSliderOffset = anim.interpolate({ - inputRange: [0, 1], - // $FlowFixMe - outputRange: [0, -ANIM_OFFSET], - }); - - const titleOpacity = anim.interpolate({ - inputRange: [0, 1], - // $FlowFixMe - outputRange: [1, 0], - }); - - const spinnerSliderOffset = anim.interpolate({ - inputRange: [0, 1], - // $FlowFixMe - outputRange: [ANIM_OFFSET, 0], - }); - - const titleSliderStyle = [ - styles.slider, - !Config.MOCK - ? { - opacity: titleOpacity, - transform: [{ translateY: titleSliderOffset }], - } - : undefined, - ]; - - const spinnerSliderStyle = [ - styles.spinnerSlider, - !Config.MOCK - ? { - opacity: anim, - transform: [{ translateY: spinnerSliderOffset }], - } - : undefined, - ]; - - const Container = useTouchable - ? disabled - ? View - : TouchableOpacity - : RectButton; - const containerSpecificProps = useTouchable ? {} : { enabled: !isDisabled }; - - function getTestID() { - // $FlowFixMe - if (isDisabled || !otherProps.isFocused) return undefined; - if (otherProps.testID) return otherProps.testID; - - switch (type) { - case "primary": - return "Proceed"; - default: - return event; - } - } - const testID = useMemo(getTestID, [ - isDisabled, - otherProps.isFocused, - otherProps.testID, - event, - type, - ]); - - return ( - // $FlowFixMe - - {needsBorder ? : null} - - - {IconLeft ? ( - - - - ) : null} - - {title ? ( - - {title} - - ) : null} - - {IconRight ? ( - - - - ) : null} - - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - height: BUTTON_HEIGHT, - alignItems: "center", - justifyContent: "center", - paddingHorizontal: 10, - borderRadius: 4, - overflow: "hidden", - }, - slider: { - flexDirection: "row", - alignItems: "center", - justifyContent: "center", - paddingHorizontal: 10, - }, - spinnerSlider: { - position: "absolute", - top: 0, - left: 0, - right: 0, - bottom: 0, - flexDirection: "row", - alignItems: "center", - justifyContent: "center", - paddingHorizontal: 10, - }, - title: { - fontSize: 16, - }, - outlineBorder: { - position: "absolute", - top: 0, - left: 0, - right: 0, - bottom: 0, - borderWidth: 1.5, - borderRadius: 4, - }, -}); - -export default memo(ButtonWrapped); diff --git a/src/components/CameraScreen/QRCodeBottomLayer.js b/src/components/CameraScreen/QRCodeBottomLayer.js deleted file mode 100644 index 6a219f23b8..0000000000 --- a/src/components/CameraScreen/QRCodeBottomLayer.js +++ /dev/null @@ -1,62 +0,0 @@ -// @flow -import React, { memo } from "react"; -import { View, StyleSheet } from "react-native"; -import { Trans } from "react-i18next"; - -import { rgba } from "../../colors"; - -import LText from "../LText"; -import QrCodeProgressBar from "./QRCodeProgressBar"; -import { softMenuBarHeight } from "../../logic/getWindowDimensions"; - -type Props = { - progress?: number, - viewFinderSize: number, - liveQrCode?: boolean, -}; - -function QrCodeBottomLayer({ progress, viewFinderSize, liveQrCode }: Props) { - return ( - - - - - - - - - ); -} - -const styles = StyleSheet.create({ - darken: { - flexGrow: 1, - paddingBottom: softMenuBarHeight(), - }, - text: { - fontSize: 16, - lineHeight: 24, - textAlign: "center", - color: "#fff", - }, - centered: { - flex: 1, - alignItems: "center", - paddingTop: 8, - paddingHorizontal: 16, - }, -}); - -export default memo(QrCodeBottomLayer); diff --git a/src/components/CameraScreen/QRCodeTopLayer.js b/src/components/CameraScreen/QRCodeTopLayer.js deleted file mode 100644 index a89989c9cb..0000000000 --- a/src/components/CameraScreen/QRCodeTopLayer.js +++ /dev/null @@ -1,28 +0,0 @@ -// @flow -import React from "react"; -import { StyleSheet } from "react-native"; -import { Trans } from "react-i18next"; - -import LText from "../LText"; - -const QRCodeTopLayer = () => ( - <> - - - - - - - -); - -const styles = StyleSheet.create({ - text: { - fontSize: 16, - lineHeight: 32, - textAlign: "center", - color: "#fff", - }, -}); - -export default QRCodeTopLayer; diff --git a/src/components/Card.js b/src/components/Card.js deleted file mode 100644 index 516693b196..0000000000 --- a/src/components/Card.js +++ /dev/null @@ -1,31 +0,0 @@ -// @flow - -import React from "react"; -import { RectButton } from "react-native-gesture-handler"; -import { View, StyleSheet } from "react-native"; -import { useTheme } from "@react-navigation/native"; - -type Props = { - onPress?: () => void, - children: any, - style?: any, - bg?: string, -}; - -export default function Card({ onPress, style, children, bg }: Props) { - const { colors } = useTheme(); - const backgroundStyle = { backgroundColor: colors[bg] || colors.card }; - return onPress ? ( - - {children} - - ) : ( - {children} - ); -} - -const styles = StyleSheet.create({ - root: { - borderRadius: 4, - }, -}); diff --git a/src/components/Carousel/Slide.js b/src/components/Carousel/Slide.js deleted file mode 100644 index ed3dc56d9f..0000000000 --- a/src/components/Carousel/Slide.js +++ /dev/null @@ -1,81 +0,0 @@ -// @flow - -import React, { useCallback } from "react"; -import { Linking, Image, View, StyleSheet } from "react-native"; -import getWindowDimensions from "../../logic/getWindowDimensions"; -import LText from "../LText"; -import Touchable from "../Touchable"; - -type PropType = { - url: string, - name: string, - title: *, - description: *, - image: *, - position: *, -}; - -const Slide = ({ - url, - name, - title, - description, - image, - position, -}: PropType) => { - const slideWidth = getWindowDimensions().width - 32; - const onClick = useCallback(() => { - Linking.openURL(url); - }, [url]); - return ( - - - - - - {title} - - - {description} - - - - - ); -}; - -const styles = StyleSheet.create({ - wrapper: { - width: "100%", - height: 100, - padding: 16, - paddingBottom: 0, - position: "relative", - }, - buttonWrapper: { - display: "flex", - flexDirection: "row", - }, - button: { - marginBottom: 16, - }, - label: { - textTransform: "uppercase", - letterSpacing: 1, - fontSize: 10, - lineHeight: 15, - marginRight: 100, - }, - description: { - fontSize: 13, - lineHeight: 19, - marginTop: 8, - marginBottom: 16, - marginRight: 100, - }, - layer: { - position: "absolute", - }, -}); - -export default Slide; diff --git a/src/components/Carousel/index.js b/src/components/Carousel/index.js deleted file mode 100644 index 1c42ee6e9b..0000000000 --- a/src/components/Carousel/index.js +++ /dev/null @@ -1,249 +0,0 @@ -// @flow - -import React, { useState, memo, useCallback } from "react"; -import { View, StyleSheet, TouchableOpacity, Platform } from "react-native"; -import { useDispatch, useSelector } from "react-redux"; -import map from "lodash/map"; -import Swiper from "react-native-swiper"; -import { Trans } from "react-i18next"; -import { useTheme } from "@react-navigation/native"; -import { urls } from "../../config/urls"; -import { setCarouselVisibility } from "../../actions/settings"; -import { carouselVisibilitySelector } from "../../reducers/settings"; -import Card from "../Card"; -import LText from "../LText"; -import Button from "../Button"; -import IconClose from "../../icons/Close"; -import Slide from "./Slide"; - -export const SLIDES = [ - { - url: urls.banners.ledgerAcademy, - name: "LedgerAcademy", - title: , - description: , - image: require("../../images/banners/academy.png"), - position: { - bottom: 0, - right: 0, - width: 146, - height: 93, - }, - }, - { - url: "ledgerlive://buy", - name: "buyCrypto", - title: , - description: , - image: require("../../images/banners/buycrypto.png"), - position: { - bottom: 0, - right: 0, - width: 146, - height: 93, - }, - }, - { - url: "ledgerlive://swap", - name: "Swap", - title: , - description: , - image: require("../../images/banners/swap.png"), - position: { - bottom: 0, - right: 0, - width: 127, - height: 100, - }, - }, - { - url: urls.banners.familyPack, - name: "FamilyPack", - title: , - description: , - image: require("../../images/banners/familypack.png"), - position: { - bottom: 0, - right: 0, - width: 180, - height: 80, - }, - }, -]; - -export const getDefaultSlides = () => - map(SLIDES, slide => ({ - id: slide.name, - Component: () => ( - - ), - })); - -const hitSlop = { - top: 16, - left: 16, - right: 16, - bottom: 16, -}; - -export const CAROUSEL_NONCE: number = 4; - -const Carousel = () => { - const { colors } = useTheme(); - const dispatch = useDispatch(); - const hidden = useSelector(carouselVisibilitySelector); - const [showDismissConfirmation, setShowDismissConfirmation] = useState(false); - - let slides = getDefaultSlides(); - slides = slides.filter(slide => { - if (slide.start && slide.start > new Date()) { - return false; - } - if (slide.end && slide.end < new Date()) { - return false; - } - return true; - }); - - const onDismiss = useCallback(() => setShowDismissConfirmation(true), []); - - const onUndo = useCallback(() => setShowDismissConfirmation(false), []); - const onConfirm = useCallback( - () => dispatch(setCarouselVisibility(CAROUSEL_NONCE)), - [dispatch], - ); - - if (!slides.length || hidden >= CAROUSEL_NONCE) { - // No slides or dismissed, no problem - return null; - } - - return ( - - {showDismissConfirmation ? ( - - - - - - - - -