From 8fd0f4e32d78f4c1b24315aa5088431ff482b391 Mon Sep 17 00:00:00 2001 From: "@yuri_assuncx" Date: Tue, 22 Oct 2024 17:49:37 -0300 Subject: [PATCH] feat(shopify): adds signUp action (#920) --- shopify/actions/user/signIn.ts | 2 +- shopify/actions/user/signUp.ts | 41 +++++++++++++++++++++++++++++ shopify/manifest.gen.ts | 2 ++ shopify/utils/storefront/queries.ts | 26 ++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 shopify/actions/user/signUp.ts diff --git a/shopify/actions/user/signIn.ts b/shopify/actions/user/signIn.ts index ad52bb66c..f61fb33a7 100644 --- a/shopify/actions/user/signIn.ts +++ b/shopify/actions/user/signIn.ts @@ -20,7 +20,7 @@ interface AccessTokenResponse { /** * @title Shopify Integration - * @description SignInWithEmailAndPassword Action + * @description Sign In With Email And Password Action */ const action = async ( props: Props, diff --git a/shopify/actions/user/signUp.ts b/shopify/actions/user/signUp.ts new file mode 100644 index 000000000..22d6ac88b --- /dev/null +++ b/shopify/actions/user/signUp.ts @@ -0,0 +1,41 @@ +import type { AppContext } from "../../mod.ts"; +import { RegisterAccount } from "../../utils/storefront/queries.ts"; +import { + CustomerCreateInput, + CustomerCreatePayload, +} from "../../utils/storefront/storefront.graphql.gen.ts"; + +interface Props { + email: string; + /** + * @format password + */ + password: string; + firstName: string; + lastName: string; + acceptsMarketing?: boolean; +} + +/** + * @title Shopify Integration + * @description Register Account Action + */ +const action = async ( + props: Props, + _req: Request, + ctx: AppContext, +): Promise => { + const { storefront } = ctx; + + const data = await storefront.query< + { customerCreate: CustomerCreatePayload }, + CustomerCreateInput + >({ + variables: props, + ...RegisterAccount, + }); + + return data.customerCreate; +}; + +export default action; diff --git a/shopify/manifest.gen.ts b/shopify/manifest.gen.ts index 1741daf39..62ed27d96 100644 --- a/shopify/manifest.gen.ts +++ b/shopify/manifest.gen.ts @@ -7,6 +7,7 @@ import * as $$$$$$$$$1 from "./actions/cart/updateCoupons.ts"; import * as $$$$$$$$$2 from "./actions/cart/updateItems.ts"; import * as $$$$$$$$$3 from "./actions/order/draftOrderCalculate.ts"; import * as $$$$$$$$$4 from "./actions/user/signIn.ts"; +import * as $$$$$$$$$5 from "./actions/user/signUp.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$4 from "./loaders/cart.ts"; import * as $$$0 from "./loaders/ProductDetailsPage.ts"; @@ -35,6 +36,7 @@ const manifest = { "shopify/actions/cart/updateItems.ts": $$$$$$$$$2, "shopify/actions/order/draftOrderCalculate.ts": $$$$$$$$$3, "shopify/actions/user/signIn.ts": $$$$$$$$$4, + "shopify/actions/user/signUp.ts": $$$$$$$$$5, }, "name": "shopify", "baseUrl": import.meta.url, diff --git a/shopify/utils/storefront/queries.ts b/shopify/utils/storefront/queries.ts index 683858853..ccf6ce04f 100644 --- a/shopify/utils/storefront/queries.ts +++ b/shopify/utils/storefront/queries.ts @@ -404,6 +404,32 @@ export const AddItemToCart = { }`, }; +export const RegisterAccount = { + query: gql`mutation RegisterAccount( + $email: String!, + $password: String!, + $firstName: String, + $lastName: String, + $acceptsMarketing: Boolean = false + ) { + customerCreate(input: { + email: $email, + password: $password, + firstName: $firstName, + lastName: $lastName, + acceptsMarketing: $acceptsMarketing, + }) { + customer { + id + } + customerUserErrors { + code + message + } + } + }`, +}; + export const AddCoupon = { fragments: [Cart], query: gql`mutation AddCoupon($cartId: ID!, $discountCodes: [String!]!) {