Browse Source

Merge pull request #801 from gre/checkbox

pixel push add accounts
master
Gaëtan Renaudeau 7 years ago
committed by GitHub
parent
commit
0907726b26
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/components/AccountPage/EmptyStateAccount.js
  2. 4
      src/components/AdvancedOptions/BitcoinKind.js
  3. 9
      src/components/DashboardPage/EmptyState.js
  4. 2
      src/components/ExportLogsBtn.js
  5. 4
      src/components/ManagerPage/AppsList.js
  6. 4
      src/components/Onboarding/OnboardingFooter.js
  7. 6
      src/components/Onboarding/steps/Analytics.js
  8. 2
      src/components/Onboarding/steps/Finish.js
  9. 4
      src/components/Onboarding/steps/GenuineCheck/GenuineCheckErrorPage.js
  10. 5
      src/components/Onboarding/steps/GenuineCheck/GenuineCheckUnavailable.js
  11. 2
      src/components/Onboarding/steps/NoDevice.js
  12. 4
      src/components/Onboarding/steps/SetPassword.js
  13. 2
      src/components/Onboarding/steps/Start.js
  14. 6
      src/components/RenderError.js
  15. 2
      src/components/SettingsPage/CleanButton.js
  16. 4
      src/components/SettingsPage/DevModeButton.js
  17. 6
      src/components/SettingsPage/DisablePasswordButton.js
  18. 4
      src/components/SettingsPage/DisablePasswordModal.js
  19. 4
      src/components/SettingsPage/PasswordModal.js
  20. 1
      src/components/SettingsPage/ReleaseNotesButton.js
  21. 2
      src/components/SettingsPage/ResetButton.js
  22. 4
      src/components/SettingsPage/SentryLogsButton.js
  23. 4
      src/components/SettingsPage/ShareAnalyticsButton.js
  24. 2
      src/components/SettingsPage/sections/Tools.js
  25. 4
      src/components/base/AccountsList/AccountRow.js
  26. 10
      src/components/base/Button/index.js
  27. 47
      src/components/base/CheckBox/index.js
  28. 4
      src/components/base/CheckBox/stories.js
  29. 53
      src/components/base/Switch/index.js
  30. 12
      src/components/base/Switch/stories.js
  31. 4
      src/components/modals/AccountSettingRenderBody.js
  32. 4
      src/components/modals/AddAccounts/index.js
  33. 57
      src/components/modals/AddAccounts/steps/04-step-finish.js
  34. 2
      src/components/modals/OperationDetails.js
  35. 2
      src/components/modals/ReleaseNotes.js
  36. 2
      src/components/modals/UpdateFirmware/Disclaimer.js
  37. 4
      src/index.ejs
  38. 6
      static/i18n/en/app.yml

2
src/components/AccountPage/EmptyStateAccount.js

@ -50,7 +50,7 @@ class EmptyStateAccount extends PureComponent<Props, *> {
{'app is installed to receive funds.'}
</Trans>
</Description>
<Button mt={5} padded primary onClick={() => openModal(MODAL_RECEIVE, { account })}>
<Button mt={5} primary onClick={() => openModal(MODAL_RECEIVE, { account })}>
<Box horizontal flow={1} alignItems="center">
<IconReceive size={12} />
<Box>{t('app:account.emptyState.buttons.receiveFunds')}</Box>

4
src/components/AdvancedOptions/BitcoinKind.js

@ -3,7 +3,7 @@ import React from 'react'
import { translate } from 'react-i18next'
import Box from 'components/base/Box'
import CheckBox from 'components/base/CheckBox'
import Switch from 'components/base/Switch'
import Label from 'components/base/Label'
import LabelInfoTooltip from 'components/base/LabelInfoTooltip'
import Spoiler from 'components/base/Spoiler'
@ -24,7 +24,7 @@ export default translate()(({ isRBF, onChangeRBF, t }: Props) => (
</Label>
</Box>
<Box grow>
<CheckBox isChecked={isRBF} onChange={onChangeRBF} />
<Switch isChecked={isRBF} onChange={onChangeRBF} />
</Box>
</Box>

9
src/components/DashboardPage/EmptyState.js

@ -50,15 +50,10 @@ class EmptyState extends PureComponent<Props, *> {
{t('app:emptyState.dashboard.desc')}
</Description>
<Box mt={5} horizontal style={{ width: 300 }} flow={3} justify="center">
<Button padded primary style={{ minWidth: 120 }} onClick={this.handleInstallApp}>
<Button primary style={{ minWidth: 120 }} onClick={this.handleInstallApp}>
{t('app:emptyState.dashboard.buttons.installApp')}
</Button>
<Button
padded
outline
style={{ minWidth: 120 }}
onClick={() => openModal(MODAL_ADD_ACCOUNTS)}
>
<Button outline style={{ minWidth: 120 }} onClick={() => openModal(MODAL_ADD_ACCOUNTS)}>
{t('app:emptyState.dashboard.buttons.addAccount')}
</Button>
</Box>

2
src/components/ExportLogsBtn.js

@ -71,7 +71,7 @@ class ExportLogsBtn extends Component<{
return hookToShortcut ? (
<KeyHandler keyValue="e" onKeyHandle={this.onKeyHandle} />
) : (
<Button primary event="ExportLogs" onClick={this.handleExportLogs}>
<Button small primary event="ExportLogs" onClick={this.handleExportLogs}>
{t('app:settings.exportLogs.btn')}
</Button>
)

4
src/components/ManagerPage/AppsList.js

@ -226,7 +226,7 @@ class AppsList extends PureComponent<Props, State> {
</Box>
</ModalContent>
<ModalFooter horizontal justifyContent="flex-end" style={{ width: '100%' }}>
<Button primary padded onClick={this.handleCloseModal}>
<Button primary onClick={this.handleCloseModal}>
{t('app:common.close')}
</Button>
</ModalFooter>
@ -254,7 +254,7 @@ class AppsList extends PureComponent<Props, State> {
</Box>
</ModalContent>
<ModalFooter horizontal justifyContent="flex-end" style={{ width: '100%' }}>
<Button primary padded onClick={this.handleCloseModal}>
<Button primary onClick={this.handleCloseModal}>
{t('app:common.close')}
</Button>
</ModalFooter>

4
src/components/Onboarding/OnboardingFooter.js

@ -23,10 +23,10 @@ const OnboardingFooter = ({
...props
}: Props) => (
<OnboardingFooterWrapper {...props}>
<Button padded outlineGrey onClick={() => prevStep()}>
<Button outlineGrey onClick={() => prevStep()}>
{t('app:common.back')}
</Button>
<Button padded disabled={isContinueDisabled} primary onClick={() => nextStep()} ml="auto">
<Button disabled={isContinueDisabled} primary onClick={() => nextStep()} ml="auto">
{t('app:common.continue')}
</Button>
</OnboardingFooterWrapper>

6
src/components/Onboarding/steps/Analytics.js

@ -5,7 +5,7 @@ import styled from 'styled-components'
import { connect } from 'react-redux'
import { saveSettings } from 'actions/settings'
import Box from 'components/base/Box'
import CheckBox from 'components/base/CheckBox'
import Switch from 'components/base/Switch'
import TrackPage from 'analytics/TrackPage'
import Track from 'analytics/Track'
import { Title, Description, FixedTopContainer, StepContainerInner } from '../helperComponents'
@ -77,7 +77,7 @@ class Analytics extends PureComponent<StepProps, State> {
: 'Sentry Logs Disabled Onboarding'
}
/>
<CheckBox isChecked={sentryLogsToggle} onChange={this.handleSentryLogsToggle} />
<Switch isChecked={sentryLogsToggle} onChange={this.handleSentryLogsToggle} />
</Box>
</Container>
<Container>
@ -94,7 +94,7 @@ class Analytics extends PureComponent<StepProps, State> {
: 'Analytics Disabled Onboarding'
}
/>
<CheckBox isChecked={analyticsToggle} onChange={this.handleAnalyticsToggle} />
<Switch isChecked={analyticsToggle} onChange={this.handleAnalyticsToggle} />
</Box>
</Container>
</Box>

2
src/components/Onboarding/steps/Finish.js

@ -102,7 +102,7 @@ export default class Finish extends Component<StepProps, *> {
<Description>{t('onboarding:finish.desc')}</Description>
</Box>
<Box p={5}>
<Button primary padded onClick={() => finish()}>
<Button primary onClick={() => finish()}>
{t('onboarding:finish.openAppButton')}
</Button>
</Box>

4
src/components/Onboarding/steps/GenuineCheck/GenuineCheckErrorPage.js

@ -76,10 +76,10 @@ class GenuineCheckErrorPage extends PureComponent<Props, *> {
{this.renderErrorPage()}
</Box>
<OnboardingFooterWrapper>
<Button padded outlineGrey onClick={() => redoGenuineCheck()}>
<Button outlineGrey onClick={() => redoGenuineCheck()}>
{t('app:common.back')}
</Button>
<Button padded danger onClick={() => contactSupport()} ml="auto">
<Button danger onClick={() => contactSupport()} ml="auto">
{t('onboarding:genuineCheck.buttons.contactSupport')}
</Button>
</OnboardingFooterWrapper>

5
src/components/Onboarding/steps/GenuineCheck/GenuineCheckUnavailable.js

@ -26,12 +26,11 @@ export function GenuineCheckUnavailableFooter({
}) {
return (
<OnboardingFooterWrapper>
<Button padded outlineGrey onClick={() => prevStep()}>
<Button outlineGrey onClick={() => prevStep()}>
{t('app:common.back')}
</Button>
<Box horizontal ml="auto">
<Button
padded
disabled={false}
event="Onboarding Skip Genuine Check"
onClick={() => nextStep()}
@ -39,7 +38,7 @@ export function GenuineCheckUnavailableFooter({
>
{t('app:common.skipThisStep')}
</Button>
<Button padded onClick={nextStep} disabled primary>
<Button onClick={nextStep} disabled primary>
{t('app:common.continue')}
</Button>
</Box>

2
src/components/Onboarding/steps/NoDevice.js

@ -65,7 +65,7 @@ class NoDevice extends PureComponent<StepProps, *> {
</Box>
</GrowScroll>
<OnboardingFooterWrapper>
<Button padded outlineGrey onClick={() => prevStep()} mr="auto">
<Button outlineGrey onClick={() => prevStep()} mr="auto">
{t('app:common.back')}
</Button>
</OnboardingFooterWrapper>

4
src/components/Onboarding/steps/SetPassword.js

@ -131,12 +131,11 @@ class SetPassword extends PureComponent<StepProps, State> {
</StepContainerInner>
<OnboardingFooterWrapper>
<Button padded outlineGrey onClick={() => prevStep()}>
<Button outlineGrey onClick={() => prevStep()}>
{t('app:common.back')}
</Button>
<Box horizontal ml="auto">
<Button
padded
event="Onboarding Skip Password"
onClick={() => nextStep()}
disabled={false}
@ -145,7 +144,6 @@ class SetPassword extends PureComponent<StepProps, State> {
{t('app:common.skipThisStep')}
</Button>
<Button
padded
onClick={this.handleSave}
disabled={!this.isValid() || !newPassword.length || !confirmPassword.length}
primary

2
src/components/Onboarding/steps/Start.js

@ -23,7 +23,7 @@ export default (props: StepProps) => {
<Box my={5}>
<Title>{t('onboarding:start.title')}</Title>
</Box>
<Button padded primary onClick={() => jumpStep('init')}>
<Button primary onClick={() => jumpStep('init')}>
{t('onboarding:start.startBtn')}
</Button>
</Box>

6
src/components/RenderError.js

@ -100,14 +100,14 @@ ${error.stack}
</Box>
<Space of={30} />
<Box horizontal flow={2}>
<Button primary onClick={this.handleRestart}>
<Button small primary onClick={this.handleRestart}>
{t('app:crash.restart')}
</Button>
<ExportLogsBtn withoutAppData={withoutAppData} />
<Button primary onClick={this.handleCreateIssue}>
<Button small primary onClick={this.handleCreateIssue}>
{t('app:crash.createTicket')}
</Button>
<Button danger onClick={this.handleOpenHardResetModal}>
<Button small danger onClick={this.handleOpenHardResetModal}>
{t('app:crash.reset')}
</Button>
</Box>

2
src/components/SettingsPage/CleanButton.js

@ -45,7 +45,7 @@ class CleanButton extends PureComponent<Props, State> {
const { opened } = this.state
return (
<Fragment>
<Button primary onClick={this.open} event="ClearCacheIntent">
<Button small primary onClick={this.open} event="ClearCacheIntent">
{t('app:settings.profile.softReset')}
</Button>

4
src/components/SettingsPage/DevModeButton.js

@ -6,7 +6,7 @@ import { createStructuredSelector } from 'reselect'
import { setDeveloperMode } from 'actions/settings'
import { developerModeSelector } from 'reducers/settings'
import Track from 'analytics/Track'
import CheckBox from 'components/base/CheckBox'
import Switch from 'components/base/Switch'
const mapStateToProps = createStructuredSelector({
developerMode: developerModeSelector,
@ -27,7 +27,7 @@ class DevModeButton extends PureComponent<Props> {
return (
<Fragment>
<Track onUpdate event={developerMode ? 'DevModeEnabled' : 'DevModeDisabled'} />
<CheckBox isChecked={developerMode} onChange={setDeveloperMode} />
<Switch isChecked={developerMode} onChange={setDeveloperMode} />
</Fragment>
)
}

6
src/components/SettingsPage/DisablePasswordButton.js

@ -13,7 +13,7 @@ import { storeSelector } from 'reducers/settings'
import type { SettingsState } from 'reducers/settings'
import { unlock } from 'reducers/application' // FIXME should be in actions
import Track from 'analytics/Track'
import CheckBox from 'components/base/CheckBox'
import Switch from 'components/base/Switch'
import Box from 'components/base/Box'
import Button from 'components/base/Button'
import PasswordModal from './PasswordModal'
@ -96,11 +96,11 @@ class DisablePasswordButton extends PureComponent<Props, State> {
<Box horizontal flow={2} align="center">
{isPasswordEnabled && (
<Button onClick={this.handleOpenPasswordModal}>
<Button small onClick={this.handleOpenPasswordModal}>
{t('app:settings.profile.changePassword')}
</Button>
)}
<CheckBox isChecked={isPasswordEnabled} onChange={this.handleChangePasswordCheck} />
<Switch isChecked={isPasswordEnabled} onChange={this.handleChangePasswordCheck} />
</Box>
<PasswordModal

4
src/components/SettingsPage/DisablePasswordModal.js

@ -98,12 +98,12 @@ class DisablePasswordModal extends PureComponent<Props, State> {
</Box>
</ModalContent>
<ModalFooter horizontal align="center" justify="flex-end" flow={2}>
<Button type="button" padded onClick={onClose}>
<Button small type="Button small" onClick={onClose}>
{t('app:common.cancel')}
</Button>
<Button
small
primary
padded
onClick={this.disablePassword}
disabled={!currentPassword && !incorrectPassword}
>

4
src/components/SettingsPage/PasswordModal.js

@ -111,11 +111,11 @@ class PasswordModal extends PureComponent<Props, State> {
/>
</ModalContent>
<ModalFooter horizontal align="center" justify="flex-end" flow={2}>
<Button type="button" padded onClick={onClose}>
<Button small type="Button small" onClick={onClose}>
{t('app:common.cancel')}
</Button>
<Button
padded
small
primary
onClick={this.handleSave}
disabled={!this.isValid() || !newPassword.length || !confirmPassword.length}

1
src/components/SettingsPage/ReleaseNotesButton.js

@ -26,6 +26,7 @@ class ReleaseNotesButton extends PureComponent<Props> {
const version = __APP_VERSION__
return (
<Button
small
primary
onClick={() => {
openModal(MODAL_RELEASES_NOTES, version)

2
src/components/SettingsPage/ResetButton.js

@ -44,7 +44,7 @@ class ResetButton extends PureComponent<Props, State> {
const { opened, pending } = this.state
return (
<Fragment>
<Button danger onClick={this.open} event="HardResetIntent">
<Button small danger onClick={this.open} event="HardResetIntent">
{t('app:settings.profile.hardReset')}
</Button>

4
src/components/SettingsPage/SentryLogsButton.js

@ -6,7 +6,7 @@ import { createStructuredSelector } from 'reselect'
import { setSentryLogs } from 'actions/settings'
import { sentryLogsSelector } from 'reducers/settings'
import Track from 'analytics/Track'
import CheckBox from 'components/base/CheckBox'
import Switch from 'components/base/Switch'
const mapStateToProps = createStructuredSelector({
sentryLogs: sentryLogsSelector,
@ -27,7 +27,7 @@ class SentryLogsButton extends PureComponent<Props> {
return (
<Fragment>
<Track onUpdate event={sentryLogs ? 'SentryEnabled' : 'SentryDisabled'} />
<CheckBox isChecked={sentryLogs} onChange={setSentryLogs} />
<Switch isChecked={sentryLogs} onChange={setSentryLogs} />
</Fragment>
)
}

4
src/components/SettingsPage/ShareAnalyticsButton.js

@ -5,7 +5,7 @@ import { createStructuredSelector } from 'reselect'
import { setShareAnalytics } from 'actions/settings'
import { shareAnalyticsSelector } from 'reducers/settings'
import Track from 'analytics/Track'
import CheckBox from 'components/base/CheckBox'
import Switch from 'components/base/Switch'
const mapStateToProps = createStructuredSelector({
shareAnalytics: shareAnalyticsSelector,
@ -26,7 +26,7 @@ class ShareAnalytics extends PureComponent<Props> {
return (
<Fragment>
<Track onUpdate event={shareAnalytics ? 'AnalyticsEnabled' : 'AnalyticsDisabled'} />
<CheckBox isChecked={shareAnalytics} onChange={setShareAnalytics} />
<Switch isChecked={shareAnalytics} onChange={setShareAnalytics} />
</Fragment>
)
}

2
src/components/SettingsPage/sections/Tools.js

@ -37,7 +37,7 @@ class TabProfile extends PureComponent<*, *> {
return (
<Card flow={3}>
<Box horizontal>
<Button onClick={this.onQRCodeMobileExport} primary>
<Button small onClick={this.onQRCodeMobileExport} primary>
QRCode Mobile Export
</Button>

4
src/components/base/AccountsList/AccountRow.js

@ -7,7 +7,7 @@ import type { Account } from '@ledgerhq/live-common/lib/types'
import { darken } from 'styles/helpers'
import Box, { Tabbable } from 'components/base/Box'
import Radio from 'components/base/Radio'
import CheckBox from 'components/base/CheckBox'
import CryptoCurrencyIcon from 'components/CryptoCurrencyIcon'
import FormattedVal from 'components/base/FormattedVal'
import Input from 'components/base/Input'
@ -103,7 +103,7 @@ export default class AccountRow extends PureComponent<Props> {
/>
) : null}
{!isDisabled ? (
<Radio disabled isChecked={isChecked || !!isDisabled} />
<CheckBox disabled isChecked={isChecked || !!isDisabled} />
) : (
<div style={{ width: 20 }} />
)}

10
src/components/base/Button/index.js

@ -140,9 +140,9 @@ function getStyles(props, state) {
const Base = styled.button.attrs({
ff: 'Museo Sans|Regular',
fontSize: p => p.fontSize || 3,
px: p => (p.padded ? 4 : 2),
py: p => (p.padded ? 2 : 0),
fontSize: p => p.fontSize || (!p.small ? 4 : 3),
px: p => (!p.small ? 4 : 3),
py: p => (!p.small ? 2 : 0),
color: 'grey',
bg: 'transparent',
})`
@ -154,7 +154,7 @@ const Base = styled.button.attrs({
border: none;
border-radius: ${p => p.theme.radii[1]}px;
cursor: ${p => (p.disabled ? 'default' : 'pointer')};
height: ${p => (p.small ? 30 : p.padded ? 40 : 36)}px;
height: ${p => (p.small ? 34 : 40)}px;
pointer-events: ${p => (p.disabled ? 'none' : '')};
outline: none;
@ -179,7 +179,6 @@ type Props = {
disabled?: boolean,
onClick?: Function,
small?: boolean,
padded?: boolean,
isLoading?: boolean,
event?: string,
eventProperties?: Object,
@ -195,7 +194,6 @@ class Button extends PureComponent<
onClick: noop,
primary: false,
small: false,
padded: false,
danger: false,
}

47
src/components/base/CheckBox/index.js

@ -1,35 +1,32 @@
// @flow
import React from 'react'
import noop from 'lodash/noop'
import styled from 'styled-components'
import Check from 'icons/Check'
import { Tabbable } from 'components/base/Box'
const Base = styled(Tabbable).attrs({
bg: p => (p.isChecked ? 'wallet' : 'lightFog'),
horizontal: true,
relative: true,
align: 'center',
justifyContent: 'center',
})`
backround: red;
width: 50px;
height: 26px;
border-radius: 13px;
transition: 250ms linear background-color;
cursor: pointer;
outline: none;
border-radius: 4px;
background-color: ${p => (p.isChecked ? p.theme.colors.wallet : p.theme.colors.white)};
border: 1px solid;
border-color: ${p => (p.isChecked ? p.theme.colors.wallet : p.theme.colors.fog)};
color: ${p => p.theme.colors.white};
height: 18px;
width: 18px;
transition: all ease-in-out 0.1s;
&:focus {
outline: none;
box-shadow: 0 0 4px 1px ${p => p.theme.colors.wallet};
border-color: ${p => p.theme.colors.wallet};
}
&:hover {
border-color: ${p => p.theme.colors.wallet};
}
`
const Ball = styled.div`
width: 20px;
height: 20px;
border-radius: 50%;
background: white;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);
transition: 250ms ease-in-out transform;
transform: translate3d(${p => (p.isChecked ? '27px' : '3px')}, 0, 0);
`
type Props = {
@ -38,16 +35,12 @@ type Props = {
}
function CheckBox(props: Props) {
const { isChecked, onChange, ...p } = props
const { isChecked, onChange } = props
return (
<Base isChecked={isChecked} onClick={() => onChange && onChange(!isChecked)} {...p}>
<Ball isChecked={isChecked} />
<Base {...props} isChecked={isChecked} onClick={() => onChange && onChange(!isChecked)}>
<Check size={12} />
</Base>
)
}
CheckBox.defaultProps = {
onChange: noop,
}
export default CheckBox

4
src/components/base/CheckBox/stories.js

@ -1,12 +1,12 @@
import React from 'react'
import { storiesOf } from '@storybook/react'
import { boolean } from '@storybook/addon-knobs'
import { action } from '@storybook/addon-actions'
import { boolean } from '@storybook/addon-knobs'
import CheckBox from 'components/base/CheckBox'
const stories = storiesOf('Components/base', module)
stories.add('CheckBox', () => (
<CheckBox isChecked={boolean('isChecked', false)} onChange={action('onChange')} />
<CheckBox isChecked={boolean('checked', false)} onChange={action('onChange')} />
))

53
src/components/base/Switch/index.js

@ -0,0 +1,53 @@
// @flow
import React from 'react'
import noop from 'lodash/noop'
import styled from 'styled-components'
import { Tabbable } from 'components/base/Box'
const Base = styled(Tabbable).attrs({
bg: p => (p.isChecked ? 'wallet' : 'lightFog'),
horizontal: true,
align: 'center',
})`
backround: red;
width: 50px;
height: 26px;
border-radius: 13px;
transition: 250ms linear background-color;
cursor: pointer;
&:focus {
outline: none;
}
`
const Ball = styled.div`
width: 20px;
height: 20px;
border-radius: 50%;
background: white;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);
transition: 250ms ease-in-out transform;
transform: translate3d(${p => (p.isChecked ? '27px' : '3px')}, 0, 0);
`
type Props = {
isChecked: boolean,
onChange?: Function,
}
function Switch(props: Props) {
const { isChecked, onChange, ...p } = props
return (
<Base isChecked={isChecked} onClick={() => onChange && onChange(!isChecked)} {...p}>
<Ball isChecked={isChecked} />
</Base>
)
}
Switch.defaultProps = {
onChange: noop,
}
export default Switch

12
src/components/base/Switch/stories.js

@ -0,0 +1,12 @@
import React from 'react'
import { storiesOf } from '@storybook/react'
import { boolean } from '@storybook/addon-knobs'
import { action } from '@storybook/addon-actions'
import Switch from 'components/base/Switch'
const stories = storiesOf('Components/base', module)
stories.add('Switch', () => (
<Switch isChecked={boolean('isChecked', false)} onChange={action('onChange')} />
))

4
src/components/modals/AccountSettingRenderBody.js

@ -275,10 +275,10 @@ class HelperComp extends PureComponent<Props, State> {
</Spoiler>
</ModalContent>
<ModalFooter horizontal>
<Button padded danger type="button" onClick={this.handleOpenRemoveAccountModal}>
<Button danger type="button" onClick={this.handleOpenRemoveAccountModal}>
{t('app:common.delete')}
</Button>
<Button padded ml="auto" type="submit" primary>
<Button ml="auto" type="submit" primary>
{t('app:common.apply')}
</Button>
</ModalFooter>

4
src/components/modals/AddAccounts/index.js

@ -28,7 +28,7 @@ import { validateNameEdition } from 'helpers/accountName'
import StepChooseCurrency, { StepChooseCurrencyFooter } from './steps/01-step-choose-currency'
import StepConnectDevice, { StepConnectDeviceFooter } from './steps/02-step-connect-device'
import StepImport, { StepImportFooter } from './steps/03-step-import'
import StepFinish from './steps/04-step-finish'
import StepFinish, { StepFinishFooter } from './steps/04-step-finish'
const createSteps = ({ t }: { t: T }) => {
const onBack = ({ transitionTo, resetScanState }: StepProps) => {
@ -64,7 +64,7 @@ const createSteps = ({ t }: { t: T }) => {
id: 'finish',
label: t('app:addAccounts.breadcrumb.finish'),
component: StepFinish,
footer: null,
footer: StepFinishFooter,
onBack: null,
hideFooter: true,
},

57
src/components/modals/AddAccounts/steps/04-step-finish.js

@ -1,32 +1,57 @@
// @flow
import React from 'react'
import React, { Fragment } from 'react'
import styled from 'styled-components'
import TrackPage from 'analytics/TrackPage'
import Box from 'components/base/Box'
import Button from 'components/base/Button'
import IconCheckCircle from 'icons/CheckCircle'
import IconCheckFull from 'icons/CheckFull'
import { CurrencyCircleIcon } from '../../../base/CurrencyBadge'
import type { StepProps } from '../index'
function StepFinish({ onCloseModal, onGoStep1, t }: StepProps) {
const Title = styled(Box).attrs({
ff: 'Museo Sans',
fontSize: 5,
mt: 2,
color: 'dark',
})`
text-align: center;
`
const Text = styled(Box).attrs({
ff: 'Open Sans',
fontSize: 4,
mt: 2,
})`
text-align: center;
`
function StepFinish({ currency, t, checkedAccountsIds }: StepProps) {
return (
<Box align="center" py={6}>
<TrackPage category="AddAccounts" name="Step4" />
<Box color="positiveGreen">
<IconCheckCircle size={40} />
</Box>
<Box p={4}>{t('app:addAccounts.success')}</Box>
<Box horizontal>
<Button mr={2} outline onClick={onGoStep1}>
{t('app:addAccounts.cta.addMore')}
</Button>
<Button primary onClick={onCloseModal}>
{t('app:common.close')}
</Button>
</Box>
{currency ? (
<Box color="positiveGreen" style={{ position: 'relative' }}>
<CurrencyCircleIcon size={50} currency={currency} />
<IconCheckFull size={18} style={{ position: 'absolute', top: 0, right: 0 }} />
</Box>
) : null}
<Title>{t('app:addAccounts.success', { count: checkedAccountsIds.length })}</Title>
<Text>{t('app:addAccounts.successDescription', { count: checkedAccountsIds.length })}</Text>
</Box>
)
}
export default StepFinish
export const StepFinishFooter = ({ onCloseModal, onGoStep1, t }: StepProps) => (
<Fragment>
<Button mr={2} outline onClick={onGoStep1}>
{t('app:addAccounts.cta.addMore')}
</Button>
<Button primary onClick={onCloseModal}>
{t('app:common.close')}
</Button>
</Fragment>
)

2
src/components/modals/OperationDetails.js

@ -229,7 +229,7 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => {
{url && (
<ModalFooter horizontal justify="flex-end" flow={2}>
<Button primary padded onClick={() => shell.openExternal(url)}>
<Button primary onClick={() => shell.openExternal(url)}>
{t('app:operationDetails.viewOperation')}
</Button>
</ModalFooter>

2
src/components/modals/ReleaseNotes.js

@ -138,7 +138,7 @@ export const Notes = styled(Box).attrs({
}
}
input[type='checkbox'] {
input[type='Switch'] {
margin-right: 0.5em;
}
`

2
src/components/modals/UpdateFirmware/Disclaimer.js

@ -67,7 +67,7 @@ class DisclaimerModal extends PureComponent<Props, State> {
<GradientBox />
</ModalContent>
<ModalFooter horizontal justifyContent="flex-end" style={{ width: '100%' }}>
<Button primary padded onClick={goToNextStep}>
<Button primary onClick={goToNextStep}>
{t('app:manager.firmware.continue')}
</Button>
</ModalFooter>

4
src/index.ejs

@ -56,6 +56,10 @@
}
}
textarea {
resize: none;
}
</style>
<script>
<% if (htmlWebpackPlugin.options.nodeModules) { %>

6
static/i18n/en/app.yml

@ -163,8 +163,10 @@ addAccounts:
newAccount: New account
legacyAccount: '{{accountName}} (legacy)'
noAccountToImport: No existing {{currencyName}} accounts to add
success: Account added to your portfolio
# success_plural: Accounts successfully added to your portfolio.
success: Account successfully added to your portfolio
success_plural: Accounts successfully added to your portfolio
successDescription: Your account have been created.
successDescription_plural: Your accounts have been created.
createNewAccount:
title: Add a new account
noOperationOnLastAccount: 'You have to receive crypto assets on <1><0>{{accountName}}</0></1> before you can create a new account.'

Loading…
Cancel
Save