+
{
{!isDisabled && }
{
}
}
-export const NewPasswordField = withI18n()(NewPasswordFieldComponent)
+export function NewPasswordField(props: Props) {
+ const i18n: I18n = useI18n()
+
+ return (
+
+ )
+}
diff --git a/src/components/NewPasswordField/statusMessageMap.js b/src/components/NewPasswordField/statusMessageMap.js
new file mode 100644
index 000000000..df760b536
--- /dev/null
+++ b/src/components/NewPasswordField/statusMessageMap.js
@@ -0,0 +1,28 @@
+// @flow strict
+
+import { i18n } from 'i18n/lingui'
+
+import { type IndicatorStatus } from './components/Indicator'
+
+export const STATUS_MESSAGE_MAP: { [IndicatorStatus]: ?string } = {
+ red: i18n._(
+ 'common.NewPasswordField.strength.red',
+ null,
+ { defaults: 'Too weak' },
+ ),
+ green: i18n._(
+ 'common.NewPasswordField.strength.green',
+ null,
+ { defaults: 'Not bad' },
+ ),
+ yellow: i18n._(
+ 'common.NewPasswordField.strength.yellow',
+ null,
+ { defaults: 'Bit weak' },
+ ),
+ orange: i18n._(
+ 'common.NewPasswordField.strength.orange',
+ null,
+ { defaults: 'Easily cracked' },
+ ),
+}
diff --git a/src/components/NewPasswordField/tests/NewPasswordField.test.js b/src/components/NewPasswordField/tests/NewPasswordField.test.js
index fd4f8d2d7..016ddc8f8 100644
--- a/src/components/NewPasswordField/tests/NewPasswordField.test.js
+++ b/src/components/NewPasswordField/tests/NewPasswordField.test.js
@@ -56,7 +56,7 @@ jest.mock('../../../workers/scrypt/worker', () => class MOCK_WORKER {
})
// eslint-disable-next-line import/first
-import { NewPasswordField } from '../NewPasswordField'
+import { NewPasswordFieldView as NewPasswordField } from '../NewPasswordField'
describe('NewPasswordField', () => {
test('is available', () => {
@@ -79,6 +79,7 @@ describe('NewPasswordField', () => {
onScoreChange={handleScoreChange}
values={values}
label='Label'
+ labelConfirm='Label Confirm'
/>,
)
@@ -88,6 +89,7 @@ describe('NewPasswordField', () => {
expect(componentInstance.props.onScoreChange).toBe(handleScoreChange)
expect(componentInstance.props.values).toBe(values)
expect(componentInstance.props.label).toBe('Label')
+ expect(componentInstance.props.labelConfirm).toBe('Label Confirm')
expect(componentInstance.props.isDisabled).toBe(false)
expect(componentInstance.props.isAutoFocus).toBe(false)
@@ -104,7 +106,7 @@ describe('NewPasswordField', () => {
expect(passwordInput.prop('name')).toBe('password')
expect(passwordInput.prop('infoMessage')).toBe(null)
expect(passwordInput.prop('errorMessage')).toBe(null)
- expect(passwordInput.prop('label')).toBe('Label')
+ expect(passwordInput.prop('labelConfirm')).toBe()
expect(passwordInput.prop('theme')).toBe('white-indicator')
expect(passwordInput.prop('isDisabled')).toBe(false)
expect(passwordInput.prop('isAutoFocus')).toBe(false)
@@ -118,7 +120,7 @@ describe('NewPasswordField', () => {
expect(passwordConfirmInput.prop('value')).toBe('')
expect(passwordConfirmInput.prop('theme')).toBe('white-icon')
expect(passwordConfirmInput.prop('name')).toBe('passwordConfirm')
- expect(passwordConfirmInput.prop('label')).toBe('Repeat Security Password')
+ expect(passwordConfirmInput.prop('label')).toBe('Label Confirm')
expect(passwordConfirmInput.prop('isDisabled')).toBe(false)
// $FlowFixMe
diff --git a/src/components/SearchInput/tests/SearchFilter.test.js b/src/components/SearchInput/tests/SearchFilter.test.js
index 6b8afcff7..89a6de462 100644
--- a/src/components/SearchInput/tests/SearchFilter.test.js
+++ b/src/components/SearchInput/tests/SearchFilter.test.js
@@ -1,7 +1,7 @@
import React from 'react'
import { shallow } from 'enzyme'
-import { SearchFilter } from '../SearchFilter/SearchFilter.js'
+import { SearchFilter } from '../../SearchFilter/SearchFilter.js'
describe('SearchFilter', () => {
it('is available', () => {
@@ -14,18 +14,10 @@ describe('SearchFilter', () => {
expect(wrapper.exists('em')).toBe(false)
})
- it('does not display count if it is 0 or less than 0', () => {
+ it('does not display count if it is 0', () => {
expect(
shallow(test).exists('em'),
).toBe(false)
-
- expect(
- shallow(test).exists('em'),
- ).toBe(false)
-
- expect(
- shallow(test).exists('em'),
- ).toBe(false)
})
it('displays count if it is more than 0', () => {
diff --git a/src/components/base/JAssetSymbol/JAssetSymbol.js b/src/components/base/JAssetSymbol/JAssetSymbol.js
index 6b13d2c72..8779faa7b 100644
--- a/src/components/base/JAssetSymbol/JAssetSymbol.js
+++ b/src/components/base/JAssetSymbol/JAssetSymbol.js
@@ -13,12 +13,12 @@ type JAssetSymbolSize = 24 | 32
type Props = {|
+symbol: string,
- +address?: ?string,
- +className?: ?string,
+ +address: ?string,
+ +className: ?string,
+size: JAssetSymbolSize,
|}
-export function JAssetSymbol({
+export default function JAssetSymbol({
size,
symbol,
address,
diff --git a/src/components/base/JAssetSymbol/JAssetSymbol.stories.js b/src/components/base/JAssetSymbol/JAssetSymbol.stories.js
index 2ef21fcea..1c9802cee 100644
--- a/src/components/base/JAssetSymbol/JAssetSymbol.stories.js
+++ b/src/components/base/JAssetSymbol/JAssetSymbol.stories.js
@@ -9,8 +9,8 @@ import {
withKnobs,
} from '@storybook/addon-knobs'
+import JAssetSymbol from './JAssetSymbol'
import { ADDRESSES_AVAILABLE } from './symbolsAvailable'
-import { JAssetSymbol } from './JAssetSymbol'
const ADDRESSES_LIST = Object.keys(ADDRESSES_AVAILABLE)
diff --git a/src/components/base/JAssetSymbol/index.js b/src/components/base/JAssetSymbol/index.js
new file mode 100644
index 000000000..86aa387df
--- /dev/null
+++ b/src/components/base/JAssetSymbol/index.js
@@ -0,0 +1,5 @@
+// @flow strict
+
+import { JAssetSymbolEnhanced } from './JAssetSymbol'
+
+export default JAssetSymbolEnhanced
diff --git a/src/components/base/JAssetSymbol/tests/JAssetSymbol.test.js b/src/components/base/JAssetSymbol/tests/JAssetSymbol.test.js
index b3e2dcd78..4bb830961 100644
--- a/src/components/base/JAssetSymbol/tests/JAssetSymbol.test.js
+++ b/src/components/base/JAssetSymbol/tests/JAssetSymbol.test.js
@@ -1,12 +1,12 @@
+// @flow strict
+
import React from 'react'
-import {
- shallow,
-} from 'enzyme'
+import { shallow } from 'enzyme'
-import { JAssetSymbol } from '../JAssetSymbol'
+import JAssetSymbol from '../JAssetSymbol'
jest.mock('../../../../utils/sprite/iconsAsset', () => ({
- 'eth-usage': {
+ 'ETH-usage': {
url: '#eth',
viewBox: '0 0 24 24',
},
@@ -18,14 +18,26 @@ describe('JAssetSymbol', () => {
})
it('renders icon if valid address is specified', () => {
- const wrapper = shallow()
+ const wrapper = shallow(
+ ,
+ )
expect(wrapper.exists('use')).toBe(true)
expect(wrapper.exists('text')).toBe(false)
})
it('renders symbol icon if no icon is available for address', () => {
- const wrapper = shallow()
+ const wrapper = shallow(
+ ,
+ )
expect(wrapper.exists('use')).toBe(false)
expect(wrapper.exists('text')).toBe(true)
@@ -34,43 +46,67 @@ describe('JAssetSymbol', () => {
it('crops long symbols', () => {
expect(
shallow(
- ,
+ ,
).find('text').text(),
).toBe('1')
expect(
shallow(
- ,
+ ,
).find('text').text(),
).toBe('12')
expect(
shallow(
- ,
+ ,
).find('text').text(),
).toBe('123')
expect(
shallow(
- ,
+ ,
).find('text').text(),
).toBe('1234')
expect(
shallow(
- ,
+ ,
).find('text').text(),
).toBe('123')
expect(
shallow(
- ,
+ ,
).find('text').text(),
).toBe('123')
})
it('adds specified class name', () => {
- const wrapper = shallow()
+ const wrapper = shallow(
+ ,
+ )
expect(wrapper.hasClass('foo')).toBe(true)
})
diff --git a/src/components/base/JInputField/tests/JInputField.test.js b/src/components/base/JInputField/tests/JInputField.test.js
index c2b1ff4f6..efaeb7334 100644
--- a/src/components/base/JInputField/tests/JInputField.test.js
+++ b/src/components/base/JInputField/tests/JInputField.test.js
@@ -28,7 +28,7 @@ describe('JInputField', () => {
expect(wrapper.prop('theme')).toBe('white')
expect(wrapper.prop('type')).toBe('text')
expect(wrapper.prop('isDisabled')).toBe(false)
- expect(wrapper.prop('validateType')).toBe('touched')
+ expect(wrapper.prop('validateType')).toBe('dirtySinceLastSubmit')
expect(wrapper.prop('infoMessage')).toBe(null)
expect(wrapper.prop('label')).toBe('')
expect(wrapper.prop('placeholder')).toBe('')
diff --git a/src/components/base/index.js b/src/components/base/index.js
index ca1333168..471cafc53 100644
--- a/src/components/base/index.js
+++ b/src/components/base/index.js
@@ -12,7 +12,6 @@ import JSwitch from './JSwitch'
export { Button } from './Button/Button'
export { AppLogo } from './AppLogo/AppLogo'
-export { JAssetSymbol } from './JAssetSymbol/JAssetSymbol'
export { JIcon } from './JIcon/JIcon'
export { Header } from './Header/Header'
export { JLink } from './JLink/JLink'
@@ -25,6 +24,8 @@ export { JFieldMessage } from './JFieldMessage/JFieldMessage'
export { JShimmer } from './JShimmer/JShimmer'
export { ItemCard } from './ItemCard/ItemCard'
+export { default as JAssetSymbol } from './JAssetSymbol'
+
export {
JFlatButton,
JInput,
diff --git a/src/components/index.js b/src/components/index.js
index 6f8fc7c53..7e454c68d 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -16,7 +16,6 @@ export { CopyableField } from './CopyableField/CopyableField'
export { EditableField } from './EditableField/EditableField'
export { PasswordInput } from './PasswordInput/PasswordInput'
export { WalletActions } from './WalletActions/WalletActions'
-export { CopyIconButton } from './CopyIconButton/CopyIconButton'
export { UserActionInfo } from './UserActionInfo/UserActionInfo'
export { CloseableScreen } from './CloseableScreen/CloseableScreen'
export { GlobalFormError } from './GlobalFormError/GlobalFormError'
@@ -30,12 +29,13 @@ export { TransactionsFilter } from './TransactionsFilter/TransactionsFilter'
export { ContactsItemDetails } from './ContactsItemDetails/ContactsItemDetails'
export { DigitalAssetAddForm } from './DigitalAssetAddForm/DigitalAssetAddForm'
export { DigitalAssetEditForm } from './DigitalAssetEditForm/DigitalAssetEditForm'
-export { FieldPreview } from './FieldPreview/FieldPreview'
export { WalletAddressItem } from './WalletAddressItem/WalletAddressItem'
export { AddressPicker } from './AddressPicker/AddressPicker'
export { ConfirmationBody } from './ConfirmationBody/ConfirmationBody'
export { default as PopupButton } from './PopupButton'
+export { default as FieldPreview } from './FieldPreview'
+export { default as CopyIconButton } from './CopyIconButton'
export {
QRCode,
diff --git a/src/pages/Send/PasswordStepForm.js b/src/pages/Send/PasswordStepForm.js
index e857de48b..1d6217c9e 100644
--- a/src/pages/Send/PasswordStepForm.js
+++ b/src/pages/Send/PasswordStepForm.js
@@ -11,8 +11,8 @@ import {
type FormRenderProps,
} from 'react-final-form'
+import walletsPlugin from 'store/plugins/walletsPlugin'
import { PasswordForm } from 'components'
-import { walletsPlugin } from 'store/plugins/walletsPlugin'
import { selectPasswordHint } from 'store/selectors/password'
import { selectActiveWalletId } from 'store/selectors/wallets'
diff --git a/src/pages/Send/components/SendAmountField/tests/SendAmountField.test.js b/src/pages/Send/components/SendAmountField/tests/SendAmountField.test.js
index 0feae8779..c34eb6270 100644
--- a/src/pages/Send/components/SendAmountField/tests/SendAmountField.test.js
+++ b/src/pages/Send/components/SendAmountField/tests/SendAmountField.test.js
@@ -31,7 +31,7 @@ describe('SendAmountField', () => {
expect(wrapper.prop('fiatCurrency')).toBe('USD')
expect(wrapper.prop('infoMessage')).toBe('')
expect(wrapper.prop('className')).toBe('')
- expect(wrapper.prop('label')).toBe('Amount')
+ expect(wrapper.prop('label')).toBeUndefined()
expect(wrapper.prop('meta')).toBeDefined()
expect(wrapper.prop('input')).toBeDefined()
})
diff --git a/src/pages/WalletsCreate/WalletsCreateView.js b/src/pages/WalletsCreate/WalletsCreateView.js
index ca3320b59..525ab36bb 100644
--- a/src/pages/WalletsCreate/WalletsCreateView.js
+++ b/src/pages/WalletsCreate/WalletsCreateView.js
@@ -5,11 +5,11 @@ import { withI18n } from '@lingui/react'
import { type I18n } from '@lingui/core'
import ofssetsStyle from 'styles/offsets.m.scss'
+import walletsPlugin from 'store/plugins/walletsPlugin'
import { type FormApi } from 'final-form'
import { gaSendEvent } from 'utils/analytics'
import { checkNameExists } from 'utils/wallets'
import { generateMnemonic } from 'utils/mnemonic'
-import { walletsPlugin } from 'store/plugins/walletsPlugin'
import {
Form,
diff --git a/src/pages/WalletsImport/WalletsImportView.js b/src/pages/WalletsImport/WalletsImportView.js
index 90931b8fc..8eaf0d259 100644
--- a/src/pages/WalletsImport/WalletsImportView.js
+++ b/src/pages/WalletsImport/WalletsImportView.js
@@ -11,8 +11,8 @@ import {
} from 'react-final-form'
import ofssetsStyle from 'styles/offsets.m.scss'
+import walletsPlugin from 'store/plugins/walletsPlugin'
import { gaSendEvent } from 'utils/analytics'
-import { walletsPlugin } from 'store/plugins/walletsPlugin'
import {
getTypeByInput,
diff --git a/src/pages/WalletsStart/components/NewWalletButtons/tests/NewWalletButtons.test.js b/src/pages/WalletsStart/components/NewWalletButtons/tests/NewWalletButtons.test.js
index 026abc46d..11fe6edfe 100644
--- a/src/pages/WalletsStart/components/NewWalletButtons/tests/NewWalletButtons.test.js
+++ b/src/pages/WalletsStart/components/NewWalletButtons/tests/NewWalletButtons.test.js
@@ -2,12 +2,11 @@
import React from 'react'
import sinon from 'sinon'
-import { shallow } from 'enzyme'
+import { mountWithIntl } from '.enzyme/lingui-helper.js'
import { ACTIONS } from 'pages/WalletsStart/constants'
import { NewWalletButtons } from '../NewWalletButtons'
-import newWalletButtonsStyle from '../newWalletButtons.m.scss'
const MOCK_EVENT = { preventDefault: () => {} }
@@ -19,14 +18,16 @@ describe('NewWalletButtons', () => {
test('sends valid action through onClick property', () => {
const handleClick = sinon.spy()
- const wrapper = shallow()
+ const wrapper = mountWithIntl()
- wrapper.find(`.${newWalletButtonsStyle.create}`).simulate('click', MOCK_EVENT)
+ expect(wrapper.find('a.__create-button')).toHaveLength(1)
+ wrapper.find('a.__create-button').simulate('click', MOCK_EVENT)
expect(handleClick).toHaveProperty('callCount', 1)
expect(handleClick.calledWith(ACTIONS.CREATE)).toBe(true)
- wrapper.find(`.${newWalletButtonsStyle.import}`).simulate('click', MOCK_EVENT)
+ expect(wrapper.find('a.__import-button')).toHaveLength(1)
+ wrapper.find('a.__import-button').simulate('click', MOCK_EVENT)
expect(handleClick).toHaveProperty('callCount', 2)
expect(handleClick.calledWith(ACTIONS.IMPORT)).toBe(true)
diff --git a/src/store/plugins/index.js b/src/store/plugins/index.js
index d2475c7ff..3e84a7747 100644
--- a/src/store/plugins/index.js
+++ b/src/store/plugins/index.js
@@ -1,4 +1,4 @@
// @flow strict
-export { toastsPlugin } from './toastsPlugin'
-export { walletsPlugin } from './walletsPlugin'
+export { default as toastsPlugin } from './toastsPlugin'
+export { default as walletsPlugin } from './walletsPlugin'
diff --git a/src/store/plugins/toastsPlugin.js b/src/store/plugins/toastsPlugin.js
index efd74b721..31873e2c0 100644
--- a/src/store/plugins/toastsPlugin.js
+++ b/src/store/plugins/toastsPlugin.js
@@ -95,4 +95,5 @@ class ToastsPlugin {
}
}
-export const toastsPlugin = new ToastsPlugin()
+const toastsPlugin = new ToastsPlugin()
+export default toastsPlugin
diff --git a/src/store/plugins/walletsPlugin.js b/src/store/plugins/walletsPlugin.js
index 754a96fd6..e80f93fdf 100644
--- a/src/store/plugins/walletsPlugin.js
+++ b/src/store/plugins/walletsPlugin.js
@@ -613,4 +613,5 @@ class WalletsPlugin {
}
}
-export const walletsPlugin = new WalletsPlugin()
+const walletsPlugin = new WalletsPlugin()
+export default walletsPlugin
diff --git a/src/utils/address/tests/getAddressName.test.js b/src/utils/address/tests/getAddressName.test.js
index 18ed041f2..dc35ef0e9 100644
--- a/src/utils/address/tests/getAddressName.test.js
+++ b/src/utils/address/tests/getAddressName.test.js
@@ -1,4 +1,4 @@
-// @flow
+// @flow strict
import { getAddressName } from '..'
@@ -8,12 +8,30 @@ describe('address getAddressName', () => {
})
it('it works with name and index', () => {
- const withName = getAddressName('My Address', 1)
- expect(withName).toBe('My Address')
+ const result: string = getAddressName(
+ 'My Address',
+ 1,
+ )
+
+ expect(result).toBe('My Address')
})
- it('it works without name and index', () => {
- const withName = getAddressName(null, 1)
- expect(withName).toBe('Address 2')
+ it('it works without name', () => {
+ const result: string = getAddressName(
+ null,
+ 1,
+ )
+
+ expect(result).toBe('Address 2')
+ })
+
+ it('it works with wallet name', () => {
+ const result: string = getAddressName(
+ 'My Address',
+ 99,
+ 'My Wallet',
+ )
+
+ expect(result).toBe('My Wallet / My Address')
})
})