From c6509eb5ca526aedff477b38d2b1a73c22d4bf61 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Thu, 17 Dec 2020 10:43:10 -0300 Subject: [PATCH 01/11] Avoid displaying notification for non updated owner --- .../ManageOwners/EditOwnerModal/index.tsx | 19 +++++++++---------- .../Settings/ManageOwners/index.tsx | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx index 26157c4b2d..a36354782e 100644 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx @@ -40,17 +40,18 @@ type OwnProps = { selectedOwnerName: string } -const EditOwnerComponent = ({ isOpen, onClose, ownerAddress, selectedOwnerName }: OwnProps): React.ReactElement => { +export const EditOwnerModal = ({ isOpen, onClose, ownerAddress, selectedOwnerName }: OwnProps): React.ReactElement => { const classes = useStyles() const dispatch = useDispatch() - const safeAddress = useSelector(safeParamAddressFromStateSelector) as string - const handleSubmit = (values) => { - const { ownerName } = values - - dispatch(editSafeOwner({ safeAddress, ownerAddress, ownerName })) - dispatch(addOrUpdateAddressBookEntry(makeAddressBookEntry({ address: ownerAddress, name: ownerName }))) - dispatch(enqueueSnackbar(NOTIFICATIONS.OWNER_NAME_CHANGE_EXECUTED_MSG)) + const safeAddress = useSelector(safeParamAddressFromStateSelector) + const handleSubmit = ({ ownerName }: { ownerName: string }): void => { + // Update the value only if the ownerName really changed + if (ownerName !== selectedOwnerName) { + dispatch(editSafeOwner({ safeAddress, ownerAddress, ownerName })) + dispatch(addOrUpdateAddressBookEntry(makeAddressBookEntry({ address: ownerAddress, name: ownerName }))) + dispatch(enqueueSnackbar(NOTIFICATIONS.OWNER_NAME_CHANGE_EXECUTED_MSG)) + } onClose() } @@ -120,5 +121,3 @@ const EditOwnerComponent = ({ isOpen, onClose, ownerAddress, selectedOwnerName } ) } - -export default EditOwnerComponent diff --git a/src/routes/safe/components/Settings/ManageOwners/index.tsx b/src/routes/safe/components/Settings/ManageOwners/index.tsx index be55767adb..df255ca53e 100644 --- a/src/routes/safe/components/Settings/ManageOwners/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/index.tsx @@ -9,7 +9,7 @@ import { List } from 'immutable' import RemoveOwnerIcon from '../assets/icons/bin.svg' import AddOwnerModal from './AddOwnerModal' -import EditOwnerModal from './EditOwnerModal' +import { EditOwnerModal } from './EditOwnerModal' import OwnerAddressTableCell from './OwnerAddressTableCell' import RemoveOwnerModal from './RemoveOwnerModal' import ReplaceOwnerModal from './ReplaceOwnerModal' From 90c8f87574118989aea7fbe501a8e05adf5118a5 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Thu, 17 Dec 2020 13:04:26 -0300 Subject: [PATCH 02/11] Remove old selector usage on welcome page --- .../welcome/components/{Layout.tsx => index.tsx} | 10 +++++----- src/routes/welcome/container/index.tsx | 12 ++++-------- src/routes/welcome/container/selector.ts | 7 ------- 3 files changed, 9 insertions(+), 20 deletions(-) rename src/routes/welcome/components/{Layout.tsx => index.tsx} (94%) delete mode 100644 src/routes/welcome/container/selector.ts diff --git a/src/routes/welcome/components/Layout.tsx b/src/routes/welcome/components/index.tsx similarity index 94% rename from src/routes/welcome/components/Layout.tsx rename to src/routes/welcome/components/index.tsx index 84d2b652e9..4407421c3d 100644 --- a/src/routes/welcome/components/Layout.tsx +++ b/src/routes/welcome/components/index.tsx @@ -16,6 +16,8 @@ import Link from 'src/components/layout/Link' import Block from 'src/components/layout/Block' import { LOAD_ADDRESS, OPEN_ADDRESS } from 'src/routes/routes' import { onConnectButtonClick } from 'src/components/ConnectButton' +import { useSelector } from 'react-redux' +import { providerNameSelector } from 'src/logic/wallets/store/selectors' const Wrapper = styled.div` display: flex; @@ -67,10 +69,10 @@ const StyledButtonLink = styled(ButtonLink)` type Props = { isOldMultisigMigration?: boolean - provider: any } -const Welcome = ({ isOldMultisigMigration, provider }: Props): React.ReactElement => { +export const WelcomeLayout = ({ isOldMultisigMigration }: Props): React.ReactElement => { + const provider = useSelector(providerNameSelector) return ( {/* Title */} @@ -125,7 +127,7 @@ const Welcome = ({ isOldMultisigMigration, provider }: Props): React.ReactElemen color="primary" variant="contained" onClick={onConnectButtonClick} - disabled={provider} + disabled={!!provider} data-testid="connect-btn" > @@ -187,5 +189,3 @@ const Welcome = ({ isOldMultisigMigration, provider }: Props): React.ReactElemen ) } - -export default Welcome diff --git a/src/routes/welcome/container/index.tsx b/src/routes/welcome/container/index.tsx index ba090dee8c..5bde9ea063 100644 --- a/src/routes/welcome/container/index.tsx +++ b/src/routes/welcome/container/index.tsx @@ -1,16 +1,12 @@ import * as React from 'react' -import { connect } from 'react-redux' - -import Layout from '../components/Layout' - -import selector from './selector' +import { WelcomeLayout } from 'src/routes/welcome/components/index' import Page from 'src/components/layout/Page' -const Welcome = ({ provider }) => ( +const Welcome = (): React.ReactElement => ( - + ) -export default connect(selector)(Welcome) +export default Welcome diff --git a/src/routes/welcome/container/selector.ts b/src/routes/welcome/container/selector.ts deleted file mode 100644 index bc2d05cee2..0000000000 --- a/src/routes/welcome/container/selector.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createStructuredSelector } from 'reselect' - -import { providerNameSelector } from 'src/logic/wallets/store/selectors' - -export default createStructuredSelector({ - provider: providerNameSelector, -}) From bf95fab6397b80a81a3c9ffc9ab85736421864be Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Thu, 17 Dec 2020 13:08:48 -0300 Subject: [PATCH 03/11] Remove provider props on WelcomeLayout Fix removing safe behaviour --- src/routes/open/components/Layout.tsx | 4 +-- .../Settings/RemoveSafeModal/index.tsx | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/routes/open/components/Layout.tsx b/src/routes/open/components/Layout.tsx index 45385f05e4..2bce38460e 100644 --- a/src/routes/open/components/Layout.tsx +++ b/src/routes/open/components/Layout.tsx @@ -17,7 +17,7 @@ import { getOwnerAddressBy, getOwnerNameBy, } from 'src/routes/open/components/fields' -import Welcome from 'src/routes/welcome/components/Layout' +import { WelcomeLayout } from 'src/routes/welcome/components/index' import { history } from 'src/store' import { secondary, sm } from 'src/theme/variables' import { networkSelector, providerNameSelector, userAccountSelector } from 'src/logic/wallets/store/selectors' @@ -138,7 +138,7 @@ export const Layout = (props: LayoutProps): React.ReactElement => { ) : ( - + )} ) diff --git a/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx b/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx index 5524ecd31d..d944115a74 100644 --- a/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx +++ b/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx @@ -21,6 +21,7 @@ import Row from 'src/components/layout/Row' import removeSafe from 'src/logic/safe/store/actions/removeSafe' import { safeNameSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { md, secondary } from 'src/theme/variables' +import { WELCOME_ADDRESS } from 'src/routes/routes' const openIconStyle = { height: md, @@ -29,14 +30,27 @@ const openIconStyle = { const useStyles = makeStyles(styles) -const RemoveSafeComponent = ({ isOpen, onClose }) => { +type RemoveSafeModalProps = { + isOpen: boolean + onClose: () => void +} + +export const RemoveSafeModal = ({ isOpen, onClose }: RemoveSafeModalProps): React.ReactElement => { const classes = useStyles() - const safeAddress = useSelector(safeParamAddressFromStateSelector) as string + const safeAddress = useSelector(safeParamAddressFromStateSelector) const safeName = useSelector(safeNameSelector) const dispatch = useDispatch() const explorerInfo = getExplorerInfo(safeAddress) const { url } = explorerInfo() + const onRemoveSafeHandler = () => { + dispatch(removeSafe(safeAddress)) + onClose() + // using native redirect in order to avoid problems in several components + // trying to access references of the removed safe. + window.location.href = `/#/${WELCOME_ADDRESS}` + } + return ( { + - - - - - {ownerAddress} - - - - - - - - - - - - - )} + + ) + }} )