From 0d1485db6b263eed1325143ff1ee8995dec11488 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 1 Sep 2019 16:07:52 +0200 Subject: [PATCH] Replace with* with useContext as applicable (#135) --- .../src/Popup/Accounts/Account.tsx | 14 ++-- .../extension-ui/src/Popup/Accounts/index.tsx | 14 ++-- .../src/Popup/Authorize/Request.tsx | 13 ++-- .../src/Popup/Authorize/index.tsx | 14 ++-- packages/extension-ui/src/Popup/Create.tsx | 15 ++-- packages/extension-ui/src/Popup/Forget.tsx | 15 ++-- packages/extension-ui/src/Popup/Import.tsx | 15 ++-- .../src/Popup/Signing/Request.tsx | 11 ++- .../extension-ui/src/Popup/Signing/index.tsx | 14 ++-- packages/extension-ui/src/Popup/Welcome.tsx | 15 ++-- .../extension-ui/src/components/Address.tsx | 13 ++-- .../extension-ui/src/components/contexts.tsx | 70 +------------------ packages/extension-ui/src/partials/Name.tsx | 12 ++-- 13 files changed, 60 insertions(+), 175 deletions(-) diff --git a/packages/extension-ui/src/Popup/Accounts/Account.tsx b/packages/extension-ui/src/Popup/Accounts/Account.tsx index 042eb012..c73cc763 100644 --- a/packages/extension-ui/src/Popup/Accounts/Account.tsx +++ b/packages/extension-ui/src/Popup/Accounts/Account.tsx @@ -2,22 +2,20 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { OnActionFromCtx } from '../../components/types'; - -import React, { useState } from 'react'; +import React, { useContext, useState } from 'react'; import styled from 'styled-components'; -import { ActionBar, Address, Link, withOnAction } from '../../components'; +import { ActionBar, ActionContext, Address, Link } from '../../components'; import { editAccount } from '../../messaging'; import { Name } from '../../partials'; interface Props { address: string; className?: string; - onAction: OnActionFromCtx; } -function Account ({ address, className, onAction }: Props): React.ReactElement { +function Account ({ address, className }: Props): React.ReactElement { + const onAction = useContext(ActionContext); const [isEditing, setEditing] = useState(false); const [editedName, setName] = useState(null); @@ -56,11 +54,11 @@ function Account ({ address, className, onAction }: Props): React.ReactElement

{ + const accounts = useContext(AccountContext); -function Accounts ({ accounts }: Props): React.ReactElement { return (

{
); } - -export default withAccounts(Accounts); diff --git a/packages/extension-ui/src/Popup/Authorize/Request.tsx b/packages/extension-ui/src/Popup/Authorize/Request.tsx index 083ea729..94786d08 100644 --- a/packages/extension-ui/src/Popup/Authorize/Request.tsx +++ b/packages/extension-ui/src/Popup/Authorize/Request.tsx @@ -3,24 +3,23 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { MessageAuthorize } from '@polkadot/extension/background/types'; -import { OnActionFromCtx } from '../../components/types'; -import React from 'react'; +import React, { useContext } from 'react'; import styled from 'styled-components'; -import { ActionBar, Button, Icon, IconBox, Link, Tip, defaults, withOnAction } from '../../components'; +import { ActionBar, ActionContext, Button, Icon, IconBox, Link, Tip, defaults } from '../../components'; import { approveAuthRequest, rejectAuthRequest } from '../../messaging'; interface Props { authId: string; className?: string; isFirst: boolean; - onAction: OnActionFromCtx; request: MessageAuthorize; url: string; } -function Request ({ authId, className, isFirst, onAction, request: { origin }, url }: Props): React.ReactElement { +function Request ({ authId, className, isFirst, request: { origin }, url }: Props): React.ReactElement { + const onAction = useContext(ActionContext); const onApprove = (): Promise => approveAuthRequest(authId) .then((): void => onAction()) @@ -59,7 +58,7 @@ function Request ({ authId, className, isFirst, onAction, request: { origin }, u ); } -export default withOnAction(styled(Request)` +export default styled(Request)` .icon { background: ${defaults.btnBgDanger}; color: ${defaults.btnColorDanger}; @@ -78,4 +77,4 @@ export default withOnAction(styled(Request)` text-overflow: ellipsis; vertical-align: top; } -`); +`; diff --git a/packages/extension-ui/src/Popup/Authorize/index.tsx b/packages/extension-ui/src/Popup/Authorize/index.tsx index de6b4157..a3d137fe 100644 --- a/packages/extension-ui/src/Popup/Authorize/index.tsx +++ b/packages/extension-ui/src/Popup/Authorize/index.tsx @@ -2,18 +2,14 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { AuthRequestsFromCtx } from '../../components/types'; +import React, { useContext } from 'react'; -import React from 'react'; - -import { Header, withAuthRequests } from '../../components'; +import { AuthorizeContext, Header } from '../../components'; import Request from './Request'; -interface Props { - requests: AuthRequestsFromCtx; -} +export default function Authorize (): React.ReactElement<{}> { + const requests = useContext(AuthorizeContext); -function Authorize ({ requests }: Props): React.ReactElement { return (
@@ -29,5 +25,3 @@ function Authorize ({ requests }: Props): React.ReactElement {
); } - -export default withAuthRequests(Authorize); diff --git a/packages/extension-ui/src/Popup/Create.tsx b/packages/extension-ui/src/Popup/Create.tsx index 98a5e775..e0180744 100644 --- a/packages/extension-ui/src/Popup/Create.tsx +++ b/packages/extension-ui/src/Popup/Create.tsx @@ -2,19 +2,16 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { OnActionFromCtx } from '../components/types'; +import React, { useContext, useEffect, useState } from 'react'; -import React, { useState, useEffect } from 'react'; - -import { Address, Button, Header, Loading, TextArea, withOnAction } from '../components'; +import { ActionContext, Address, Button, Header, Loading, TextArea } from '../components'; import { createAccount, createSeed } from '../messaging'; import { Back, Name, Password } from '../partials'; -interface Props { - onAction: OnActionFromCtx; -} +type Props = {}; -function Create ({ onAction }: Props): React.ReactElement { +export default function Create (): React.ReactElement { + const onAction = useContext(ActionContext); const [account, setAccount] = useState(null); const [name, setName] = useState(null); const [password, setPassword] = useState(null); @@ -67,5 +64,3 @@ function Create ({ onAction }: Props): React.ReactElement { ); } - -export default withOnAction(Create); diff --git a/packages/extension-ui/src/Popup/Forget.tsx b/packages/extension-ui/src/Popup/Forget.tsx index 332e8c6f..e8ebb967 100644 --- a/packages/extension-ui/src/Popup/Forget.tsx +++ b/packages/extension-ui/src/Popup/Forget.tsx @@ -2,20 +2,17 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { OnActionFromCtx } from '../components/types'; - -import React from 'react'; +import React, { useContext } from 'react'; import { RouteComponentProps, withRouter } from 'react-router'; -import { Address, Button, Header, Tip, withOnAction } from '../components'; +import { ActionContext, Address, Button, Header, Tip } from '../components'; import { forgetAccount } from '../messaging'; import { Back } from '../partials'; -interface Props extends RouteComponentProps<{ address: string }> { - onAction: OnActionFromCtx; -} +type Props = RouteComponentProps<{ address: string }>; -function Forget ({ match: { params: { address } }, onAction }: Props): React.ReactElement { +function Forget ({ match: { params: { address } } }: Props): React.ReactElement { + const onAction = useContext(ActionContext); const onClick = (): Promise => forgetAccount(address) .then((): void => onAction('/')) @@ -37,4 +34,4 @@ function Forget ({ match: { params: { address } }, onAction }: Props): React.Rea ); } -export default withOnAction(withRouter(Forget)); +export default withRouter(Forget); diff --git a/packages/extension-ui/src/Popup/Import.tsx b/packages/extension-ui/src/Popup/Import.tsx index ff081729..85e62a06 100644 --- a/packages/extension-ui/src/Popup/Import.tsx +++ b/packages/extension-ui/src/Popup/Import.tsx @@ -2,19 +2,16 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { OnActionFromCtx } from '../components/types'; +import React, { useContext, useState } from 'react'; -import React, { useState } from 'react'; - -import { Address, Button, Header, TextArea, withOnAction } from '../components'; +import { ActionContext, Address, Button, Header, TextArea } from '../components'; import { createAccount, validateSeed } from '../messaging'; import { Back, Name, Password } from '../partials'; -interface Props { - onAction: OnActionFromCtx; -} +type Props = {}; -function Import ({ onAction }: Props): React.ReactElement { +export default function Import (): React.ReactElement { + const onAction = useContext(ActionContext); const [account, setAccount] = useState(null); const [name, setName] = useState(null); const [password, setPassword] = useState(null); @@ -60,5 +57,3 @@ function Import ({ onAction }: Props): React.ReactElement { ); } - -export default withOnAction(Import); diff --git a/packages/extension-ui/src/Popup/Signing/Request.tsx b/packages/extension-ui/src/Popup/Signing/Request.tsx index 7347f02e..dfdd1a94 100644 --- a/packages/extension-ui/src/Popup/Signing/Request.tsx +++ b/packages/extension-ui/src/Popup/Signing/Request.tsx @@ -3,25 +3,24 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { MessageExtrinsicSign } from '@polkadot/extension/background/types'; -import { OnActionFromCtx } from '../../components/types'; -import React from 'react'; +import React, { useContext } from 'react'; import { createType } from '@polkadot/types'; -import { ActionBar, Address, Link, withOnAction } from '../../components'; +import { ActionBar, ActionContext, Address, Link } from '../../components'; import { approveSignRequest, cancelSignRequest } from '../../messaging'; import Details from './Details'; import Unlock from './Unlock'; interface Props { isFirst: boolean; - onAction: OnActionFromCtx; request: MessageExtrinsicSign; signId: string; url: string; } -function Request ({ isFirst, onAction, request, signId, url }: Props): React.ReactElement { +export default function Request ({ isFirst, request, signId, url }: Props): React.ReactElement { + const onAction = useContext(ActionContext); const onCancel = (): Promise => cancelSignRequest(signId) .then((): void => onAction()) @@ -49,5 +48,3 @@ function Request ({ isFirst, onAction, request, signId, url }: Props): React.Rea ); } - -export default withOnAction(Request); diff --git a/packages/extension-ui/src/Popup/Signing/index.tsx b/packages/extension-ui/src/Popup/Signing/index.tsx index 785d8507..04703e5a 100644 --- a/packages/extension-ui/src/Popup/Signing/index.tsx +++ b/packages/extension-ui/src/Popup/Signing/index.tsx @@ -2,18 +2,14 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { SignRequestsFromCtx } from '../../components/types'; +import React, { useContext } from 'react'; -import React from 'react'; - -import { Header, withSignRequests } from '../../components'; +import { Header, SigningContext } from '../../components'; import Request from './Request'; -interface Props { - requests: SignRequestsFromCtx; -} +export default function Signing (): React.ReactElement<{}> { + const requests = useContext(SigningContext); -function Signing ({ requests }: Props): React.ReactElement { return (
@@ -29,5 +25,3 @@ function Signing ({ requests }: Props): React.ReactElement {
); } - -export default withSignRequests(Signing); diff --git a/packages/extension-ui/src/Popup/Welcome.tsx b/packages/extension-ui/src/Popup/Welcome.tsx index 19fb49f5..fac35e2d 100644 --- a/packages/extension-ui/src/Popup/Welcome.tsx +++ b/packages/extension-ui/src/Popup/Welcome.tsx @@ -2,17 +2,14 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { OnActionFromCtx } from '../components/types'; +import React, { useContext } from 'react'; -import React from 'react'; +import { ActionContext, Box, Button, Header } from '../components'; -import { Box, Button, Header, withOnAction } from '../components'; +type Props = {}; -interface Props { - onAction: OnActionFromCtx; -} - -function Welcome ({ onAction }: Props): React.ReactElement { +export default function Welcome (): React.ReactElement { + const onAction = useContext(ActionContext); const onClick = (): void => { window.localStorage.setItem('welcome_read', 'ok'); onAction(); @@ -37,5 +34,3 @@ function Welcome ({ onAction }: Props): React.ReactElement { ); } - -export default withOnAction(Welcome); diff --git a/packages/extension-ui/src/components/Address.tsx b/packages/extension-ui/src/components/Address.tsx index 38b07ee7..368db0c8 100644 --- a/packages/extension-ui/src/components/Address.tsx +++ b/packages/extension-ui/src/components/Address.tsx @@ -4,19 +4,17 @@ import { KeyringJson } from '@polkadot/ui-keyring/types'; import { Prefix } from '@polkadot/util-crypto/address/types'; -import { AccountsFromCtx } from './types'; -import React, { useState, useEffect } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import styled from 'styled-components'; import Identicon from '@polkadot/react-identicon'; import settings from '@polkadot/ui-settings'; import IconBox from './IconBox'; -import { withAccounts } from './contexts'; +import { AccountContext } from './contexts'; import { decodeAddress, encodeAddress } from '@polkadot/util-crypto'; interface Props { - accounts: AccountsFromCtx; address?: string | null; children?: React.ReactNode; className?: string; @@ -24,7 +22,8 @@ interface Props { theme?: 'polkadot' | 'substrate'; } -function Address ({ accounts, address, children, className, name, theme = 'polkadot' }: Props): React.ReactElement { +function Address ({ address, children, className, name, theme = 'polkadot' }: Props): React.ReactElement { + const accounts = useContext(AccountContext); const [account, setAccount] = useState(null); const [formatted, setFormatted] = useState(null); @@ -69,7 +68,7 @@ function Address ({ accounts, address, children, className, name, theme = 'polka ); } -export default withAccounts(styled(Address)` +export default styled(Address)` .address { opacity: 0.5; overflow: hidden; @@ -79,4 +78,4 @@ export default withAccounts(styled(Address)` .name { padding-bottom: 0.5rem; } -`); +`; diff --git a/packages/extension-ui/src/components/contexts.tsx b/packages/extension-ui/src/components/contexts.tsx index d15e4404..e77a8f2f 100644 --- a/packages/extension-ui/src/components/contexts.tsx +++ b/packages/extension-ui/src/components/contexts.tsx @@ -2,7 +2,7 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { AccountsFromCtx, OnActionFromCtx, AuthRequestsFromCtx, SignRequestsFromCtx, SubtractProps } from './types'; +import { AccountsFromCtx, OnActionFromCtx, AuthRequestsFromCtx, SignRequestsFromCtx } from './types'; import React from 'react'; @@ -22,71 +22,3 @@ export { AuthorizeContext, SigningContext }; - -export function withAccounts

(Component: React.ComponentType

): React.ComponentType> { - // eslint-disable-next-line react/display-name,@typescript-eslint/explicit-function-return-type - return (props: SubtractProps) => { - return ( - - {(accounts): React.ReactNode => ( - - )} - - ); - }; -} - -export function withOnAction

(Component: React.ComponentType

): React.ComponentType> { - // eslint-disable-next-line react/display-name,@typescript-eslint/explicit-function-return-type - return (props: SubtractProps) => { - return ( - - {(onAction): React.ReactNode => ( - - )} - - ); - }; -} - -export function withAuthRequests

(Component: React.ComponentType

): React.ComponentType> { - // eslint-disable-next-line react/display-name,@typescript-eslint/explicit-function-return-type - return (props: SubtractProps) => { - return ( - - {(requests): React.ReactNode => ( - - )} - - ); - }; -} - -export function withSignRequests

(Component: React.ComponentType

): React.ComponentType> { - // eslint-disable-next-line react/display-name,@typescript-eslint/explicit-function-return-type - return (props: SubtractProps) => { - return ( - - {(requests): React.ReactNode => ( - - )} - - ); - }; -} diff --git a/packages/extension-ui/src/partials/Name.tsx b/packages/extension-ui/src/partials/Name.tsx index 2598fa5f..5ea74983 100644 --- a/packages/extension-ui/src/partials/Name.tsx +++ b/packages/extension-ui/src/partials/Name.tsx @@ -2,14 +2,11 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { AccountsFromCtx } from '../components/types'; +import React, { useContext, useEffect, useState } from 'react'; -import React, { useEffect, useState } from 'react'; - -import { Input, withAccounts } from '../components'; +import { AccountContext, Input } from '../components'; interface Props { - accounts: AccountsFromCtx; address?: string; className?: string; defaultValue?: string | null; @@ -21,7 +18,8 @@ interface Props { const MIN_LENGTH = 3; -function Name ({ accounts, address, className, defaultValue, isFocussed, label = 'a descriptive name for this account', onBlur, onChange }: Props): React.ReactElement { +export default function Name ({ address, className, defaultValue, isFocussed, label = 'a descriptive name for this account', onBlur, onChange }: Props): React.ReactElement { + const accounts = useContext(AccountContext); const [name, setName] = useState(''); const account = accounts.find((account): boolean => account.address === address); const startValue = (account && account.meta.name) || defaultValue; @@ -50,5 +48,3 @@ function Name ({ accounts, address, className, defaultValue, isFocussed, label = /> ); } - -export default withAccounts(Name);