@ledgerhq/live-common 27.2.0 → 27.3.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/apps/logic.test.js +1 -1
- package/lib/apps/logic.test.js.map +1 -1
- package/lib/apps/polyfill.d.ts +1 -1
- package/lib/apps/polyfill.d.ts.map +1 -1
- package/lib/apps/polyfill.js +6 -3
- package/lib/apps/polyfill.js.map +1 -1
- package/lib/apps/polyfill.test.d.ts +2 -0
- package/lib/apps/polyfill.test.d.ts.map +1 -0
- package/lib/apps/polyfill.test.js +25 -0
- package/lib/apps/polyfill.test.js.map +1 -0
- package/lib/apps/support.d.ts.map +1 -1
- package/lib/apps/support.js +3 -2
- package/lib/apps/support.js.map +1 -1
- package/lib/bot/engine.d.ts.map +1 -1
- package/lib/bot/engine.js +154 -45
- package/lib/bot/engine.js.map +1 -1
- package/lib/bot/formatters.d.ts +1 -1
- package/lib/bot/formatters.d.ts.map +1 -1
- package/lib/bot/formatters.js +9 -3
- package/lib/bot/formatters.js.map +1 -1
- package/lib/bot/index.d.ts.map +1 -1
- package/lib/bot/index.js +29 -11
- package/lib/bot/index.js.map +1 -1
- package/lib/bot/specs.d.ts +12 -1
- package/lib/bot/specs.d.ts.map +1 -1
- package/lib/bot/specs.js +75 -1
- package/lib/bot/specs.js.map +1 -1
- package/lib/bot/types.d.ts +18 -1
- package/lib/bot/types.d.ts.map +1 -1
- package/lib/currencies/sortByMarketcap.d.ts.map +1 -1
- package/lib/currencies/sortByMarketcap.js +5 -1
- package/lib/currencies/sortByMarketcap.js.map +1 -1
- package/lib/currencies/support.d.ts.map +1 -1
- package/lib/currencies/support.js +2 -1
- package/lib/currencies/support.js.map +1 -1
- package/lib/derivation.d.ts.map +1 -1
- package/lib/derivation.js +2 -4
- package/lib/derivation.js.map +1 -1
- package/lib/env.js +1 -1
- package/lib/exchange/swap/getExchangeRates.d.ts.map +1 -1
- package/lib/exchange/swap/getExchangeRates.js +6 -3
- package/lib/exchange/swap/getExchangeRates.js.map +1 -1
- package/lib/exchange/swap/getProviders.d.ts.map +1 -1
- package/lib/exchange/swap/getProviders.js +45 -5
- package/lib/exchange/swap/getProviders.js.map +1 -1
- package/lib/exchange/swap/getProviders.test.d.ts +2 -0
- package/lib/exchange/swap/getProviders.test.d.ts.map +1 -0
- package/lib/exchange/swap/getProviders.test.js +519 -0
- package/lib/exchange/swap/getProviders.test.js.map +1 -0
- package/lib/exchange/swap/hooks/useProviderRates.d.ts +1 -0
- package/lib/exchange/swap/hooks/useProviderRates.d.ts.map +1 -1
- package/lib/exchange/swap/hooks/useProviderRates.js +19 -4
- package/lib/exchange/swap/hooks/useProviderRates.js.map +1 -1
- package/lib/exchange/swap/hooks/useProviderRates.test.js +42 -0
- package/lib/exchange/swap/hooks/useProviderRates.test.js.map +1 -1
- package/lib/exchange/swap/hooks/useSwapTransaction.d.ts +1 -0
- package/lib/exchange/swap/hooks/useSwapTransaction.d.ts.map +1 -1
- package/lib/exchange/swap/hooks/useSwapTransaction.js +2 -1
- package/lib/exchange/swap/hooks/useSwapTransaction.js.map +1 -1
- package/lib/exchange/swap/index.d.ts +2 -1
- package/lib/exchange/swap/index.d.ts.map +1 -1
- package/lib/exchange/swap/index.js +11 -1
- package/lib/exchange/swap/index.js.map +1 -1
- package/lib/exchange/swap/index.test.js +22 -0
- package/lib/exchange/swap/index.test.js.map +1 -1
- package/lib/exchange/swap/mock.js +1 -1
- package/lib/exchange/swap/mock.js.map +1 -1
- package/lib/exchange/swap/types.d.ts +14 -0
- package/lib/exchange/swap/types.d.ts.map +1 -1
- package/lib/exchange/swap/utils/index.d.ts +1 -0
- package/lib/exchange/swap/utils/index.d.ts.map +1 -1
- package/lib/exchange/swap/utils/index.js +6 -1
- package/lib/exchange/swap/utils/index.js.map +1 -1
- package/lib/exchange/swap/utils/index.test.js +12 -0
- package/lib/exchange/swap/utils/index.test.js.map +1 -1
- package/lib/families/algorand/specs.d.ts.map +1 -1
- package/lib/families/algorand/specs.js +2 -0
- package/lib/families/algorand/specs.js.map +1 -1
- package/lib/families/algorand/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/algorand/speculos-deviceActions.js +2 -29
- package/lib/families/algorand/speculos-deviceActions.js.map +1 -1
- package/lib/families/bitcoin/specs.d.ts +0 -1
- package/lib/families/bitcoin/specs.d.ts.map +1 -1
- package/lib/families/bitcoin/specs.js +65 -48
- package/lib/families/bitcoin/specs.js.map +1 -1
- package/lib/families/bitcoin/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/bitcoin/speculos-deviceActions.js +2 -22
- package/lib/families/bitcoin/speculos-deviceActions.js.map +1 -1
- package/lib/families/cardano/specs.d.ts.map +1 -1
- package/lib/families/cardano/specs.js +9 -4
- package/lib/families/cardano/specs.js.map +1 -1
- package/lib/families/cardano/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/cardano/speculos-deviceActions.js +2 -10
- package/lib/families/cardano/speculos-deviceActions.js.map +1 -1
- package/lib/families/celo/specs/createSendMutation.d.ts +1 -0
- package/lib/families/celo/specs/createSendMutation.d.ts.map +1 -1
- package/lib/families/celo/specs/createSendMutation.js +7 -5
- package/lib/families/celo/specs/createSendMutation.js.map +1 -1
- package/lib/families/celo/specs.d.ts.map +1 -1
- package/lib/families/celo/specs.js +1 -0
- package/lib/families/celo/specs.js.map +1 -1
- package/lib/families/celo/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/celo/speculos-deviceActions.js +3 -10
- package/lib/families/celo/speculos-deviceActions.js.map +1 -1
- package/lib/families/cosmos/helpers.d.ts +9 -0
- package/lib/families/cosmos/helpers.d.ts.map +1 -0
- package/lib/families/cosmos/helpers.js +20 -0
- package/lib/families/cosmos/helpers.js.map +1 -0
- package/lib/families/cosmos/helpers.unit.test.d.ts +2 -0
- package/lib/families/cosmos/helpers.unit.test.d.ts.map +1 -0
- package/lib/families/cosmos/helpers.unit.test.js +56 -0
- package/lib/families/cosmos/helpers.unit.test.js.map +1 -0
- package/lib/families/cosmos/js-signOperation.d.ts.map +1 -1
- package/lib/families/cosmos/js-signOperation.js +5 -3
- package/lib/families/cosmos/js-signOperation.js.map +1 -1
- package/lib/families/cosmos/js-synchronisation.d.ts.map +1 -1
- package/lib/families/cosmos/js-synchronisation.js +99 -95
- package/lib/families/cosmos/js-synchronisation.js.map +1 -1
- package/lib/families/cosmos/specs.d.ts.map +1 -1
- package/lib/families/cosmos/specs.js +5 -1
- package/lib/families/cosmos/specs.js.map +1 -1
- package/lib/families/crypto_org/specs.d.ts.map +1 -1
- package/lib/families/crypto_org/specs.js +9 -8
- package/lib/families/crypto_org/specs.js.map +1 -1
- package/lib/families/elrond/specs.d.ts.map +1 -1
- package/lib/families/elrond/specs.js +1 -0
- package/lib/families/elrond/specs.js.map +1 -1
- package/lib/families/elrond/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/elrond/speculos-deviceActions.js +3 -8
- package/lib/families/elrond/speculos-deviceActions.js.map +1 -1
- package/lib/families/ethereum/specs.d.ts.map +1 -1
- package/lib/families/ethereum/specs.js +20 -8
- package/lib/families/ethereum/specs.js.map +1 -1
- package/lib/families/ethereum/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/ethereum/speculos-deviceActions.js +10 -33
- package/lib/families/ethereum/speculos-deviceActions.js.map +1 -1
- package/lib/families/evm/specs.d.ts.map +1 -1
- package/lib/families/evm/specs.js +20 -10
- package/lib/families/evm/specs.js.map +1 -1
- package/lib/families/evm/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/evm/speculos-deviceActions.js +5 -25
- package/lib/families/evm/speculos-deviceActions.js.map +1 -1
- package/lib/families/filecoin/specs.d.ts.map +1 -1
- package/lib/families/filecoin/specs.js +3 -0
- package/lib/families/filecoin/specs.js.map +1 -1
- package/lib/families/filecoin/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/filecoin/speculos-deviceActions.js +6 -7
- package/lib/families/filecoin/speculos-deviceActions.js.map +1 -1
- package/lib/families/hedera/specs.d.ts.map +1 -1
- package/lib/families/hedera/specs.js +2 -0
- package/lib/families/hedera/specs.js.map +1 -1
- package/lib/families/osmosis/specs.d.ts.map +1 -1
- package/lib/families/osmosis/specs.js +3 -0
- package/lib/families/osmosis/specs.js.map +1 -1
- package/lib/families/polkadot/specs.d.ts.map +1 -1
- package/lib/families/polkadot/specs.js +4 -1
- package/lib/families/polkadot/specs.js.map +1 -1
- package/lib/families/polkadot/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/polkadot/speculos-deviceActions.js +3 -10
- package/lib/families/polkadot/speculos-deviceActions.js.map +1 -1
- package/lib/families/ripple/specs.d.ts.map +1 -1
- package/lib/families/ripple/specs.js +2 -0
- package/lib/families/ripple/specs.js.map +1 -1
- package/lib/families/ripple/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/ripple/speculos-deviceActions.js +2 -22
- package/lib/families/ripple/speculos-deviceActions.js.map +1 -1
- package/lib/families/solana/specs.d.ts.map +1 -1
- package/lib/families/solana/specs.js +7 -3
- package/lib/families/solana/specs.js.map +1 -1
- package/lib/families/solana/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/solana/speculos-deviceActions.js +5 -7
- package/lib/families/solana/speculos-deviceActions.js.map +1 -1
- package/lib/families/stellar/specs.d.ts.map +1 -1
- package/lib/families/stellar/specs.js +1 -0
- package/lib/families/stellar/specs.js.map +1 -1
- package/lib/families/stellar/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/stellar/speculos-deviceActions.js +4 -8
- package/lib/families/stellar/speculos-deviceActions.js.map +1 -1
- package/lib/families/tezos/specs.d.ts.map +1 -1
- package/lib/families/tezos/specs.js +6 -1
- package/lib/families/tezos/specs.js.map +1 -1
- package/lib/families/tezos/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/tezos/speculos-deviceActions.js +6 -11
- package/lib/families/tezos/speculos-deviceActions.js.map +1 -1
- package/lib/families/tron/specs.d.ts.map +1 -1
- package/lib/families/tron/specs.js +16 -1
- package/lib/families/tron/specs.js.map +1 -1
- package/lib/families/tron/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/tron/speculos-deviceActions.js +2 -14
- package/lib/families/tron/speculos-deviceActions.js.map +1 -1
- package/lib/families/tron/synchronisation.integration.test.d.ts +2 -0
- package/lib/families/tron/synchronisation.integration.test.d.ts.map +1 -0
- package/lib/families/tron/{synchronisation.test.js → synchronisation.integration.test.js} +1 -1
- package/lib/families/tron/synchronisation.integration.test.js.map +1 -0
- package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
- package/lib/featureFlags/defaultFeatures.js +6 -0
- package/lib/featureFlags/defaultFeatures.js.map +1 -1
- package/lib/generated/specs.d.ts +0 -1
- package/lib/generated/specs.d.ts.map +1 -1
- package/lib/hw/actions/installLanguage.js +1 -1
- package/lib/hw/extractOnboardingState.d.ts +5 -1
- package/lib/hw/extractOnboardingState.d.ts.map +1 -1
- package/lib/hw/extractOnboardingState.js +17 -9
- package/lib/hw/extractOnboardingState.js.map +1 -1
- package/lib/hw/extractOnboardingState.test.js +21 -11
- package/lib/hw/extractOnboardingState.test.js.map +1 -1
- package/lib/load/speculos.d.ts.map +1 -1
- package/lib/load/speculos.js +39 -15
- package/lib/load/speculos.js.map +1 -1
- package/lib/manager/hooks.d.ts +4 -1
- package/lib/manager/hooks.d.ts.map +1 -1
- package/lib/manager/hooks.js +4 -3
- package/lib/manager/hooks.js.map +1 -1
- package/lib/manager/localization.js +2 -2
- package/lib/manager/localization.js.map +1 -1
- package/lib/mock/account.d.ts.map +1 -1
- package/lib/mock/account.js +17 -19
- package/lib/mock/account.js.map +1 -1
- package/lib/notifications/ServiceStatusProvider/index.d.ts.map +1 -1
- package/lib/notifications/ServiceStatusProvider/index.js +5 -1
- package/lib/notifications/ServiceStatusProvider/index.js.map +1 -1
- package/lib/postOnboarding/PostOnboardingProvider.d.ts +20 -0
- package/lib/postOnboarding/PostOnboardingProvider.d.ts.map +1 -0
- package/lib/postOnboarding/PostOnboardingProvider.js +33 -0
- package/lib/postOnboarding/PostOnboardingProvider.js.map +1 -0
- package/lib/postOnboarding/actions.d.ts +20 -0
- package/lib/postOnboarding/actions.d.ts.map +1 -0
- package/lib/postOnboarding/actions.js +37 -0
- package/lib/postOnboarding/actions.js.map +1 -0
- package/lib/postOnboarding/hooks/index.d.ts +6 -0
- package/lib/postOnboarding/hooks/index.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/index.js +22 -0
- package/lib/postOnboarding/hooks/index.js.map +1 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.d.ts +8 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.js +16 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.js.map +1 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.test.d.ts +2 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.test.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.test.js +75 -0
- package/lib/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.test.js.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingContext.d.ts +3 -0
- package/lib/postOnboarding/hooks/usePostOnboardingContext.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingContext.js +10 -0
- package/lib/postOnboarding/hooks/usePostOnboardingContext.js.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.d.ts +8 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.js +20 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.js.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.test.d.ts +2 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.test.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.test.js +64 -0
- package/lib/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.test.js.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.d.ts +12 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.js +65 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.js.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.test.d.ts +2 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.test.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.test.js +129 -0
- package/lib/postOnboarding/hooks/usePostOnboardingHubState.test.js.map +1 -0
- package/lib/postOnboarding/hooks/useStartPostOnboardingCallback.d.ts +13 -0
- package/lib/postOnboarding/hooks/useStartPostOnboardingCallback.d.ts.map +1 -0
- package/lib/postOnboarding/hooks/useStartPostOnboardingCallback.js +34 -0
- package/lib/postOnboarding/hooks/useStartPostOnboardingCallback.js.map +1 -0
- package/lib/postOnboarding/mock.d.ts +8 -0
- package/lib/postOnboarding/mock.d.ts.map +1 -0
- package/lib/postOnboarding/mock.js +46 -0
- package/lib/postOnboarding/mock.js.map +1 -0
- package/lib/postOnboarding/reducer.d.ts +22 -0
- package/lib/postOnboarding/reducer.d.ts.map +1 -0
- package/lib/postOnboarding/reducer.js +71 -0
- package/lib/postOnboarding/reducer.js.map +1 -0
- package/lib/postOnboarding/reducer.test.d.ts +2 -0
- package/lib/postOnboarding/reducer.test.d.ts.map +1 -0
- package/lib/postOnboarding/reducer.test.js +251 -0
- package/lib/postOnboarding/reducer.test.js.map +1 -0
- package/package.json +24 -20
- package/src/__tests__/__snapshots__/portfolio.v2.ts.snap +16 -0
- package/src/apps/__snapshots__/logic.test.ts.snap +18 -11
- package/src/apps/logic.test.ts +1 -2
- package/src/apps/polyfill.test.ts +24 -0
- package/src/apps/polyfill.ts +7 -2
- package/src/apps/support.ts +2 -1
- package/src/bot/engine.ts +178 -35
- package/src/bot/formatters.ts +15 -2
- package/src/bot/index.ts +48 -19
- package/src/bot/specs.ts +95 -1
- package/src/bot/types.ts +23 -1
- package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +55 -6
- package/src/currencies/sortByMarketcap.ts +6 -1
- package/src/currencies/support.ts +2 -1
- package/src/derivation.ts +2 -4
- package/src/env.ts +1 -1
- package/src/exchange/swap/getExchangeRates.ts +12 -5
- package/src/exchange/swap/getProviders.test.ts +450 -0
- package/src/exchange/swap/getProviders.ts +31 -8
- package/src/exchange/swap/hooks/useProviderRates.test.ts +43 -0
- package/src/exchange/swap/hooks/useProviderRates.ts +22 -3
- package/src/exchange/swap/hooks/useSwapTransaction.ts +3 -1
- package/src/exchange/swap/index.test.ts +36 -1
- package/src/exchange/swap/index.ts +15 -0
- package/src/exchange/swap/mock.ts +2 -2
- package/src/exchange/swap/types.ts +11 -0
- package/src/exchange/swap/utils/index.test.ts +19 -0
- package/src/exchange/swap/utils/index.ts +5 -0
- package/src/families/algorand/specs.ts +3 -1
- package/src/families/algorand/speculos-deviceActions.ts +4 -35
- package/src/families/bitcoin/specs.ts +72 -56
- package/src/families/bitcoin/speculos-deviceActions.ts +3 -26
- package/src/families/cardano/specs.ts +9 -4
- package/src/families/cardano/speculos-deviceActions.ts +3 -14
- package/src/families/celo/specs/createSendMutation.ts +5 -3
- package/src/families/celo/specs.ts +2 -0
- package/src/families/celo/speculos-deviceActions.ts +6 -14
- package/src/families/cosmos/__snapshots__/bridge.integration.test.ts.snap +24 -44
- package/src/families/cosmos/helpers.ts +21 -0
- package/src/families/cosmos/helpers.unit.test.ts +63 -0
- package/src/families/cosmos/js-signOperation.ts +6 -3
- package/src/families/cosmos/js-synchronisation.ts +120 -119
- package/src/families/cosmos/specs.ts +11 -2
- package/src/families/crypto_org/specs.ts +12 -19
- package/src/families/elrond/specs.ts +1 -0
- package/src/families/elrond/speculos-deviceActions.ts +4 -9
- package/src/families/ethereum/specs.ts +34 -38
- package/src/families/ethereum/speculos-deviceActions.ts +16 -46
- package/src/families/evm/specs.ts +18 -8
- package/src/families/evm/speculos-deviceActions.ts +7 -35
- package/src/families/filecoin/specs.ts +4 -1
- package/src/families/filecoin/speculos-deviceActions.ts +7 -8
- package/src/families/hedera/specs.ts +3 -1
- package/src/families/osmosis/specs.ts +4 -1
- package/src/families/polkadot/specs.ts +11 -2
- package/src/families/polkadot/speculos-deviceActions.ts +5 -16
- package/src/families/ripple/specs.ts +3 -1
- package/src/families/ripple/speculos-deviceActions.ts +3 -28
- package/src/families/solana/specs.ts +15 -4
- package/src/families/solana/speculos-deviceActions.ts +6 -8
- package/src/families/stellar/specs.ts +1 -0
- package/src/families/stellar/speculos-deviceActions.ts +5 -11
- package/src/families/tezos/specs.ts +7 -5
- package/src/families/tezos/speculos-deviceActions.ts +9 -16
- package/src/families/tron/specs.ts +31 -3
- package/src/families/tron/speculos-deviceActions.ts +4 -12
- package/src/families/tron/{synchronisation.test.ts → synchronisation.integration.test.ts} +0 -0
- package/src/featureFlags/defaultFeatures.ts +6 -0
- package/src/hw/actions/installLanguage.ts +1 -1
- package/src/hw/extractOnboardingState.test.ts +29 -12
- package/src/hw/extractOnboardingState.ts +17 -9
- package/src/load/speculos.ts +42 -21
- package/src/manager/hooks.ts +6 -6
- package/src/manager/localization.ts +2 -2
- package/src/mock/account.ts +18 -20
- package/src/notifications/ServiceStatusProvider/index.tsx +8 -1
- package/src/postOnboarding/PostOnboardingProvider.tsx +49 -0
- package/src/postOnboarding/actions.ts +40 -0
- package/src/postOnboarding/hooks/index.ts +5 -0
- package/src/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.test.ts +82 -0
- package/src/postOnboarding/hooks/useAllPostOnboardingActionsCompleted.ts +12 -0
- package/src/postOnboarding/hooks/usePostOnboardingContext.ts +9 -0
- package/src/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.test.ts +83 -0
- package/src/postOnboarding/hooks/usePostOnboardingEntryPointVisibleOnWallet.ts +22 -0
- package/src/postOnboarding/hooks/usePostOnboardingHubState.test.ts +184 -0
- package/src/postOnboarding/hooks/usePostOnboardingHubState.ts +56 -0
- package/src/postOnboarding/hooks/useStartPostOnboardingCallback.ts +38 -0
- package/src/postOnboarding/mock.ts +53 -0
- package/src/postOnboarding/reducer.test.ts +247 -0
- package/src/postOnboarding/reducer.ts +105 -0
- package/lib/families/tron/synchronisation.test.d.ts +0 -2
- package/lib/families/tron/synchronisation.test.d.ts.map +0 -1
- package/lib/families/tron/synchronisation.test.js.map +0 -1
package/src/load/speculos.ts
CHANGED
|
@@ -21,6 +21,24 @@ let idCounter = 0;
|
|
|
21
21
|
|
|
22
22
|
const data = {};
|
|
23
23
|
|
|
24
|
+
const modelMap: Record<string, DeviceModelId> = {
|
|
25
|
+
nanos: <DeviceModelId>"nanoS",
|
|
26
|
+
"nanos+": <DeviceModelId>"nanoSP",
|
|
27
|
+
nanox: <DeviceModelId>"nanoX",
|
|
28
|
+
blue: <DeviceModelId>"blue",
|
|
29
|
+
};
|
|
30
|
+
const reverseModelMap = {};
|
|
31
|
+
for (const k in modelMap) {
|
|
32
|
+
reverseModelMap[modelMap[k]] = k;
|
|
33
|
+
}
|
|
34
|
+
const modelMapPriority: Record<string, number> = {
|
|
35
|
+
nanos: 4,
|
|
36
|
+
"nanos+": 3,
|
|
37
|
+
nanox: 2,
|
|
38
|
+
blue: 1,
|
|
39
|
+
};
|
|
40
|
+
const defaultFirmware: Record<string, string> = {};
|
|
41
|
+
|
|
24
42
|
export async function releaseSpeculosDevice(id: string) {
|
|
25
43
|
log("speculos", "release " + id);
|
|
26
44
|
const obj = data[id];
|
|
@@ -34,6 +52,23 @@ export function closeAllSpeculosDevices() {
|
|
|
34
52
|
return Promise.all(Object.keys(data).map(releaseSpeculosDevice));
|
|
35
53
|
}
|
|
36
54
|
|
|
55
|
+
// to keep in sync from https://github.com/LedgerHQ/speculos/tree/master/speculos/cxlib
|
|
56
|
+
const existingSdks = [
|
|
57
|
+
"nanos-cx-2.0.elf",
|
|
58
|
+
"nanos-cx-2.1.elf",
|
|
59
|
+
"nanosp-cx-1.0.3.elf",
|
|
60
|
+
"nanosp-cx-1.0.elf",
|
|
61
|
+
"nanox-cx-2.0.2.elf",
|
|
62
|
+
"nanox-cx-2.0.elf",
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
function inferSDK(firmware: string, model: string): string | undefined {
|
|
66
|
+
const begin = `${model.toLowerCase()}-cx-`;
|
|
67
|
+
if (existingSdks.includes(begin + firmware + ".elf")) return firmware;
|
|
68
|
+
const shortVersion = firmware.slice(0, 3);
|
|
69
|
+
if (existingSdks.includes(begin + shortVersion + ".elf")) return shortVersion;
|
|
70
|
+
}
|
|
71
|
+
|
|
37
72
|
export async function createSpeculosDevice(
|
|
38
73
|
arg: {
|
|
39
74
|
model: DeviceModelId;
|
|
@@ -59,14 +94,11 @@ export async function createSpeculosDevice(
|
|
|
59
94
|
const buttonPort = 42000 + idCounter;
|
|
60
95
|
const automationPort = 43000 + idCounter;
|
|
61
96
|
|
|
62
|
-
|
|
63
|
-
const sdk =
|
|
64
|
-
model === "nanoX" ? "1.2" : model === "nanoS" ? firmware.slice(0, 3) : null;
|
|
97
|
+
const sdk = inferSDK(firmware, model);
|
|
65
98
|
|
|
66
|
-
const appPath = `./apps/${
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)}/app_${appVersion}.elf`;
|
|
99
|
+
const appPath = `./apps/${
|
|
100
|
+
reverseModelMap[model]
|
|
101
|
+
}/${firmware}/${appName.replace(/ /g, "")}/app_${appVersion}.elf`;
|
|
70
102
|
|
|
71
103
|
const params = [
|
|
72
104
|
"run",
|
|
@@ -91,7 +123,7 @@ export async function createSpeculosDevice(
|
|
|
91
123
|
...(dependency
|
|
92
124
|
? [
|
|
93
125
|
"-l",
|
|
94
|
-
`${dependency}:${`./apps/${model
|
|
126
|
+
`${dependency}:${`./apps/${reverseModelMap[model]}/${firmware}/${dependency}/app_${appVersion}.elf`}`,
|
|
95
127
|
]
|
|
96
128
|
: []),
|
|
97
129
|
...(sdk ? ["--sdk", sdk] : []),
|
|
@@ -213,17 +245,6 @@ export type AppCandidate = {
|
|
|
213
245
|
appName: string;
|
|
214
246
|
appVersion: string;
|
|
215
247
|
};
|
|
216
|
-
const modelMap: Record<string, DeviceModelId> = {
|
|
217
|
-
nanos: <DeviceModelId>"nanoS",
|
|
218
|
-
nanox: <DeviceModelId>"nanoX",
|
|
219
|
-
blue: <DeviceModelId>"blue",
|
|
220
|
-
};
|
|
221
|
-
const modelMapPriority: Record<string, number> = {
|
|
222
|
-
nanos: 3,
|
|
223
|
-
nanox: 2,
|
|
224
|
-
blue: 1,
|
|
225
|
-
};
|
|
226
|
-
const defaultFirmware: Record<string, string> = {};
|
|
227
248
|
|
|
228
249
|
function hackBadSemver(str) {
|
|
229
250
|
const split = str.split(".");
|
|
@@ -268,7 +289,6 @@ export async function listAppCandidates(cwd: string): Promise<AppCandidate[]> {
|
|
|
268
289
|
if (elf.startsWith("app_") && elf.endsWith(".elf")) {
|
|
269
290
|
const p4 = path.join(p3, elf);
|
|
270
291
|
const appVersion = elf.slice(4, elf.length - 4);
|
|
271
|
-
|
|
272
292
|
if (
|
|
273
293
|
semver.valid(appVersion) &&
|
|
274
294
|
!shouldUpgrade(model, appName, appVersion) &&
|
|
@@ -318,7 +338,8 @@ export function appCandidatesMatches(
|
|
|
318
338
|
hackBadSemver(appCandidate.firmware),
|
|
319
339
|
searchFirmware
|
|
320
340
|
))) &&
|
|
321
|
-
(
|
|
341
|
+
(appCandidate.appVersion === search.appVersion ||
|
|
342
|
+
(!search.appVersion && !appCandidate.appVersion.includes("-")) ||
|
|
322
343
|
(search.appVersion &&
|
|
323
344
|
semver.satisfies(appCandidate.appVersion, search.appVersion)))
|
|
324
345
|
);
|
package/src/manager/hooks.ts
CHANGED
|
@@ -76,18 +76,18 @@ export function useManagerBlueDot(
|
|
|
76
76
|
return display;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
export const useAvailableLanguagesForDevice = (
|
|
80
|
-
deviceInfo: DeviceInfo
|
|
81
|
-
): Language[] => {
|
|
79
|
+
export const useAvailableLanguagesForDevice = (deviceInfo?: DeviceInfo) => {
|
|
82
80
|
const [availableLanguages, setAvailableLanguages] = useState<Language[]>([]);
|
|
81
|
+
const [loaded, setLoaded] = useState(false);
|
|
83
82
|
|
|
84
83
|
useEffect(() => {
|
|
85
84
|
if (deviceInfo) {
|
|
86
85
|
manager
|
|
87
86
|
.getAvailableLanguagesDevice(deviceInfo)
|
|
88
|
-
.then(setAvailableLanguages)
|
|
87
|
+
.then(setAvailableLanguages)
|
|
88
|
+
.finally(() => setLoaded(true));
|
|
89
89
|
}
|
|
90
|
-
}, [deviceInfo
|
|
90
|
+
}, [deviceInfo]);
|
|
91
91
|
|
|
92
|
-
return availableLanguages;
|
|
92
|
+
return { availableLanguages, loaded };
|
|
93
93
|
};
|
|
@@ -3,8 +3,8 @@ import { satisfies as versionSatisfies } from "semver";
|
|
|
3
3
|
|
|
4
4
|
const deviceVersionRangesForLocalization: { [key in DeviceModelId]?: string } =
|
|
5
5
|
{
|
|
6
|
-
nanoX: ">=2.1.0 || =2.1.0-lo2 || =2.1.0-lo4 || =2.1.0-lo5",
|
|
7
|
-
nanoSP: ">=1.1.0 || =1.1.0-lo1",
|
|
6
|
+
nanoX: ">=2.1.0 || =2.1.0-lo2 || =2.1.0-lo4 || =2.1.0-lo5 || =2.1.0-rc1",
|
|
7
|
+
nanoSP: ">=1.1.0 || =1.1.0-lo1 || =1.1.0-rc1",
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export const isDeviceLocalizationSupported = (
|
package/src/mock/account.ts
CHANGED
|
@@ -183,25 +183,22 @@ const hardcodedMarketcap = [
|
|
|
183
183
|
"algorand/asa/163650",
|
|
184
184
|
];
|
|
185
185
|
// for the mock generation we need to adjust to the actual market price of things, we want to avoid having things < 0.01 EUR
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
186
|
+
const currencyIdApproxMarketPrice = {
|
|
187
|
+
bitcoin: 0.0073059,
|
|
188
|
+
ethereum: 5.7033e-14,
|
|
189
|
+
ethereum_classic: 1.4857e-15,
|
|
190
|
+
bitcoin_cash: 0.0011739,
|
|
191
|
+
bitcoin_gold: 0.00005004,
|
|
192
|
+
litecoin: 0.00011728,
|
|
193
|
+
ripple: 0.000057633,
|
|
194
|
+
dogecoin: 4.9e-9,
|
|
195
|
+
dash: 0.0003367,
|
|
196
|
+
peercoin: 0.000226,
|
|
197
|
+
zcash: 0.000205798,
|
|
198
198
|
};
|
|
199
199
|
// mock only use subset of cryptocurrencies to not affect tests when adding coins
|
|
200
200
|
const currencies = listCryptoCurrencies().filter(
|
|
201
|
-
(c) =>
|
|
202
|
-
tickerApproxMarketPrice[c.ticker] &&
|
|
203
|
-
// take only "official" currencies, otherwise you might end up with ticker collisions
|
|
204
|
-
c.name === c.managerAppName
|
|
201
|
+
(c) => currencyIdApproxMarketPrice[c.id]
|
|
205
202
|
);
|
|
206
203
|
// TODO fix the mock to never generate negative balance...
|
|
207
204
|
|
|
@@ -225,11 +222,12 @@ export function genOperation(
|
|
|
225
222
|
);
|
|
226
223
|
const address = genAddress(superAccount.currency, rng);
|
|
227
224
|
const type = rng.next() < 0.3 ? "OUT" : "IN";
|
|
225
|
+
const divider =
|
|
226
|
+
(account.type === "Account" &&
|
|
227
|
+
currencyIdApproxMarketPrice[account.currency.id]) ||
|
|
228
|
+
currencyIdApproxMarketPrice.bitcoin;
|
|
228
229
|
const value = new BigNumber(
|
|
229
|
-
Math.floor(
|
|
230
|
-
rng.nextInt(0, 100000 * rng.next() * rng.next()) /
|
|
231
|
-
(tickerApproxMarketPrice[ticker] || tickerApproxMarketPrice.BTC)
|
|
232
|
-
)
|
|
230
|
+
Math.floor(rng.nextInt(0, 100000 * rng.next() * rng.next()) / divider)
|
|
233
231
|
);
|
|
234
232
|
|
|
235
233
|
if (Number.isNaN(value)) {
|
|
@@ -47,7 +47,14 @@ export function filterServiceStatusIncidents(
|
|
|
47
47
|
incidents: Incident[],
|
|
48
48
|
tickers: string[] = []
|
|
49
49
|
): Incident[] {
|
|
50
|
-
if (
|
|
50
|
+
if (
|
|
51
|
+
!tickers ||
|
|
52
|
+
tickers.length === 0 ||
|
|
53
|
+
!incidents ||
|
|
54
|
+
incidents.length === 0
|
|
55
|
+
) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
51
58
|
|
|
52
59
|
const tickersRegex = new RegExp(escapeRegExp(tickers.join("|")), "i");
|
|
53
60
|
return incidents.filter(
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React, { PropsWithChildren } from "react";
|
|
2
|
+
import { DeviceModelId } from "@ledgerhq/types-devices";
|
|
3
|
+
import {
|
|
4
|
+
PostOnboardingAction,
|
|
5
|
+
PostOnboardingActionId,
|
|
6
|
+
} from "@ledgerhq/types-live";
|
|
7
|
+
|
|
8
|
+
export type PostOnboardingDependencies = {
|
|
9
|
+
/** function to navigate to the post onboarding hub */
|
|
10
|
+
navigateToPostOnboardingHub: () => void;
|
|
11
|
+
/**
|
|
12
|
+
* function that returns a `PostOnboardingAction` for the given
|
|
13
|
+
* `PostOnboardingActionId` parameter.
|
|
14
|
+
* */
|
|
15
|
+
getPostOnboardingAction?: (
|
|
16
|
+
id: PostOnboardingActionId
|
|
17
|
+
) => PostOnboardingAction;
|
|
18
|
+
/**
|
|
19
|
+
* function that returns an array of `PostOnboardingAction` for the given
|
|
20
|
+
* `DeviceModelId` parameter.
|
|
21
|
+
*/
|
|
22
|
+
getPostOnboardingActionsForDevice: (
|
|
23
|
+
id: DeviceModelId,
|
|
24
|
+
mock?: boolean
|
|
25
|
+
) => PostOnboardingAction[];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const defaultValue: PostOnboardingDependencies = {
|
|
29
|
+
navigateToPostOnboardingHub: () => {},
|
|
30
|
+
getPostOnboardingAction: undefined,
|
|
31
|
+
getPostOnboardingActionsForDevice: () => [],
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const PostOnboardingContext = React.createContext(defaultValue);
|
|
35
|
+
|
|
36
|
+
export const PostOnboardingProvider: React.FC<
|
|
37
|
+
PropsWithChildren<PostOnboardingDependencies>
|
|
38
|
+
> = ({ children, ...props }) => {
|
|
39
|
+
if (!props.getPostOnboardingAction) {
|
|
40
|
+
console.warn(
|
|
41
|
+
"`getPostOnboardingAction` prop is undefined in the current PostOnboardingProvider. Without this, the post onboarding is not able to function normally."
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return (
|
|
45
|
+
<PostOnboardingContext.Provider value={props}>
|
|
46
|
+
{children}
|
|
47
|
+
</PostOnboardingContext.Provider>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DeviceModelId } from "@ledgerhq/types-devices";
|
|
2
|
+
import {
|
|
3
|
+
PostOnboardingActionId,
|
|
4
|
+
PostOnboardingState,
|
|
5
|
+
} from "@ledgerhq/types-live";
|
|
6
|
+
|
|
7
|
+
type ActionCreatorPlain = () => { type: string };
|
|
8
|
+
type ActionCreator<T> = (arg0: T) => ReturnType<ActionCreatorPlain> & T;
|
|
9
|
+
|
|
10
|
+
export const importPostOnboardingState: ActionCreator<{
|
|
11
|
+
newState: PostOnboardingState;
|
|
12
|
+
}> = ({ newState }) => ({
|
|
13
|
+
type: "POST_ONBOARDING_IMPORT_STATE",
|
|
14
|
+
newState,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const initPostOnboarding: ActionCreator<{
|
|
18
|
+
deviceModelId: DeviceModelId;
|
|
19
|
+
actionsIds: PostOnboardingActionId[];
|
|
20
|
+
}> = ({ deviceModelId, actionsIds }) => ({
|
|
21
|
+
type: "POST_ONBOARDING_INIT",
|
|
22
|
+
deviceModelId,
|
|
23
|
+
actionsIds,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export const setPostOnboardingActionCompleted: ActionCreator<{
|
|
27
|
+
actionId: PostOnboardingActionId;
|
|
28
|
+
}> = ({ actionId }) => ({
|
|
29
|
+
type: "POST_ONBOARDING_SET_ACTION_COMPLETED",
|
|
30
|
+
actionId,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export const clearPostOnboardingLastActionCompleted: ActionCreatorPlain =
|
|
34
|
+
() => ({
|
|
35
|
+
type: "POST_ONBOARDING_CLEAR_LAST_ACTION_COMPLETED",
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const hidePostOnboardingWalletEntryPoint: ActionCreatorPlain = () => ({
|
|
39
|
+
type: "POST_ONBOARDING_HIDE_WALLET_ENTRY_POINT",
|
|
40
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { PostOnboardingHubState } from "@ledgerhq/types-live";
|
|
2
|
+
import { renderHook } from "@testing-library/react-hooks";
|
|
3
|
+
import { useAllPostOnboardingActionsCompleted } from "./useAllPostOnboardingActionsCompleted";
|
|
4
|
+
import {
|
|
5
|
+
claimTestMock,
|
|
6
|
+
personalizeTestMock,
|
|
7
|
+
migrateAssetsTestMock,
|
|
8
|
+
} from "../mock";
|
|
9
|
+
|
|
10
|
+
import { usePostOnboardingHubState } from "./usePostOnboardingHubState";
|
|
11
|
+
jest.mock("./usePostOnboardingHubState");
|
|
12
|
+
jest.mock("react-redux", () => ({}));
|
|
13
|
+
|
|
14
|
+
const mockedUsePostOnboardingHubState = jest.mocked(usePostOnboardingHubState);
|
|
15
|
+
|
|
16
|
+
const mockedStateNoActions: PostOnboardingHubState = {
|
|
17
|
+
deviceModelId: null,
|
|
18
|
+
lastActionCompleted: null,
|
|
19
|
+
actionsState: [],
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const mockedStateAllActionsCompleted: PostOnboardingHubState = {
|
|
23
|
+
deviceModelId: null,
|
|
24
|
+
lastActionCompleted: null,
|
|
25
|
+
actionsState: [
|
|
26
|
+
{ ...claimTestMock, completed: true },
|
|
27
|
+
{ ...personalizeTestMock, completed: true },
|
|
28
|
+
{ ...migrateAssetsTestMock, completed: true },
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const mockedStateNoActionsCompleted: PostOnboardingHubState = {
|
|
33
|
+
deviceModelId: null,
|
|
34
|
+
lastActionCompleted: null,
|
|
35
|
+
actionsState: [
|
|
36
|
+
{ ...claimTestMock, completed: false },
|
|
37
|
+
{ ...personalizeTestMock, completed: false },
|
|
38
|
+
{ ...migrateAssetsTestMock, completed: false },
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const mockedStateSomeActionsCompleted: PostOnboardingHubState = {
|
|
43
|
+
deviceModelId: null,
|
|
44
|
+
lastActionCompleted: null,
|
|
45
|
+
actionsState: [
|
|
46
|
+
{ ...claimTestMock, completed: false },
|
|
47
|
+
{ ...personalizeTestMock, completed: true },
|
|
48
|
+
{ ...migrateAssetsTestMock, completed: false },
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
describe("useAllPostOnboardingActionsCompleted", () => {
|
|
53
|
+
it("should return true if no actions are present", () => {
|
|
54
|
+
mockedUsePostOnboardingHubState.mockReturnValue(mockedStateNoActions);
|
|
55
|
+
const { result } = renderHook(() => useAllPostOnboardingActionsCompleted());
|
|
56
|
+
expect(result.current).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("should return true if all actions are completed", () => {
|
|
60
|
+
mockedUsePostOnboardingHubState.mockReturnValue(
|
|
61
|
+
mockedStateAllActionsCompleted
|
|
62
|
+
);
|
|
63
|
+
const { result } = renderHook(() => useAllPostOnboardingActionsCompleted());
|
|
64
|
+
expect(result.current).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("should return false if some actions are completed", () => {
|
|
68
|
+
mockedUsePostOnboardingHubState.mockReturnValue(
|
|
69
|
+
mockedStateSomeActionsCompleted
|
|
70
|
+
);
|
|
71
|
+
const { result } = renderHook(() => useAllPostOnboardingActionsCompleted());
|
|
72
|
+
expect(result.current).toBe(false);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("should return false if no actions are completed", () => {
|
|
76
|
+
mockedUsePostOnboardingHubState.mockReturnValue(
|
|
77
|
+
mockedStateNoActionsCompleted
|
|
78
|
+
);
|
|
79
|
+
const { result } = renderHook(() => useAllPostOnboardingActionsCompleted());
|
|
80
|
+
expect(result.current).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { usePostOnboardingHubState } from "./usePostOnboardingHubState";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @returns a boolean representing whether all the post onboarding actions have
|
|
6
|
+
* been completed.
|
|
7
|
+
* TODO: unit test this
|
|
8
|
+
*/
|
|
9
|
+
export function useAllPostOnboardingActionsCompleted(): boolean {
|
|
10
|
+
const { actionsState } = usePostOnboardingHubState();
|
|
11
|
+
return actionsState.every((action) => action.completed);
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import {
|
|
3
|
+
PostOnboardingContext,
|
|
4
|
+
PostOnboardingDependencies,
|
|
5
|
+
} from "../PostOnboardingProvider";
|
|
6
|
+
|
|
7
|
+
export function usePostOnboardingContext(): PostOnboardingDependencies {
|
|
8
|
+
return useContext(PostOnboardingContext);
|
|
9
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { renderHook } from "@testing-library/react-hooks";
|
|
2
|
+
import {
|
|
3
|
+
postOnboardingDeviceModelIdSelector,
|
|
4
|
+
walletPostOnboardingEntryPointDismissedSelector,
|
|
5
|
+
} from "../reducer";
|
|
6
|
+
import { useAllPostOnboardingActionsCompleted } from "./useAllPostOnboardingActionsCompleted";
|
|
7
|
+
import { usePostOnboardingEntryPointVisibleOnWallet } from "./usePostOnboardingEntryPointVisibleOnWallet";
|
|
8
|
+
import { DeviceModelId } from "@ledgerhq/types-devices";
|
|
9
|
+
|
|
10
|
+
jest.mock("react-redux", () => ({
|
|
11
|
+
useSelector: (fun) => fun(),
|
|
12
|
+
}));
|
|
13
|
+
jest.mock("../reducer");
|
|
14
|
+
jest.mock("./useAllPostOnboardingActionsCompleted");
|
|
15
|
+
|
|
16
|
+
const mockedUseAllCompleted = jest.mocked(useAllPostOnboardingActionsCompleted);
|
|
17
|
+
const mockedDismissedSelector = jest.mocked(
|
|
18
|
+
walletPostOnboardingEntryPointDismissedSelector
|
|
19
|
+
);
|
|
20
|
+
const mockedDeviceModelIdSelector = jest.mocked(
|
|
21
|
+
postOnboardingDeviceModelIdSelector
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
describe("usePostOnboardingEntryPointVisibleOnWallet", () => {
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
mockedUseAllCompleted.mockClear();
|
|
27
|
+
mockedDismissedSelector.mockClear();
|
|
28
|
+
mockedDeviceModelIdSelector.mockClear();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("should be false if deviceModelId is null", () => {
|
|
32
|
+
mockedUseAllCompleted.mockReturnValue(false);
|
|
33
|
+
mockedDismissedSelector.mockReturnValue(false);
|
|
34
|
+
mockedDeviceModelIdSelector.mockReturnValue(null);
|
|
35
|
+
|
|
36
|
+
const { result } = renderHook(() =>
|
|
37
|
+
usePostOnboardingEntryPointVisibleOnWallet()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
expect(result.current).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("should be false if the the entry point HAS been dismissed", () => {
|
|
44
|
+
mockedDismissedSelector.mockReturnValue(true);
|
|
45
|
+
mockedDeviceModelIdSelector.mockReturnValue(DeviceModelId.nanoX);
|
|
46
|
+
|
|
47
|
+
mockedUseAllCompleted.mockReturnValue(false);
|
|
48
|
+
const { result: res1 } = renderHook(() =>
|
|
49
|
+
usePostOnboardingEntryPointVisibleOnWallet()
|
|
50
|
+
);
|
|
51
|
+
expect(res1.current).toBe(false);
|
|
52
|
+
|
|
53
|
+
mockedUseAllCompleted.mockReturnValue(true);
|
|
54
|
+
const { result: res2 } = renderHook(() =>
|
|
55
|
+
usePostOnboardingEntryPointVisibleOnWallet()
|
|
56
|
+
);
|
|
57
|
+
expect(res2.current).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("should be false if all actions are completed", () => {
|
|
61
|
+
mockedDismissedSelector.mockReturnValue(false);
|
|
62
|
+
mockedUseAllCompleted.mockReturnValue(true);
|
|
63
|
+
|
|
64
|
+
mockedDeviceModelIdSelector.mockReturnValue(DeviceModelId.nanoX);
|
|
65
|
+
const { result } = renderHook(() =>
|
|
66
|
+
usePostOnboardingEntryPointVisibleOnWallet()
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
expect(result.current).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("should be true if the entry point HAS NOT been dismissed and all actions are NOT completed", () => {
|
|
73
|
+
mockedDismissedSelector.mockReturnValue(false);
|
|
74
|
+
mockedUseAllCompleted.mockReturnValue(false);
|
|
75
|
+
mockedDeviceModelIdSelector.mockReturnValue(DeviceModelId.nanoX);
|
|
76
|
+
|
|
77
|
+
const { result } = renderHook(() =>
|
|
78
|
+
usePostOnboardingEntryPointVisibleOnWallet()
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
expect(result.current).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useSelector } from "react-redux";
|
|
2
|
+
import {
|
|
3
|
+
postOnboardingDeviceModelIdSelector,
|
|
4
|
+
walletPostOnboardingEntryPointDismissedSelector,
|
|
5
|
+
} from "../reducer";
|
|
6
|
+
import { useAllPostOnboardingActionsCompleted } from "./useAllPostOnboardingActionsCompleted";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @returns a boolean representing whether the post onboarding entry point
|
|
11
|
+
* should be visible on the wallet page.
|
|
12
|
+
* TODO: unit test this
|
|
13
|
+
*/
|
|
14
|
+
export function usePostOnboardingEntryPointVisibleOnWallet(): boolean {
|
|
15
|
+
const deviceModelId = useSelector(postOnboardingDeviceModelIdSelector);
|
|
16
|
+
const dismissed = useSelector(
|
|
17
|
+
walletPostOnboardingEntryPointDismissedSelector
|
|
18
|
+
);
|
|
19
|
+
const allCompleted = useAllPostOnboardingActionsCompleted();
|
|
20
|
+
|
|
21
|
+
return !!deviceModelId && !(dismissed || allCompleted);
|
|
22
|
+
}
|