import React from 'react'; import { storiesOf } from '@storybook/react-native'; import { AuthChallengeName, CodeDeliveryDetails } from '@aws-amplify/ui'; import { GetTotpSecretCode } from '@aws-amplify/ui-react-core/src/Authenticator/hooks'; import { InnerContainer, DefaultContainer, } from '@aws-amplify/ui-react-native/src/Authenticator/common'; import { Authenticator } from '@aws-amplify/ui-react-native'; import noop from 'lodash/noop'; const componentFields = { code: { name: 'code', label: 'Code', placeholder: 'Code', type: 'default' as const, }, confirmPassword: { name: 'confirmPassword', label: 'Confirm Password', placeholder: 'Confirm Password', type: 'password' as const, }, newPassword: { name: 'newPassword', label: 'New Password', placeholder: 'New Password', type: 'password' as const, }, password: { name: 'password', label: 'Password', placeholder: 'Password', type: 'password' as const, }, phone: { name: 'phone', label: 'Phone', placeholder: 'Phone', type: 'phone' as const, }, username: { name: 'username', label: 'Username', placeholder: 'Username', type: 'default' as const, }, }; type Fields = keyof typeof componentFields; const getComponentFields = (fields: Fields[]) => { return { fields: fields.map((field) => componentFields[field]), }; }; const getComponentSlots = (subcomponent: any) => { return { Footer: subcomponent.Footer, FormFields: subcomponent.FormFields, Header: subcomponent.Header, }; }; const sharedProps = { error: null as unknown as string, handleBlur: noop, handleChange: noop, handleSubmit: (values: any) => { console.log('Values', values); }, isPending: false, }; const confirmResetPasswordProps = { ...sharedProps, ...getComponentFields(['code', 'newPassword', 'confirmPassword']), ...getComponentSlots(Authenticator.ConfirmResetPassword), resendCode: noop, }; const confirmSignInProps = { ...sharedProps, ...getComponentFields(['code']), ...getComponentSlots(Authenticator.ConfirmSignIn), challengeName: 'SMS_MFA' as AuthChallengeName, toSignIn: noop, }; const confirmSignUpProps = { ...sharedProps, ...getComponentFields(['code']), ...getComponentSlots(Authenticator.ConfirmSignUp), codeDeliveryDetails: { AttributeName: 'email', DeliveryMedium: 'EMAIL', Destination: 'a***@e***.com', } as CodeDeliveryDetails, resendCode: noop, }; const confirmVerifyUserProps = { ...sharedProps, ...getComponentFields(['username']), ...getComponentSlots(Authenticator.ConfirmResetPassword), skipVerification: noop, }; const forceNewPasswordProps = { ...sharedProps, ...getComponentFields(['newPassword', 'confirmPassword']), ...getComponentSlots(Authenticator.ForceNewPassword), toSignIn: noop, }; const resetPasswordProps = { ...sharedProps, ...getComponentFields(['username']), ...getComponentSlots(Authenticator.ResetPassword), toSignIn: noop, }; const setupTOTPProps = { ...sharedProps, ...getComponentFields(['code']), ...getComponentSlots(Authenticator.SetupTOTP), getTotpSecretCode: noop as GetTotpSecretCode, toSignIn: noop, }; const signInProps = { ...sharedProps, ...getComponentFields(['username', 'password']), ...getComponentSlots(Authenticator.SignIn), toFederatedSignIn: noop, toResetPassword: noop, toSignUp: noop, }; const signUpProps = { ...sharedProps, ...getComponentFields(['username', 'password', 'confirmPassword', 'phone']), ...getComponentSlots(Authenticator.SignUp), toFederatedSignIn: noop, toSignIn: noop, }; const verifyUserProps = { ...sharedProps, ...getComponentSlots(Authenticator.VerifyUser), fields: [ { name: 'email', type: 'radio' as const, value: 'jeff@example.com' }, ], skipVerification: noop, }; storiesOf('Authenticator', module) .addDecorator((Story: any) => ( )) .add('ConfirmResetPassword', () => ( )) .add('ConfirmSignIn', () => ( )) .add('ConfirmSignUp', () => ( )) .add('ConfirmVerifyUser', () => ( )) .add('ForceNewPassword', () => ( )) .add('ResetPassword', () => ( )) .add('SetupTOTP', () => ) .add('SignIn', () => ) .add('SignUp', () => ) .add('VerifyUser', () => );