From c593c8edaa8ead83868cd797319185359a79e24c Mon Sep 17 00:00:00 2001 From: Mikhail Mikheev Date: Tue, 17 Dec 2019 20:56:19 +0400 Subject: [PATCH] Development (#368) * Adds cookie permissions to localStorage/redux state * Adds action * Adds files to git * (fix) linting issues * (update) flow-typed * (update) .eslint and .flowconfig * (add) cookie banner * Finish cookie banner implementation * (Add) checkbox's disabled style. * Removes redux for cookiesStorage * Fix cookieStore deletion * Fixs cookies acceptance * Fixs cookies banner verbiage Fix "x" in wrong place for snackbar messages * (remove) unused library * Adds cookies utils Replaces localStorage with cookies Adds js-cookie * (fix) added correct polished library and import, updated flow-typed * (update) removed polish flow type, added js-cookie flow type * Add link to cookie policy, use generic links for legal docs * Remove link to cookie policy from sidebar, link cookie policy in the banner * Let the user re-open the cookie banner * remove withMutations from cookies reducer, move utils/cookies to logic/cookies * Now the sidebar closes when the cookie banner is toggled * Feature #169: Intercom (#301) * Implements intercom Adds REACT_APP_INTERCOM_ID_MAINNET and REACT_APP_INTERCOM_ID_RINKEBY env vars * Adds .env.example * Adds intercom env vars * Updates env vars Replaces "rinkeby" and "mainnet" with "non-production" and "production" * Now loads intercom after the user accepted the analytics * Add env variable for production intercom id * Update .env.example * Removes react-intercom Fixs getIntercomId with default dev appID Now loads intercom as script * Renegerate flow-types * Remove 'Hide zero balances' (#310) * Use medium font size for 'select an asset' label (#312) * Feature #272: Google Analytics (#299) * Adds google analytics tracking for every route * Adds cookies acceptance check before tracking * Fix react-ga dependency * Fix cookieStore deletion * Merge with #189-cookie-banner * Fixs react ga version Refactored HOC with hooks * Fix TYPO * Fix path for cookies utils * Fix imports * remove flow type definition for polish * Add GA ID log * Fix load GA After cookies acceptance * Feature #224: Activate tokens automatically (#300) * Replace 'Manage Tokens' with 'Manage List' * prevent 301 redirects * Add `BLACKLISTED_TOKENS` key to persist through immortal * Add store/action to extract _activate tokens by its balance_ - keeps already activated tokens - discards blacklisted tokens - adds tokens whose vales are bigger than zero and are not blacklisted * Add `blacklistedTokens` list to safe's store * Display activeTokensByBalance in 'Balances' screen * Enable token's blacklisting functionality in Tokens List * Retrieve balance from API * Rename action to `activateTokensByBalance` * Fix linting errors - line too long - required return * Do not persist a separate list into `BLACKLISTED_TOKENS` * Typo fix (#326) * Fix security vulnerability: Remove uglifyjs, use terser plugin (#327) * Remove uglifyjs, use terser plugin * fix css-loader config * Feature #256: Sticky header (#308) * Add sticky header * Remove react-headroom, set position to fixed for header * Regenerate yarn lock * Remove unused headroom style from root.scss * Pull from dev, conflict fixes * Update welcome text (#323) * Feature #137: Tx list improvements (#222) * Fix swapOwners threshold displayed as hex in tx list * Refactor spinner in empty table * Fix number of rows per page in table pagination * Add use of EtherscanLink component * Set short version of strings in tx list * Adjust styles in tx list * Add more styles to table * WIP * An attempt to fix #204 by showing UNKNOWN instead of failed to fetch token symbol * Table pagination style fixes * Show confirm transaction button in owner list * Update dependencies * Add confirmation icons to owner list in tx list * exclude unneeded stuff from travis.yml * Adds cookie permissions to localStorage/redux state * Update dependencies * Adds action * Adds files to git * (fix) linting issues * (update) flow-typed * (update) .eslint and .flowconfig * (add) cookie banner * Finish cookie banner implementation * (Add) checkbox's disabled style. * Removes redux for cookiesStorage * Fix cookieStore deletion * Increase TO_EXP for bignumber.js * Fixs cookies acceptance * Fixs cookies banner verbiage Fix "x" in wrong place for snackbar messages * (fix) added correct polished library and import, updated flow-typed * (update) removed polish flow type, added js-cookie flow type * Add link to cookie policy, use generic links for legal docs * Remove link to cookie policy from sidebar, link cookie policy in the banner * Mock Safe creation transaction * Format code * Fix break statement * Remove deployment of storybook * Let the user re-open the cookie banner * Update tx status messages and visual confirmation progress * Fix svg in tx confirmation progress * Add styles to tx type in tx list * Replace nonce in tx list with tx id * Update opacity of cancelled tx * Fix short version of address * remove withMutations from cookies reducer, move utils/cookies to logic/cookies * Now the sidebar closes when the cookie banner is toggled * Fix styles in tx list * Add Pending status in tx description * (remove) unused library * Adds cookies utils Replaces localStorage with cookies Adds js-cookie * Set 25 rows per page in tx list by default * Align tx table * Adjust tx table and tx details borders * Fix fetching transactions to show Safe creation tx alone * Fix failed Safe creation transaction * Add styles to tx data * Refactor and fix owner list in transaction * Refactor use of theme variables * Remove storybook files * Update dependencies * Fix warnings * Fix dependencies * Update file-loader config * Fix owner colors in the tx confirmation progress * Fix transaction type icon height * Tx list adjustments * Update readme * (Feature) Etherscan button icon (#331) * (add) new open on etherscan button icon * (remove) unused asset * (fix) icon background * Feature #239: Replace early access label with network label (#311) * Remove early access label * Revert "Remove early access label" This reverts commit 34682f0f6d9c1974a6e45c2a31358864931d9c1e. * Replace early access label with network label * Capitalzie first letter of the network name * Adds threshold update on checkAndUpdateSafe (#320) * Feature #159: Pending transaction that requires user confirmation (#330) * Creates a new notification: waitingConfirmation Adds key as optional parameter for notification Implemented getAwaitingTransactions to get the transactions that needs to be confirmed by the current user Not fetchTransactions action also dispatch a notification for awaiting transactions Improved performance of routes/safe/container/index to avoid re-rendering * Removes notification logic on fetchTransactions Adds notificationsMiddleware * Moves fetchTransaction to container * Removes unused param on fetchTransactions * Fixs null safe check * Fixs middleware declaration * Removes lodash * Changes cancelled transaction detection logic * Feature #122: Multisig migration (#315) * Adds query-string package.json Parses query string on open layout * Implements load all the values on openSafe view from param querys * Adds query params validation * Moves query parse logic to open.jsx * Changes default no metamask component on open page * Replaces global isNaN * Fix threshold parsing validation * Updates the welcome component with new verbiage for open * Renames isOpenSafe to isOldMultisigMigration * Merge branch 'development' of https://github.com/gnosis/safe-react into 122-multisig-migration # Conflicts: # src/routes/open/components/Layout.jsx * Merge branch 'development' of https://github.com/gnosis/safe-react into 159-pending-transactions # Conflicts: # src/routes/safe/components/Transactions/index.jsx # yarn.lock * set anonymizeIp to true (#335) * Feature #180: Predict transaction nonce (#293) * Dep bump * Fetch transactions when safe view is mounted * eslint fix * Calculate new tx nonce from latest tx in service * Fix tx cancellation, allow passing nonce to createTransaction * dep bump * Refactor createTransaction/processTransaction to use object as argument * Adopting transactions table to new send tx flow with predicted nonces * dep bump, disable esModule in file-loader options after new v5 release * Don't show older tx annotation for already executed txs * sort tx by nonce * get new safe nonce after tx execution * Bugfixes * remove whitespace for showOlderTxAnnotation * Feature #329: Rename to Multisig (#334) * Rename to Multisig * migration text fix * replace safe for teams with multisig * Fixs race condition (#341) Fixs typo * (Feature) Incoming transactions (#333) * Add `blockNumber` to transactions model * Create `incomingTransaction` node in store and load it along with `transactions` * Add incoming transfers to the Transactions table * Rename `transactionHash` to `executionTxHash` for better incoming/outgoing txs unification in Transactions table * Add incoming transactions details * Add transaction type icon in table row * Add snackbar notification for incoming txs * Make incoming transaction snackbar to show on any tab * Use makeStyles hooks * Fix incoming amounts conversion from wei * Make concurrent promise calls * Use date to calculate transactions ids * Prevent repeating messages - also move logic to display snack bar into the notifications middleware * Merge transactions and incomingTxs to the transactions selector * Show 'Multiple incoming transfers' if they are more than 3 * Prevent incoming transactions snack bar for first-timer users * Set ID as the default order * Use constant for _incoming_ type * Feature #154: Fiat Balances (#290) * Adds DropdownCurrency Adds redux store for currencyValues Adds Value column on the assets table Adds mocked currency values * (add) base currency dropdown * (add) dropdown styles * Refactors data fetching of the balances list Now uses the endpoint * Fix column value styling * Adds support for ECB currency values * Fixs list overflow * Changes endpoint url Adds decimals for balance values * (fix) remove inline style * (add) currencies dropdown search field * (fix) list items' hover color * Implements filter search * Fix warning on dropdown template * Saves selected currency in localStorage * Remove spaces on curly braces Add alt Renames rowItem to cellItem Improves fetchCurrenciesRates handling * Removes withMutations * Removes middleware Export style to another file for dropdownCurrency * Adds classNames * Fix incomming transactions fetching (#346) * Feature: Activate fortmatic (#339) * Add fortmatic integration to web3connect * add fortmatic * Safe open form improvements: limit calling initContracts to 1 time * update .env.example * Feature #336: Confirmation required notification for non-owners fix (#338) * Refactors grantedSelector with isUserOwner function Checks if the user is owner of the safe before sending notification * Adds safeParamAddressFromStateSelector Refactors notificationsMiddleware with new selector * Remove old size check * safe notifications middleware fixes * add apt-get update to travis yml * (Fix) Incoming transactions inline-styles (#344) * Remove inline styles * Replace ternary with logical && operator * use cn as shortcut for classnames * Makes minMaxLength 2 to AddCustomToken (#363) * Fixs ETH display on balances list (#360) * Bug #348: Safelist entries get removed (#358) * Fix balances saved to localStorage not in format [tokenAdd, balance] but [balance] * Updates localStorage version value * Use submission instead of execution date to sort outgoing txs (#364) * Feature #190: Sidebar improvements (#347) * Change icons Adds checked icon * Adds safeParamAddressFromStateSelector for get current safe selected Implements check icon on sidebar * Remove overflow on sidebar Start alignments * Removes headerPlaceholder * Improves header * Improves header * Fix header style * use sameAddress function to check address eqaulity when fetching transactions (#365) --- package.json | 20 +- src/assets/icons/check.svg | 3 + src/assets/icons/shape.svg | 3 + .../components/SafeListHeader/index.jsx | 1 - .../Sidebar/SafeList/DefaultBadge.jsx | 19 +- src/components/Sidebar/SafeList/index.jsx | 27 +- src/components/Sidebar/index.jsx | 24 +- src/components/Sidebar/style.js | 13 +- .../store/actions/activateTokensByBalance.js | 17 +- .../Tokens/screens/AddCustomToken/index.jsx | 2 +- .../safe/components/Balances/dataFetcher.js | 60 +- .../Transactions/TxsTable/columns.js | 8 +- .../safe/store/actions/fetchTransactions.js | 8 +- src/routes/safe/store/selectors/index.js | 9 + src/theme/variables.js | 2 + src/utils/storage/index.js | 2 +- yarn.lock | 919 +++++------------- 17 files changed, 428 insertions(+), 709 deletions(-) create mode 100644 src/assets/icons/check.svg create mode 100644 src/assets/icons/shape.svg diff --git a/package.json b/package.json index eaca48e3..0cdb717f 100644 --- a/package.json +++ b/package.json @@ -31,18 +31,18 @@ "dependencies": { "@gnosis.pm/safe-contracts": "1.0.0", "@gnosis.pm/util-contracts": "2.0.4", - "@material-ui/core": "4.7.2", + "@material-ui/core": "4.8.0", "@material-ui/icons": "4.5.1", "@portis/web3": "^2.0.0-beta.45", "@testing-library/jest-dom": "4.2.4", - "@toruslabs/torus-embed": "0.2.9", + "@toruslabs/torus-embed": "0.2.10", "@walletconnect/web3-provider": "^1.0.0-beta.37", - "@welldone-software/why-did-you-render": "3.3.9", + "@welldone-software/why-did-you-render": "3.4.1", "axios": "0.19.0", "bignumber.js": "9.0.0", "connected-react-router": "6.6.1", - "date-fns": "2.8.1", "currency-flags": "^2.1.1", + "date-fns": "2.8.1", "dotenv": "^8.2.0", "ethereum-ens": "0.7.8", "final-form": "4.18.6", @@ -102,7 +102,7 @@ "@babel/preset-env": "7.7.6", "@babel/preset-flow": "7.7.4", "@babel/preset-react": "7.7.4", - "@testing-library/react": "9.3.3", + "@testing-library/react": "9.4.0", "autoprefixer": "9.7.3", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "10.0.3", @@ -113,7 +113,7 @@ "babel-plugin-transform-es3-property-literals": "^6.22.0", "babel-polyfill": "^6.26.0", "classnames": "^2.2.6", - "css-loader": "3.3.0", + "css-loader": "3.3.2", "detect-port": "^1.3.0", "eslint": "6.7.2", "eslint-config-airbnb": "18.0.1", @@ -125,7 +125,7 @@ "ethereumjs-abi": "0.6.8", "extract-text-webpack-plugin": "^4.0.0-beta.0", "file-loader": "5.0.2", - "flow-bin": "0.113.0", + "flow-bin": "0.114.0", "fs-extra": "8.1.0", "html-loader": "^0.5.5", "html-webpack-plugin": "^3.2.0", @@ -140,12 +140,12 @@ "prettier-eslint-cli": "5.0.0", "run-with-testrpc": "0.3.1", "style-loader": "1.0.1", - "terser-webpack-plugin": "2.2.3", - "truffle": "5.1.3", + "terser-webpack-plugin": "2.3.0", + "truffle": "5.1.4", "truffle-contract": "4.0.31", "truffle-solidity-loader": "0.1.32", "url-loader": "3.0.0", - "webpack": "4.41.2", + "webpack": "4.41.3", "webpack-bundle-analyzer": "3.6.0", "webpack-cli": "3.3.10", "webpack-dev-server": "3.9.0", diff --git a/src/assets/icons/check.svg b/src/assets/icons/check.svg new file mode 100644 index 00000000..e6440050 --- /dev/null +++ b/src/assets/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/shape.svg b/src/assets/icons/shape.svg new file mode 100644 index 00000000..318ccaba --- /dev/null +++ b/src/assets/icons/shape.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/Header/components/SafeListHeader/index.jsx b/src/components/Header/components/SafeListHeader/index.jsx index dafbf3da..46116b2b 100644 --- a/src/components/Header/components/SafeListHeader/index.jsx +++ b/src/components/Header/components/SafeListHeader/index.jsx @@ -45,7 +45,6 @@ const SafeListHeader = ({ safesCount }: Props) => { return ( Safes - {' '} {safesCount} diff --git a/src/components/Sidebar/SafeList/DefaultBadge.jsx b/src/components/Sidebar/SafeList/DefaultBadge.jsx index a0c441a5..76e31cb2 100644 --- a/src/components/Sidebar/SafeList/DefaultBadge.jsx +++ b/src/components/Sidebar/SafeList/DefaultBadge.jsx @@ -4,20 +4,23 @@ import { makeStyles } from '@material-ui/core/styles' import Img from '~/components/layout/Img' import Block from '~/components/layout/Block' import Paragraph from '~/components/layout/Paragraph' -import { primary, sm } from '~/theme/variables' -import StarIcon from './assets/star.svg' +import { primary, secondaryBackground, md } from '~/theme/variables' +import HomeIcon from '~/assets/icons/shape.svg' const useStyles = makeStyles({ container: { - background: primary, + background: secondaryBackground, padding: '5px', boxSizing: 'border-box', - width: '73px', + width: '76px', justifyContent: 'space-around', - marginLeft: sm, + marginLeft: md, color: '#fff', borderRadius: '3px', }, + defaultText: { + color: primary, + }, }) const DefaultBadge = () => { @@ -25,9 +28,9 @@ const DefaultBadge = () => { return ( - Star Icon - - default + Home Icon + + Default ) diff --git a/src/components/Sidebar/SafeList/index.jsx b/src/components/Sidebar/SafeList/index.jsx index 6f0dabd7..7fa92edf 100644 --- a/src/components/Sidebar/SafeList/index.jsx +++ b/src/components/Sidebar/SafeList/index.jsx @@ -12,18 +12,21 @@ import Paragraph from '~/components/layout/Paragraph' import ButtonLink from '~/components/layout/ButtonLink' import Identicon from '~/components/Identicon' import { - mediumFontSize, sm, secondary, primary, + mediumFontSize, sm, primary, disabled, md, } from '~/theme/variables' import { formatAmount } from '~/logic/tokens/utils/formatAmount' import { shortVersionOf, sameAddress } from '~/logic/wallets/ethAddresses' import { type Safe } from '~/routes/safe/store/models/safe' import { SAFELIST_ADDRESS } from '~/routes/routes' import DefaultBadge from './DefaultBadge' +import Img from '~/components/layout/Img' +import check from '~/assets/icons/check.svg' export const SIDEBAR_SAFELIST_ROW_TESTID = 'SIDEBAR_SAFELIST_ROW_TESTID' type SafeListProps = { safes: List, + currentSafe: string, onSafeClick: Function, setDefaultSafe: Function, defaultSafe: string, @@ -33,9 +36,12 @@ const useStyles = makeStyles({ icon: { marginRight: sm, }, + checkIcon: { + marginRight: '10px', + }, list: { overflow: 'hidden', - overflowY: 'scroll', + overflowY: 'hidden', padding: 0, height: '100%', }, @@ -50,21 +56,25 @@ const useStyles = makeStyles({ }, }, safeName: { - color: secondary, + color: primary, }, safeAddress: { - color: primary, + color: disabled, fontSize: mediumFontSize, }, makeDefaultBtn: { padding: 0, - marginLeft: sm, + marginLeft: md, visibility: 'hidden', }, + noIcon: { + visibility: 'hidden', + width: '28px', + }, }) const SafeList = ({ - safes, onSafeClick, setDefaultSafe, defaultSafe, + safes, onSafeClick, setDefaultSafe, defaultSafe, currentSafe, }: SafeListProps) => { const classes = useStyles() @@ -78,6 +88,11 @@ const SafeList = ({ data-testid={SIDEBAR_SAFELIST_ROW_TESTID} > + { sameAddress(currentSafe, safe.address) ? ( + + check + + ) :
placeholder
} diff --git a/src/components/Sidebar/index.jsx b/src/components/Sidebar/index.jsx index 0ecfe17d..5d6ea0eb 100644 --- a/src/components/Sidebar/index.jsx +++ b/src/components/Sidebar/index.jsx @@ -14,19 +14,21 @@ import Hairline from '~/components/layout/Hairline' import Row from '~/components/layout/Row' import { WELCOME_ADDRESS } from '~/routes/routes' import { type Safe } from '~/routes/safe/store/models/safe' -import { defaultSafeSelector } from '~/routes/safe/store/selectors' +import { + defaultSafeSelector, + safeParamAddressFromStateSelector, +} from '~/routes/safe/store/selectors' import setDefaultSafe from '~/routes/safe/store/actions/setDefaultSafe' import { sortedSafeListSelector } from './selectors' import SafeList from './SafeList' import LegalLinks from './LegalLinks' import useSidebarStyles from './style' - const { useState, useEffect, useMemo } = React type TSidebarContext = { isOpen: boolean, - toggleSidebar: Function, + toggleSidebar: Function } export const SidebarContext = React.createContext({ @@ -39,6 +41,7 @@ type SidebarProps = { safes: List, setDefaultSafeAction: Function, defaultSafe: string, + currentSafe: string } const filterBy = (filter: string, safes: List): List => safes.filter( @@ -48,7 +51,11 @@ const filterBy = (filter: string, safes: List): List => safes.filter ) const Sidebar = ({ - children, safes, setDefaultSafeAction, defaultSafe, + children, + safes, + setDefaultSafeAction, + defaultSafe, + currentSafe, }: SidebarProps) => { const [isOpen, setIsOpen] = useState(false) const [filter, setFilter] = useState('') @@ -97,7 +104,6 @@ const Sidebar = ({ classes={{ paper: classes.sidebarPaper }} ModalProps={{ onBackdropClick: toggleSidebar }} > -
-