From 3563e93a3b2411c49be5d31e64cb28aa56393e1c Mon Sep 17 00:00:00 2001 From: Loan Laux Date: Tue, 27 Apr 2021 17:23:44 +0400 Subject: [PATCH] implement sign-up Signed-off-by: Loan Laux --- framework/reactioncommerce/auth/use-login.tsx | 9 +--- .../reactioncommerce/auth/use-signup.tsx | 51 +++++++------------ .../customer/get-viewer-id.ts | 2 +- .../utils/mutations/create-user.ts | 13 +++++ .../utils/mutations/customer-create.ts | 15 ------ .../reactioncommerce/utils/mutations/index.ts | 2 +- ...mer-id-query.ts => get-viewer-id-query.ts} | 0 7 files changed, 34 insertions(+), 58 deletions(-) create mode 100644 framework/reactioncommerce/utils/mutations/create-user.ts delete mode 100644 framework/reactioncommerce/utils/mutations/customer-create.ts rename framework/reactioncommerce/utils/queries/{get-customer-id-query.ts => get-viewer-id-query.ts} (100%) diff --git a/framework/reactioncommerce/auth/use-login.tsx b/framework/reactioncommerce/auth/use-login.tsx index d5afeebb2..fb1fd22fe 100644 --- a/framework/reactioncommerce/auth/use-login.tsx +++ b/framework/reactioncommerce/auth/use-login.tsx @@ -7,7 +7,7 @@ import { CustomerAccessTokenCreateInput, CustomerUserError, Mutation, - MutationCheckoutCreateArgs, + MutationAuthenticateArgs, } from '../schema' import useLogin, { UseLogin } from '@commerce/auth/use-login' import { setCustomerToken } from '../utils' @@ -37,7 +37,7 @@ export const handler: MutationHook = { console.log('querying API') - const { authenticate } = await fetch({ + const { authenticate } = await fetch({ ...options, variables: { serviceName: 'password', @@ -45,11 +45,6 @@ export const handler: MutationHook = { }, }) - // if (errors && errors.length) { - // throw new ValidationError({ - // message: getErrorMessage(errors[0].message), - // }) - // } const accessToken = authenticate?.tokens?.accessToken console.log('accessToken', accessToken) diff --git a/framework/reactioncommerce/auth/use-signup.tsx b/framework/reactioncommerce/auth/use-signup.tsx index 0331acc56..72ee60767 100644 --- a/framework/reactioncommerce/auth/use-signup.tsx +++ b/framework/reactioncommerce/auth/use-signup.tsx @@ -2,62 +2,45 @@ import { useCallback } from 'react' import type { MutationHook } from '@commerce/utils/types' import { CommerceError } from '@commerce/utils/errors' import useSignup, { UseSignup } from '@commerce/auth/use-signup' +import { setCustomerToken } from '@framework/utils' +import { createUserMutation } from '@framework/utils/mutations' import useCustomer from '../customer/use-customer' -import { CustomerCreateInput } from '../schema' - -import { - customerCreateMutation, - authenticateMutation, -} from '../utils/mutations' -import handleLogin from '../utils/handle-login' +import { CreateUserInput } from '../schema' export default useSignup as UseSignup export const handler: MutationHook< null, {}, - CustomerCreateInput, - CustomerCreateInput + CreateUserInput, + CreateUserInput > = { fetchOptions: { - query: customerCreateMutation, + query: createUserMutation, }, - async fetcher({ - input: { firstName, lastName, email, password }, - options, - fetch, - }) { - if (!(firstName && lastName && email && password)) { + async fetcher({ input: { email, password }, options, fetch }) { + if (!(email && password)) { throw new CommerceError({ - message: - 'A first name, last name, email and password are required to signup', + message: 'An email and password are required to sign up', }) } - const data = await fetch({ + const { createUser } = await fetch({ ...options, variables: { input: { - firstName, - lastName, email, password, }, }, }) - try { - const loginData = await fetch({ - query: authenticateMutation, - variables: { - input: { - email, - password, - }, - }, - }) - handleLogin(loginData) - } catch (error) {} - return data + const accessToken = createUser?.loginResult?.tokens?.accessToken + + if (accessToken) { + setCustomerToken(accessToken) + } + + return createUser }, useHook: ({ fetch }) => () => { const { revalidate } = useCustomer() diff --git a/framework/reactioncommerce/customer/get-viewer-id.ts b/framework/reactioncommerce/customer/get-viewer-id.ts index 734f30831..5e3a5fabe 100644 --- a/framework/reactioncommerce/customer/get-viewer-id.ts +++ b/framework/reactioncommerce/customer/get-viewer-id.ts @@ -1,5 +1,5 @@ import { getConfig, ReactionCommerceConfig } from '../api' -import getViewerIdQuery from '../utils/queries/get-customer-id-query' +import getViewerIdQuery from '../utils/queries/get-viewer-id-query' async function getViewerId({ customerToken: customerAccessToken, diff --git a/framework/reactioncommerce/utils/mutations/create-user.ts b/framework/reactioncommerce/utils/mutations/create-user.ts new file mode 100644 index 000000000..04818e774 --- /dev/null +++ b/framework/reactioncommerce/utils/mutations/create-user.ts @@ -0,0 +1,13 @@ +const createUserMutation = /* GraphQL */ ` + mutation createUser($input: CreateUserInput!) { + createUser(user: $input) { + loginResult { + tokens { + refreshToken + accessToken + } + } + } + } +` +export default createUserMutation diff --git a/framework/reactioncommerce/utils/mutations/customer-create.ts b/framework/reactioncommerce/utils/mutations/customer-create.ts deleted file mode 100644 index 05c728a25..000000000 --- a/framework/reactioncommerce/utils/mutations/customer-create.ts +++ /dev/null @@ -1,15 +0,0 @@ -const customerCreateMutation = /* GraphQL */ ` - mutation customerCreate($input: CustomerCreateInput!) { - customerCreate(input: $input) { - customerUserErrors { - code - field - message - } - customer { - id - } - } - } -` -export default customerCreateMutation diff --git a/framework/reactioncommerce/utils/mutations/index.ts b/framework/reactioncommerce/utils/mutations/index.ts index e8b6c7fb1..b79231032 100644 --- a/framework/reactioncommerce/utils/mutations/index.ts +++ b/framework/reactioncommerce/utils/mutations/index.ts @@ -1,5 +1,5 @@ export { default as addCartItemsMutation } from './add-cart-items' -export { default as customerCreateMutation } from './customer-create' +export { default as createUserMutation } from './create-user' export { default as checkoutCreateMutation } from './checkout-create' export { default as authenticateMutation } from './authenticate' export { default as logoutMutation } from './logout' diff --git a/framework/reactioncommerce/utils/queries/get-customer-id-query.ts b/framework/reactioncommerce/utils/queries/get-viewer-id-query.ts similarity index 100% rename from framework/reactioncommerce/utils/queries/get-customer-id-query.ts rename to framework/reactioncommerce/utils/queries/get-viewer-id-query.ts