| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- "use client";
- import { GET_CHECKOUT_ADDRESSES, CREATE_CHECKOUT_ADDRESS } from "@/graphql";
- import {useApolloClient} from "@apollo/client/react";
- import {
- CheckoutAddressNode,
- ShipAddressFormData,
- BillAddressFormData,
- CreateCheckoutAddressVariables
- } from "@/types/checkout/type";
- import {normalizePhoneForForm} from "@/utils/phoneNumberTools";
- /**
- * 对比shipping address与billing address的数据是否完全相同
- */
- export function addressIsSame(billAddress: BillAddressFormData | null, shipAddress: ShipAddressFormData | null) {
- if(billAddress === null && shipAddress === null) {
- return true;
- } else if(billAddress !== null && shipAddress !== null) {
- return (
- billAddress.billingEmail === shipAddress.shippingEmail &&
- billAddress.billingFirstName === shipAddress.shippingFirstName &&
- billAddress.billingLastName === shipAddress.shippingLastName &&
- billAddress.billingCompanyName === shipAddress.shippingCompanyName &&
- billAddress.billingAddress === shipAddress.shippingAddress &&
- billAddress.billingCity === shipAddress.shippingCity &&
- billAddress.billingState === shipAddress.shippingState &&
- billAddress.billingCountry === shipAddress.shippingCountry &&
- billAddress.billingPostcode === shipAddress.shippingPostcode &&
- billAddress.billingPhoneNumber === shipAddress.shippingPhoneNumber
- );
- } else {
- return false;
- }
- }
- export function useCheckoutAddress(loginEmail: string) {
- const apolloClient = useApolloClient();
- const getCheckoutAddress = () => {
- return apolloClient.query({
- query: GET_CHECKOUT_ADDRESSES,
- fetchPolicy: "no-cache",
- context: {
- fetchOptions: {
- cache: 'no-store',
- },
-
- }
- }).then((res) => {
- const address = res.data?.collectionGetCheckoutAddresses?.edges?.map(
- (edge: { node: CheckoutAddressNode }) => edge.node
- ) || [];
- const billAddress = address.find((a: CheckoutAddressNode) => a?.addressType === "cart_billing") || null;
- const shipAddress = address.find((a: CheckoutAddressNode) => a?.addressType === "cart_shipping") || null;
- const shipCountry = shipAddress?.country || "US";
- const billCountry = billAddress?.country || "US";
- const defaultBillAddress: BillAddressFormData = {
- billingAddressId: billAddress?._id || "",
- billingEmail: billAddress?.email ?? loginEmail ?? "",
- billingFirstName: billAddress?.firstName || "",
- billingLastName: billAddress?.lastName || "",
- billingCompanyName: billAddress?.companyName || "",
- billingAddress: billAddress?.address || "",
- billingCountry: billCountry,
- billingState: billAddress?.state || "",
- billingCity: billAddress?.city || "",
- billingPostcode: billAddress?.postcode || "",
- billingPhoneNumber: normalizePhoneForForm(billAddress?.phone, billCountry) || "",
- billingSameAsShipping: true, // 这个字段前端维护,不传给后端(bagisto是以billing address为准,但是运营要以shipping address为准,所以前端自己维护billing address与shipping address 同步)
- };
- const defaultShipAddress: ShipAddressFormData = {
- shippingAddressId: shipAddress?._id || "",
- shippingEmail: shipAddress?.email ?? loginEmail ?? "",
- shippingFirstName: shipAddress?.firstName || "",
- shippingLastName: shipAddress?.lastName || "",
- shippingCompanyName: shipAddress?.companyName || "",
- shippingAddress: shipAddress?.address || "",
- shippingCountry: shipCountry,
- shippingState: shipAddress?.state || "",
- shippingCity: shipAddress?.city || "",
- shippingPostcode: shipAddress?.postcode || "",
- shippingPhoneNumber: normalizePhoneForForm(shipAddress?.phone, shipCountry) || "",
- };
- const billSameAsShip = addressIsSame(defaultBillAddress, defaultShipAddress);
- defaultBillAddress.billingSameAsShipping = billSameAsShip;
- console.log('GET_CHECKOUT_ADDRESSES res ---- ',defaultShipAddress,defaultBillAddress);
- return {
- shippingAddress: defaultShipAddress,
- billingAddress: defaultBillAddress
- }
-
- }).catch((err) => {
- console.error('GET_CHECKOUT_ADDRESSES error ---- ',err);
- return null;
- });
- };
- const saveCheckoutAddress = (saveAddressParam: CreateCheckoutAddressVariables) => {
- return apolloClient.mutate({
- mutation: CREATE_CHECKOUT_ADDRESS,
- variables:saveAddressParam,
- }).then((res) => {
- const resData = res.data?.createCheckoutAddress.checkoutAddress ?? null;
- const result = {
- error: false,
- msg: '',
- data: resData
- };
- return result;
- }).catch((err) => {
- const result = {
- error: true,
- msg: err.message,
- data: null,
- };
- return result;
- });
- }
- return {
- getCheckoutAddress,
- saveCheckoutAddress,
- };
- }
|