diff --git a/ui/pages/confirmations/confirm/confirm.stories.tsx b/ui/pages/confirmations/confirm/confirm.stories.tsx index 7062fb49201f..3e428eba997f 100644 --- a/ui/pages/confirmations/confirm/confirm.stories.tsx +++ b/ui/pages/confirmations/confirm/confirm.stories.tsx @@ -1,27 +1,96 @@ import React from 'react'; import { Provider } from 'react-redux'; -import configureStore from '../../../store/store'; +import { cloneDeep } from 'lodash'; +import { unapprovedPersonalSignMsg, signatureRequestSIWE } from '../../../../test/data/confirmations/personal_sign'; +import { unapprovedTypedSignMsgV1, unapprovedTypedSignMsgV4, permitSignatureMsg } from '../../../../test/data/confirmations/typed_sign'; import mockState from '../../../../test/data/mock-state.json'; +import configureStore from '../../../store/store'; import ConfirmPage from './confirm'; -const store = configureStore({ - confirm: { - currentConfirmation: { - type: 'personal_sign', - }, - }, - metamask: { - ...mockState.metamask, - }, -}); - +/** + * @note When we extend this storybook page to support more confirmation types, + * consider creating a new storybook pages. + */ const ConfirmPageStory = { title: 'Pages/Confirm/ConfirmPage', - decorators: [(story) => {story()}], + decorators: [(story) =>
{story()}
], +} + +const ARGS_SIGNATURE = { + msgParams: { ...unapprovedPersonalSignMsg.msgParams }, +} + +const ARG_TYPES_SIGNATURE = { + msgParams: { + control: 'object', + description: '(non-param) overrides currentConfirmation.msgParams', + }, +} + +function SignatureStoryTemplate(args, confirmation) { + const mockConfirmation = cloneDeep(confirmation); + mockConfirmation.msgParams = args.msgParams; + + const store = configureStore({ + confirm: { + currentConfirmation: mockConfirmation, + }, + metamask: { ...mockState.metamask }, + }); + + return ; +} + +export const PersonalSignStory = (args) => { + return SignatureStoryTemplate(args, unapprovedPersonalSignMsg); }; -export const DefaultStory = (args) => ; +PersonalSignStory.storyName = 'Personal Sign'; +PersonalSignStory.argTypes = ARG_TYPES_SIGNATURE; +PersonalSignStory.args = ARGS_SIGNATURE; -DefaultStory.storyName = 'Default'; +export const SignInWithEthereumSIWEStory = (args) => { + return SignatureStoryTemplate(args, signatureRequestSIWE); +}; + +SignInWithEthereumSIWEStory.storyName = 'Sign-in With Ethereum (SIWE)'; +SignInWithEthereumSIWEStory.argTypes = ARG_TYPES_SIGNATURE; +SignInWithEthereumSIWEStory.args = { + ...ARGS_SIGNATURE, + msgParams: signatureRequestSIWE.msgParams, +}; + +export const SignTypedDataStory = (args) => { + return SignatureStoryTemplate(args, unapprovedTypedSignMsgV1); +}; + +SignTypedDataStory.storyName = 'SignTypedData'; +SignTypedDataStory.argTypes = ARG_TYPES_SIGNATURE; +SignTypedDataStory.args = { + ...ARGS_SIGNATURE, + msgParams: unapprovedTypedSignMsgV1.msgParams, +}; + +export const PermitStory = (args) => { + return SignatureStoryTemplate(args, permitSignatureMsg); +}; + +PermitStory.storyName = 'SignTypedData Permit'; +PermitStory.argTypes = ARG_TYPES_SIGNATURE; +PermitStory.args = { + ...ARGS_SIGNATURE, + msgParams: permitSignatureMsg.msgParams, +}; + +export const SignTypedDataV4Story = (args) => { + return SignatureStoryTemplate(args, unapprovedTypedSignMsgV4); +}; + +SignTypedDataV4Story.storyName = 'SignTypedData V4'; +SignTypedDataV4Story.argTypes = ARG_TYPES_SIGNATURE; +SignTypedDataV4Story.args = { + ...ARGS_SIGNATURE, + msgParams: unapprovedTypedSignMsgV4.msgParams, +}; export default ConfirmPageStory;