From cc217c7aa1fa8264d17008a4f1f17c02f48fa83d Mon Sep 17 00:00:00 2001 From: Vladimir Volek Date: Tue, 16 Apr 2019 18:40:00 +0200 Subject: [PATCH] add logic for hiding coins --- src/actions/LocalStorageActions.js | 26 ++++++++ .../Wallet/views/WalletSettings/Container.js | 3 + .../WalletSettings/components/Coins/index.js | 64 +++++++++++-------- .../Wallet/views/WalletSettings/index.js | 6 +- 4 files changed, 71 insertions(+), 28 deletions(-) diff --git a/src/actions/LocalStorageActions.js b/src/actions/LocalStorageActions.js index 84fb9710..475557fb 100644 --- a/src/actions/LocalStorageActions.js +++ b/src/actions/LocalStorageActions.js @@ -60,6 +60,7 @@ const KEY_BETA_MODAL: string = '/betaModalPrivacy'; // this key needs to be comp const KEY_LANGUAGE: string = `${STORAGE_PATH}language`; const KEY_LOCAL_CURRENCY: string = `${STORAGE_PATH}localCurrency`; const KEY_HIDE_BALANCE: string = `${STORAGE_PATH}hideBalance`; +const KEY_HIDDEN_COINS: string = `${STORAGE_PATH}hiddenCoins`; // https://github.com/STRML/react-localstorage/blob/master/react-localstorage.js // or @@ -350,6 +351,31 @@ export const getImportedAccounts = (): ?Array => { return null; }; +export const handleCoinVisibility = ( + coinShortcut: String, + shouldBeVisible: boolean +): ThunkAction => (): void => { + const configuration: ?Array = getHiddenCoins(); + let newConfig = configuration; + const isAlreadyHidden = configuration.find(coin => coin === coinShortcut); + + if (isAlreadyHidden && shouldBeVisible) { + newConfig = configuration.filter(coin => coin !== coinShortcut); + } else if (!isAlreadyHidden) { + newConfig = [...configuration, coinShortcut]; + } + + storageUtils.set(TYPE, KEY_HIDDEN_COINS, JSON.stringify(newConfig)); +}; + +export const getHiddenCoins = (): ?Array => { + const coinsConfig: ?string = storageUtils.get(TYPE, KEY_HIDDEN_COINS); + if (coinsConfig) { + return JSON.parse(coinsConfig); + } + return []; +}; + export const removeImportedAccounts = (device: TrezorDevice): ThunkAction => ( dispatch: Dispatch ): void => { diff --git a/src/views/Wallet/views/WalletSettings/Container.js b/src/views/Wallet/views/WalletSettings/Container.js index 19b4390b..3d30be05 100644 --- a/src/views/Wallet/views/WalletSettings/Container.js +++ b/src/views/Wallet/views/WalletSettings/Container.js @@ -5,6 +5,7 @@ import { injectIntl } from 'react-intl'; import type { IntlShape } from 'react-intl'; import * as WalletActions from 'actions/WalletActions'; +import * as LocalStorageActions from 'actions/LocalStorageActions'; import type { State, Dispatch } from 'flowtype'; import WalletSettings from './index'; @@ -21,6 +22,7 @@ type StateProps = {| type DispatchProps = {| setLocalCurrency: typeof WalletActions.setLocalCurrency, setHideBalance: typeof WalletActions.setHideBalance, + handleCoinVisibility: typeof LocalStorageActions.handleCoinVisibility, |}; export type Props = {| ...OwnProps, ...StateProps, ...DispatchProps |}; @@ -34,6 +36,7 @@ const mapStateToProps = (state: State): StateProps => ({ const mapDispatchToProps = (dispatch: Dispatch): DispatchProps => ({ setLocalCurrency: bindActionCreators(WalletActions.setLocalCurrency, dispatch), setHideBalance: bindActionCreators(WalletActions.setHideBalance, dispatch), + handleCoinVisibility: bindActionCreators(LocalStorageActions.handleCoinVisibility, dispatch), }); export default injectIntl( diff --git a/src/views/Wallet/views/WalletSettings/components/Coins/index.js b/src/views/Wallet/views/WalletSettings/components/Coins/index.js index d6a11abc..0f00af28 100644 --- a/src/views/Wallet/views/WalletSettings/components/Coins/index.js +++ b/src/views/Wallet/views/WalletSettings/components/Coins/index.js @@ -1,6 +1,6 @@ /* @flow */ import styled from 'styled-components'; -import React from 'react'; +import React, { Component } from 'react'; import { FormattedMessage } from 'react-intl'; import { FONT_SIZE } from 'config/variables'; @@ -62,31 +62,41 @@ const LogoWrapper = styled.div` align-items: center; `; -const CoinsSettings = (props: Props) => ( - - - - - {props.networks - .filter(network => !network.isHidden) - .map(network => ( - - - - - - {network.name} - - - {}} checked /> - - - ))} - - - -); +class CoinsSettings extends Component { + render() { + const { networks, handleCoinVisibility } = this.props; + return ( + + + + + {networks + .filter(network => !network.isHidden) + .map(network => ( + + + + + + {network.name} + + + { + handleCoinVisibility(network.shortcut, !isVisible); + }} + checked + /> + + + ))} + + + + ); + } +} export default CoinsSettings; diff --git a/src/views/Wallet/views/WalletSettings/index.js b/src/views/Wallet/views/WalletSettings/index.js index 866b5a1a..405ed3d0 100644 --- a/src/views/Wallet/views/WalletSettings/index.js +++ b/src/views/Wallet/views/WalletSettings/index.js @@ -78,6 +78,7 @@ const buildCurrencyOption = currency => { const WalletSettings = (props: Props) => ( + {console.log(props.localStorage)}
@@ -111,7 +112,10 @@ const WalletSettings = (props: Props) => (
- +