mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Change over ImportToken stories to use controls instead of knobs, update props in stories (#14246)
This commit is contained in:
parent
1521e63913
commit
4f1cee4b87
31
ui/pages/import-token/README.mdx
Normal file
31
ui/pages/import-token/README.mdx
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { Story, Canvas, ArgsTable } from '@storybook/addon-docs';
|
||||||
|
|
||||||
|
import ImportToken from './import-token.component';
|
||||||
|
|
||||||
|
import testData from '../../../.storybook/test-data';
|
||||||
|
import configureStore from '../../store/store';
|
||||||
|
const store = configureStore(testData);
|
||||||
|
const { metamask } = store.getState();
|
||||||
|
|
||||||
|
export const PersonalAddress = () => <code>{metamask.selectedAddress}</code>
|
||||||
|
|
||||||
|
# ImportToken
|
||||||
|
|
||||||
|
The `ImportToken` component allows a user to import custom tokens in one of two ways:
|
||||||
|
1. By searching for one
|
||||||
|
2. By importing one by `Token Contract Address`
|
||||||
|
|
||||||
|
<Canvas>
|
||||||
|
<Story id="ui-pages-import-token-import-token-stories-js--default-story" />
|
||||||
|
</Canvas>
|
||||||
|
|
||||||
|
## Example inputs
|
||||||
|
|
||||||
|
An example input that works, to enable the `Add Custom Token` button is `0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`.
|
||||||
|
|
||||||
|
### Personal address error
|
||||||
|
To show the personal address detected error, input the address <PersonalAddress/> in the `Token Contract Address` field.
|
||||||
|
|
||||||
|
## Component API
|
||||||
|
|
||||||
|
<ArgsTable of={ImportToken} />
|
@ -36,19 +36,77 @@ class ImportToken extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
|
/**
|
||||||
|
* History object of the router.
|
||||||
|
*/
|
||||||
history: PropTypes.object,
|
history: PropTypes.object,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the state of `pendingTokens`, called when adding a token.
|
||||||
|
*/
|
||||||
setPendingTokens: PropTypes.func,
|
setPendingTokens: PropTypes.func,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current list of pending tokens to be added.
|
||||||
|
*/
|
||||||
pendingTokens: PropTypes.object,
|
pendingTokens: PropTypes.object,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear the list of pending tokens. Called when closing the modal.
|
||||||
|
*/
|
||||||
clearPendingTokens: PropTypes.func,
|
clearPendingTokens: PropTypes.func,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of already added tokens.
|
||||||
|
*/
|
||||||
tokens: PropTypes.array,
|
tokens: PropTypes.array,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identities/accounts that are currently added to the wallet.
|
||||||
|
*/
|
||||||
identities: PropTypes.object,
|
identities: PropTypes.object,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean flag that shows/hides the search tab.
|
||||||
|
*/
|
||||||
showSearchTab: PropTypes.bool.isRequired,
|
showSearchTab: PropTypes.bool.isRequired,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The most recent overview page route, which is 'navigated' to when closing the modal.
|
||||||
|
*/
|
||||||
mostRecentOverviewPage: PropTypes.string.isRequired,
|
mostRecentOverviewPage: PropTypes.string.isRequired,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The active chainId in use.
|
||||||
|
*/
|
||||||
chainId: PropTypes.string,
|
chainId: PropTypes.string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The rpc preferences to use for the current provider.
|
||||||
|
*/
|
||||||
rpcPrefs: PropTypes.object,
|
rpcPrefs: PropTypes.object,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of tokens available for search.
|
||||||
|
*/
|
||||||
tokenList: PropTypes.object,
|
tokenList: PropTypes.object,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean flag indicating whether token detection is enabled or not.
|
||||||
|
* When disabled, shows an information alert in the search tab informing the
|
||||||
|
* user of the availability of this feature.
|
||||||
|
*/
|
||||||
useTokenDetection: PropTypes.bool,
|
useTokenDetection: PropTypes.bool,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called to fetch information about the token standard and
|
||||||
|
* details, see `actions.js`.
|
||||||
|
*/
|
||||||
getTokenStandardAndDetails: PropTypes.func,
|
getTokenStandardAndDetails: PropTypes.func,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The currently selected active address.
|
||||||
|
*/
|
||||||
selectedAddress: PropTypes.string,
|
selectedAddress: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,15 +1,120 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { boolean } from '@storybook/addon-knobs';
|
|
||||||
|
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
import { action } from '@storybook/addon-actions';
|
||||||
|
import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
|
||||||
|
import configureStore from '../../store/store';
|
||||||
|
import testData from '../../../.storybook/test-data';
|
||||||
import ImportToken from './import-token.component';
|
import ImportToken from './import-token.component';
|
||||||
|
import README from './README.mdx';
|
||||||
|
|
||||||
|
const store = configureStore(testData);
|
||||||
|
const { metamask } = store.getState();
|
||||||
|
|
||||||
|
const {
|
||||||
|
frequentRpcListDetail,
|
||||||
|
identities,
|
||||||
|
pendingTokens,
|
||||||
|
selectedAddress,
|
||||||
|
tokenList,
|
||||||
|
tokens,
|
||||||
|
} = metamask;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
title: 'Pages/ImportToken',
|
title: 'Pages/ImportToken',
|
||||||
id: __filename,
|
id: __filename,
|
||||||
|
decorators: [(story) => <Provider store={store}>{story()}</Provider>],
|
||||||
|
component: ImportToken,
|
||||||
|
parameters: {
|
||||||
|
docs: {
|
||||||
|
page: README,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
argTypes: {
|
||||||
|
history: {
|
||||||
|
control: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setPendingTokens: {
|
||||||
|
action: 'setPendingTokens',
|
||||||
|
},
|
||||||
|
pendingTokens: {
|
||||||
|
control: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
clearPendingTokens: {
|
||||||
|
action: 'clearPendingTokens',
|
||||||
|
},
|
||||||
|
tokens: {
|
||||||
|
control: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
identities: {
|
||||||
|
control: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
showSearchTab: {
|
||||||
|
control: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mostRecentOverviewPage: {
|
||||||
|
control: {
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
chainId: {
|
||||||
|
control: {
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
rpcPrefs: {
|
||||||
|
control: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tokenList: {
|
||||||
|
control: {
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
useTokenDetection: {
|
||||||
|
control: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
getTokenStandardAndDetails: {
|
||||||
|
action: 'getTokenStandardAndDetails',
|
||||||
|
},
|
||||||
|
selectedAddress: {
|
||||||
|
control: {
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
args: {
|
||||||
|
history: {
|
||||||
|
push: action('history.push()'),
|
||||||
|
},
|
||||||
|
pendingTokens,
|
||||||
|
tokens,
|
||||||
|
identities,
|
||||||
|
showSearchTab: true,
|
||||||
|
mostRecentOverviewPage: DEFAULT_ROUTE,
|
||||||
|
chainId: frequentRpcListDetail[0].chainId,
|
||||||
|
rpcPrefs: frequentRpcListDetail[0].rpcPrefs,
|
||||||
|
tokenList,
|
||||||
|
useTokenDetection: false,
|
||||||
|
selectedAddress,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const DefaultStory = () => {
|
export const DefaultStory = (args) => {
|
||||||
return <ImportToken showSearchTab={boolean('Show Search Tab', false)} />;
|
return <ImportToken {...args} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
DefaultStory.storyName = 'Default';
|
DefaultStory.storyName = 'Default';
|
||||||
|
Loading…
Reference in New Issue
Block a user