Browse Source

Finish integration for OperationDetails modal

master
Loëck Vézien 7 years ago
parent
commit
a39035d4e7
No known key found for this signature in database GPG Key ID: CBCDCE384E853AC4
  1. 6
      package.json
  2. 23
      src/components/AccountPage/index.js
  3. 34
      src/components/OperationsList/ConfirmationCheck.js
  4. 15
      src/components/OperationsList/index.js
  5. 9
      src/components/base/Button/index.js
  6. 139
      src/components/modals/OperationDetails.js
  7. 4
      src/icons/Cross.js
  8. 2
      src/internals/accounts/sync.js
  9. 14
      src/main/menu.js
  10. 2
      static/i18n/en/operationDetails.yml
  11. 316
      yarn.lock

6
package.json

@ -74,7 +74,7 @@
"raven-js": "^3.23.3",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-i18next": "^7.5.0",
"react-i18next": "^7.5.1",
"react-mortal": "^3.2.0",
"react-motion": "^0.5.2",
"react-qr-reader": "^2.1.0",
@ -118,7 +118,7 @@
"electron-devtools-installer": "^2.2.3",
"electron-rebuild": "^1.7.3",
"electron-webpack": "1.13.0",
"eslint": "^4.19.0",
"eslint": "^4.19.1",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-prettier": "^2.9.0",
"eslint-import-resolver-babel-module": "^4.0.0",
@ -130,7 +130,7 @@
"flow-typed": "^2.4.0",
"hard-source-webpack-plugin": "^0.6.0",
"husky": "^0.14.3",
"jest": "^22.4.2",
"jest": "^22.4.3",
"js-yaml": "^3.10.0",
"lint-staged": "^7.0.0",
"node-loader": "^0.6.0",

23
src/components/AccountPage/index.js

@ -5,11 +5,14 @@ import { compose } from 'redux'
import { connect } from 'react-redux'
import { translate } from 'react-i18next'
import { Redirect } from 'react-router'
import styled from 'styled-components'
import { MODAL_SEND, MODAL_RECEIVE, MODAL_SETTINGS_ACCOUNT } from 'constants'
import type { T, Account } from 'types/common'
import { darken } from 'styles/helpers'
import { getAccountById } from 'reducers/accounts'
import { getCounterValue } from 'reducers/settings'
import { openModal } from 'reducers/modals'
@ -32,6 +35,18 @@ import OperationsList from 'components/OperationsList'
import AccountHeader from './AccountHeader'
const ButtonSettings = styled(Button).attrs({
small: true,
})`
border: 2px solid ${p => p.theme.colors.grey};
width: 30px;
padding: 0;
&:active {
border: 2px solid ${p => darken(p.theme.colors.grey, 0.2)};
}
`
const mapStateToProps = (state, props) => ({
account: getAccountById(state, props.match.params.id),
counterValue: getCounterValue(state),
@ -91,15 +106,11 @@ class AccountPage extends PureComponent<Props, State> {
<Box>{t('receive:title')}</Box>
</Box>
</Button>
<Button
small
style={{ width: 30, padding: 0 }}
onClick={() => openModal(MODAL_SETTINGS_ACCOUNT, { account })}
>
<ButtonSettings onClick={() => openModal(MODAL_SETTINGS_ACCOUNT, { account })}>
<Box align="center">
<IconControls size={16} />
</Box>
</Button>
</ButtonSettings>
</Box>
</Box>
<Box mb={7}>

34
src/components/OperationsList/ConfirmationCheck.js

@ -17,7 +17,7 @@ import Tooltip from 'components/base/Tooltip'
const Container = styled(Box).attrs({
bg: p =>
p.isConfirmed
? rgba(p.type === 'from' ? p.theme.colors.positiveGreen : p.theme.colors.grey, 0.1)
? rgba(p.type === 'from' ? p.theme.colors.positiveGreen : p.theme.colors.grey, 0.2)
: 'none',
color: p => (p.type === 'from' ? p.theme.colors.positiveGreen : p.theme.colors.grey),
align: 'center',
@ -47,24 +47,23 @@ const WrapperClock = styled(Box).attrs({
`
const ConfirmationCheck = ({
type,
confirmations,
minConfirmations,
t,
type,
withTooltip,
...props
}: {
type: 'to' | 'from',
confirmations: number,
minConfirmations: number,
t: T,
type: 'to' | 'from',
withTooltip?: boolean,
}) => {
const isConfirmed = confirmations >= minConfirmations
return (
<Tooltip
render={() =>
isConfirmed ? t('operationsList:confirmed') : t('operationsList:notConfirmed')
}
>
<Container type={type} isConfirmed={isConfirmed}>
const renderContent = () => (
<Container type={type} isConfirmed={isConfirmed} {...props}>
{type === 'from' ? <IconArrowDown size={12} /> : <IconArrowUp size={12} />}
{!isConfirmed && (
<WrapperClock>
@ -72,8 +71,23 @@ const ConfirmationCheck = ({
</WrapperClock>
)}
</Container>
)
return withTooltip ? (
<Tooltip
render={() =>
isConfirmed ? t('operationsList:confirmed') : t('operationsList:notConfirmed')
}
>
{renderContent()}
</Tooltip>
) : (
renderContent()
)
}
ConfirmationCheck.defaultProps = {
withTooltip: true,
}
export default ConfirmationCheck

15
src/components/OperationsList/index.js

@ -137,9 +137,16 @@ const Operation = ({
const time = moment(tx.receivedAt)
const Icon = getIconByCoinType(account.currency.coinType)
const type = tx.amount > 0 ? 'from' : 'to'
const cValue = counterValues
? counterValues[time.format('YYYY-MM-DD')] * (tx.amount / 10 ** unit.magnitude)
: null
return (
<OperationRaw onClick={() => onOperationClick({ operation: tx, account })}>
<OperationRaw
onClick={() =>
onOperationClick({ operation: tx, account, type, counterValue: cValue, fiat: counterValue })
}
>
<Cell size={CONFIRMATION_COL_SIZE} align="center" justify="flex-start">
<ConfirmationCheck
type={type}
@ -193,9 +200,9 @@ const Operation = ({
alwaysShowSign
color={tx.amount < 0 ? 'smoke' : 'positiveGreen'}
/>
{counterValues && (
{cValue && (
<FormattedVal
val={counterValues[time.format('YYYY-MM-DD')] * (tx.amount / 10 ** unit.magnitude)}
val={cValue}
fiat={counterValue}
showCode
fontSize={3}
@ -301,7 +308,7 @@ export class OperationsList extends Component<Props> {
account={acc}
counterValue={counterValue}
counterValues={cValues}
key={`{${tx.id}${acc ? `-${acc.id}` : ''}`}
key={`${tx.id}${acc ? `-${acc.id}` : ''}`}
minConfirmations={acc.settings.minConfirmations}
onAccountClick={onAccountClick}
onOperationClick={this.handleClickOperation}

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

@ -12,7 +12,7 @@ import fontFamily from 'styles/styled/fontFamily'
const Base = styled.button.attrs({
ff: 'Museo Sans|Regular',
fontSize: 3,
px: p => (p.small ? 2 : 4),
px: p => (p.primary ? (p.small ? 2 : 4) : 1),
})`
${space};
${color};
@ -20,8 +20,7 @@ const Base = styled.button.attrs({
${fontWeight};
${fontFamily};
border-radius: ${p => p.theme.radii[1]}px;
border: ${p =>
p.primary ? 'none' : `2px solid ${p.disabled ? 'transparent' : p.theme.colors.grey}`};
border: none;
cursor: ${p => (p.disabled ? 'default' : 'pointer')};
height: ${p => (p.small ? 30 : 40)}px;
outline: none;
@ -31,10 +30,6 @@ const Base = styled.button.attrs({
}
&:active {
border: ${p =>
p.primary
? 'none'
: `2px solid ${p.disabled ? 'transparent' : darken(p.theme.colors.grey, 0.2)}`};
color: ${p => (p.primary ? '' : darken(p.theme.colors.grey, 0.2))};
background: ${p => (p.primary ? darken(p.theme.colors.wallet, 0.1) : '')};
}

139
src/components/modals/OperationDetails.js

@ -1,63 +1,148 @@
// @flow
import React from 'react'
import { shell } from 'electron'
import { translate } from 'react-i18next'
import styled from 'styled-components'
import moment from 'moment'
import type { T } from 'types/common'
import { MODAL_OPERATION_DETAILS } from 'constants'
import Box from 'components/base/Box'
import Button from 'components/base/Button'
import Bar from 'components/base/Bar'
import FormattedVal from 'components/base/FormattedVal'
import Modal, { ModalBody, ModalTitle, ModalFooter, ModalContent } from 'components/base/Modal'
import ConfirmationCheck from 'components/OperationsList/ConfirmationCheck'
const Line = styled(Box).attrs({
horizontal: true,
})``
const ColLeft = styled(Box)`
const ColLeft = styled(Box).attrs({
color: 'smoke',
ff: 'Open Sans',
fontSize: 4,
})`
width: 95px;
`
const ColRight = styled(Box).attrs({
fontSize: 4,
ff: 'Open Sans',
color: 'dark',
shrink: true,
})`
word-break: break-all;
`
const OperationDetails = () => (
const CanSelect = styled.div`
user-select: text;
`
const B = styled(Bar).attrs({
color: 'lightGrey',
size: 1,
})``
const OperationDetails = ({ t }: { t: T }) => (
<Modal
name={MODAL_OPERATION_DETAILS}
render={({ data, onClose }) => {
const { operation, account } = data
const { operation, account, type, counterValue, fiat } = data
const { name, unit, settings: { minConfirmations } } = account
const { id, amount, confirmations, receivedAt, from, to } = operation
const isConfirmed = confirmations >= minConfirmations
return (
<ModalBody onClose={onClose}>
<ModalTitle>Operation details</ModalTitle>
<ModalContent flow={4}>
<Box alignItems="center" mt={3}>
<ConfirmationCheck
confirmations={confirmations}
minConfirmations={minConfirmations}
style={{
transform: 'scale(2)',
}}
t={t}
type={type}
withTooltip={false}
/>
<Box mt={5} alignItems="center">
<Box>
<Box>{operation.amount}</Box>
<FormattedVal
unit={unit}
alwaysShowSign
showCode
val={amount}
fontSize={8}
style={{ lineHeight: 1 }}
/>
</Box>
<Box>
<ColLeft>Acccount</ColLeft>
<Box>{account.name}</Box>
<Box mt={1}>
<FormattedVal
val={counterValue}
fiat={fiat}
showCode
fontSize={5}
alwaysShowSign
color="grey"
style={{ lineHeight: 1 }}
/>
</Box>
<Bar />
<Box>
<ColLeft>Date</ColLeft>
<Box>{operation.receivedAt}</Box>
</Box>
<Bar />
<Box>
<ColLeft>Status</ColLeft>
<Box>{operation.confirmations}</Box>
</Box>
<Bar />
<Line mt={4}>
<ColLeft>Acccount</ColLeft>
<ColRight>{name}</ColRight>
</Line>
<B />
<Line>
<ColLeft>Date</ColLeft>
<ColRight>{moment(receivedAt).format('LLL')}</ColRight>
</Line>
<B />
<Line>
<ColLeft>Status</ColLeft>
<ColRight color={isConfirmed ? 'positiveGreen' : null} horizontal flow={1}>
<Box>
<ColLeft>From</ColLeft>
<Box>{operation.from.join(',')}</Box>
{isConfirmed
? t('operationDetails:confirmed')
: t('operationDetails:notConfirmed')}
</Box>
<Box>
<Box>({confirmations})</Box>
</ColRight>
</Line>
<B />
<Line>
<ColLeft>From</ColLeft>
<ColRight>{from.map(v => <CanSelect key={v}>{v}</CanSelect>)}</ColRight>
</Line>
<B />
<Line>
<ColLeft>To</ColLeft>
<Box>{operation.to.join(',')}</Box>
</Box>
<Box>
<ColRight>{to.map(v => <CanSelect key={v}>{v}</CanSelect>)}</ColRight>
</Line>
<B />
<Line>
<ColLeft>Identifier</ColLeft>
<Box>{operation.id}</Box>
</Box>
<ColRight>
<CanSelect>{id}</CanSelect>
</ColRight>
</Line>
</ModalContent>
<ModalFooter horizontal justify="flex-end" flow={2}>
<Button>Cancel</Button>
<Button primary>View operation</Button>
<Button onClick={onClose}>Cancel</Button>
<Button
primary
onClick={() => shell.openExternal(`https://testnet.blockchain.info/tx/${id}`)}
>
View operation
</Button>
</ModalFooter>
</ModalBody>
)
@ -65,4 +150,4 @@ const OperationDetails = () => (
/>
)
export default OperationDetails
export default translate()(OperationDetails)

4
src/icons/Cross.js

@ -3,10 +3,10 @@
import React from 'react'
export default ({ size, ...p }: { size: number }) => (
<svg viewBox="0 0 384 512" height={size} width={size} {...p}>
<svg viewBox="0 0 16 16" height={size} width={size} {...p}>
<path
fill="currentColor"
d="M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z"
d="M9.2375 8l4.065625-4.065625c.146875-.146875.146875-.384375 0-.53125l-.70625-.70625c-.146875-.146875-.384375-.146875-.53125 0L8 6.7625 3.934375 2.696875C3.7875 2.55 3.55 2.55 3.403125 2.696875l-.70625.70625c-.146875.146875-.146875.384375 0 .53125L6.7625 8l-4.065625 4.065625c-.146875.146875-.146875.384375 0 .53125l.70625.70625c.146875.146875.384375.146875.53125 0L8 9.2375l4.065625 4.065625c.146875.146875.384375.146875.53125 0l.70625-.70625c.146875-.146875.146875-.384375 0-.53125L9.2375 8z"
/>
</svg>
)

2
src/internals/accounts/sync.js

@ -6,7 +6,7 @@ const network = networks[1]
function syncAccount({ id, operations, ...currentAccount }) {
const hdnode = getHDNode({ xpub58: id, network })
const allTxsHash = operations.map(t => t.hash)
const allTxsHash = operations.map(t => t.id)
return getAccount({ hdnode, network, allTxsHash, segwit: true, ...currentAccount }).then(
account => ({
id,

14
src/main/menu.js

@ -21,6 +21,20 @@ const template = [
],
[],
),
...[
{
label: 'Edit',
submenu: [
{ label: 'Undo', accelerator: 'CmdOrCtrl+Z', selector: 'undo:' },
{ label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', selector: 'redo:' },
{ type: 'separator' },
{ label: 'Cut', accelerator: 'CmdOrCtrl+X', selector: 'cut:' },
{ label: 'Copy', accelerator: 'CmdOrCtrl+C', selector: 'copy:' },
{ label: 'Paste', accelerator: 'CmdOrCtrl+V', selector: 'paste:' },
{ label: 'Select All', accelerator: 'CmdOrCtrl+A', selector: 'selectAll:' },
],
},
],
...props(
process.platform === 'darwin' || __DEV__ || DEV_TOOLS,
[

2
static/i18n/en/operationDetails.yml

@ -0,0 +1,2 @@
confirmed: Confirmed
notConfirmed: Not confirmed

316
yarn.lock

@ -1021,12 +1021,12 @@ babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-jest@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd"
babel-jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a"
dependencies:
babel-plugin-istanbul "^4.1.5"
babel-preset-jest "^22.4.1"
babel-preset-jest "^22.4.3"
babel-loader@^7.1.2:
version "7.1.3"
@ -1070,9 +1070,9 @@ babel-plugin-istanbul@^4.1.5:
istanbul-lib-instrument "^1.7.5"
test-exclude "^4.1.1"
babel-plugin-jest-hoist@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63"
babel-plugin-jest-hoist@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a"
babel-plugin-minify-builtins@^0.2.0:
version "0.2.0"
@ -1633,11 +1633,11 @@ babel-preset-flow@^6.23.0:
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
babel-preset-jest@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a"
babel-preset-jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156"
dependencies:
babel-plugin-jest-hoist "^22.4.1"
babel-plugin-jest-hoist "^22.4.3"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-minify@^0.2.0:
@ -4091,9 +4091,9 @@ eslint-visitor-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
eslint@^4.19.0:
version "4.19.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.0.tgz#9e900efb5506812ac374557034ef6f5c3642fc4c"
eslint@^4.19.1:
version "4.19.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@ -4290,6 +4290,17 @@ expect@^22.4.0:
jest-message-util "^22.4.0"
jest-regex-util "^22.1.0"
expect@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674"
dependencies:
ansi-styles "^3.2.0"
jest-diff "^22.4.3"
jest-get-type "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
express@^4.16.2:
version "4.16.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
@ -5901,15 +5912,15 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
jest-changed-files@^22.2.0:
version "22.2.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e"
jest-changed-files@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2"
dependencies:
throat "^4.0.0"
jest-cli@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06"
jest-cli@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
@ -5922,20 +5933,20 @@ jest-cli@^22.4.2:
istanbul-lib-coverage "^1.1.1"
istanbul-lib-instrument "^1.8.0"
istanbul-lib-source-maps "^1.2.1"
jest-changed-files "^22.2.0"
jest-config "^22.4.2"
jest-environment-jsdom "^22.4.1"
jest-get-type "^22.1.0"
jest-haste-map "^22.4.2"
jest-message-util "^22.4.0"
jest-regex-util "^22.1.0"
jest-resolve-dependencies "^22.1.0"
jest-runner "^22.4.2"
jest-runtime "^22.4.2"
jest-snapshot "^22.4.0"
jest-util "^22.4.1"
jest-validate "^22.4.2"
jest-worker "^22.2.2"
jest-changed-files "^22.4.3"
jest-config "^22.4.3"
jest-environment-jsdom "^22.4.3"
jest-get-type "^22.4.3"
jest-haste-map "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve-dependencies "^22.4.3"
jest-runner "^22.4.3"
jest-runtime "^22.4.3"
jest-snapshot "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
jest-worker "^22.4.3"
micromatch "^2.3.11"
node-notifier "^5.2.1"
realpath-native "^1.0.0"
@ -5962,6 +5973,22 @@ jest-config@^22.4.2:
jest-validate "^22.4.2"
pretty-format "^22.4.0"
jest-config@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403"
dependencies:
chalk "^2.0.1"
glob "^7.1.1"
jest-environment-jsdom "^22.4.3"
jest-environment-node "^22.4.3"
jest-get-type "^22.4.3"
jest-jasmine2 "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
pretty-format "^22.4.3"
jest-diff@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.0.tgz#384c2b78519ca44ca126382df53f134289232525"
@ -5971,9 +5998,18 @@ jest-diff@^22.4.0:
jest-get-type "^22.1.0"
pretty-format "^22.4.0"
jest-docblock@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8"
jest-diff@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-docblock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19"
dependencies:
detect-newline "^2.1.0"
@ -5985,6 +6021,14 @@ jest-environment-jsdom@^22.4.1:
jest-util "^22.4.1"
jsdom "^11.5.1"
jest-environment-jsdom@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
jsdom "^11.5.1"
jest-environment-node@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16"
@ -5992,19 +6036,30 @@ jest-environment-node@^22.4.1:
jest-mock "^22.2.0"
jest-util "^22.4.1"
jest-environment-node@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
jest-get-type@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9"
jest-haste-map@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4"
jest-get-type@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
jest-haste-map@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
jest-docblock "^22.4.0"
jest-serializer "^22.4.0"
jest-worker "^22.2.2"
jest-docblock "^22.4.3"
jest-serializer "^22.4.3"
jest-worker "^22.4.3"
micromatch "^2.3.11"
sane "^2.0.0"
@ -6024,11 +6079,27 @@ jest-jasmine2@^22.4.2:
jest-util "^22.4.1"
source-map-support "^0.5.0"
jest-leak-detector@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.0.tgz#64da77f05b001c96d2062226e079f89989c4aa2f"
jest-jasmine2@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965"
dependencies:
pretty-format "^22.4.0"
chalk "^2.0.1"
co "^4.6.0"
expect "^22.4.3"
graceful-fs "^4.1.11"
is-generator-fn "^1.0.0"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-snapshot "^22.4.3"
jest-util "^22.4.3"
source-map-support "^0.5.0"
jest-leak-detector@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35"
dependencies:
pretty-format "^22.4.3"
jest-matcher-utils@^22.4.0:
version "22.4.0"
@ -6038,6 +6109,14 @@ jest-matcher-utils@^22.4.0:
jest-get-type "^22.1.0"
pretty-format "^22.4.0"
jest-matcher-utils@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-message-util@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642"
@ -6048,19 +6127,37 @@ jest-message-util@^22.4.0:
slash "^1.0.0"
stack-utils "^1.0.1"
jest-message-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7"
dependencies:
"@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
micromatch "^2.3.11"
slash "^1.0.0"
stack-utils "^1.0.1"
jest-mock@^22.2.0:
version "22.2.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7"
jest-mock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7"
jest-regex-util@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53"
jest-resolve-dependencies@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31"
jest-regex-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af"
jest-resolve-dependencies@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e"
dependencies:
jest-regex-util "^22.1.0"
jest-regex-util "^22.4.3"
jest-resolve@^22.4.2:
version "22.4.2"
@ -6069,39 +6166,46 @@ jest-resolve@^22.4.2:
browser-resolve "^1.11.2"
chalk "^2.0.1"
jest-runner@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87"
jest-resolve@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea"
dependencies:
browser-resolve "^1.11.2"
chalk "^2.0.1"
jest-runner@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3"
dependencies:
exit "^0.1.2"
jest-config "^22.4.2"
jest-docblock "^22.4.0"
jest-haste-map "^22.4.2"
jest-jasmine2 "^22.4.2"
jest-leak-detector "^22.4.0"
jest-message-util "^22.4.0"
jest-runtime "^22.4.2"
jest-util "^22.4.1"
jest-worker "^22.2.2"
jest-config "^22.4.3"
jest-docblock "^22.4.3"
jest-haste-map "^22.4.3"
jest-jasmine2 "^22.4.3"
jest-leak-detector "^22.4.3"
jest-message-util "^22.4.3"
jest-runtime "^22.4.3"
jest-util "^22.4.3"
jest-worker "^22.4.3"
throat "^4.0.0"
jest-runtime@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3"
jest-runtime@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0"
dependencies:
babel-core "^6.0.0"
babel-jest "^22.4.1"
babel-jest "^22.4.3"
babel-plugin-istanbul "^4.1.5"
chalk "^2.0.1"
convert-source-map "^1.4.0"
exit "^0.1.2"
graceful-fs "^4.1.11"
jest-config "^22.4.2"
jest-haste-map "^22.4.2"
jest-regex-util "^22.1.0"
jest-resolve "^22.4.2"
jest-util "^22.4.1"
jest-validate "^22.4.2"
jest-config "^22.4.3"
jest-haste-map "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
realpath-native "^1.0.0"
@ -6110,9 +6214,9 @@ jest-runtime@^22.4.2:
write-file-atomic "^2.1.0"
yargs "^10.0.3"
jest-serializer@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.0.tgz#b5d145b98c4b0d2c20ab686609adbb81fe23b566"
jest-serializer@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436"
jest-snapshot@^22.4.0:
version "22.4.0"
@ -6125,6 +6229,17 @@ jest-snapshot@^22.4.0:
natural-compare "^1.4.0"
pretty-format "^22.4.0"
jest-snapshot@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2"
dependencies:
chalk "^2.0.1"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
pretty-format "^22.4.3"
jest-util@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f"
@ -6137,6 +6252,18 @@ jest-util@^22.4.1:
mkdirp "^0.5.1"
source-map "^0.6.0"
jest-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
jest-message-util "^22.4.3"
mkdirp "^0.5.1"
source-map "^0.6.0"
jest-validate@^22.4.0, jest-validate@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4"
@ -6147,18 +6274,28 @@ jest-validate@^22.4.0, jest-validate@^22.4.2:
leven "^2.1.0"
pretty-format "^22.4.0"
jest-worker@^22.2.2:
version "22.2.2"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390"
jest-validate@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30"
dependencies:
chalk "^2.0.1"
jest-config "^22.4.3"
jest-get-type "^22.4.3"
leven "^2.1.0"
pretty-format "^22.4.3"
jest-worker@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b"
dependencies:
merge-stream "^1.0.1"
jest@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20"
jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16"
dependencies:
import-local "^1.0.0"
jest-cli "^22.4.2"
jest-cli "^22.4.3"
js-base64@^2.1.9:
version "2.4.3"
@ -8052,6 +8189,13 @@ pretty-format@^22.4.0:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
pretty-format@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
private@^0.1.6, private@^0.1.7, private@~0.1.5:
version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@ -8362,9 +8506,9 @@ react-html-attributes@^1.3.0:
dependencies:
html-element-attributes "^1.0.0"
react-i18next@^7.5.0:
version "7.5.0"
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-7.5.0.tgz#96a92ba7492edb746975eae316534b42423362fe"
react-i18next@^7.5.1:
version "7.5.1"
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-7.5.1.tgz#5fe4cdfd2ecba22cc967213d880ab4cdd2c2ce61"
dependencies:
hoist-non-react-statics "^2.3.1"
html-parse-stringify2 "2.0.1"

Loading…
Cancel
Save