useCheckoutShippingMethod.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. "use client";
  2. import { useState, useEffect, useRef } from "react";
  3. import { GET_CHECKOUT_SHIPPING_RATES, CREATE_CHECKOUT_SHIPPING_METHODS } from "@/graphql";
  4. import {useApolloClient} from "@apollo/client/react";
  5. import {CheckoutShippingRate, CreateCheckoutShippingMethodVariables} from "@/types/checkout/type";
  6. interface ShippingMethodsResult {
  7. data: CheckoutShippingRate[];
  8. msg: string;
  9. error: boolean;
  10. }
  11. export function useCheckoutShippingMethod() {
  12. console.log('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk');
  13. const apolloClient = useApolloClient();
  14. const [data, setData] = useState<CheckoutShippingRate[]>([]);
  15. const [loading, setLoading] = useState(true);
  16. const [error, setError] = useState<string|null>(null);
  17. const isIntRef = useRef(true);
  18. const getShippingMethod = (
  19. resolveCallback: (res:ShippingMethodsResult) => void = () => {},
  20. rejectCallback: (res: ShippingMethodsResult) => void = ()=> {}
  21. ) => {
  22. if(!isIntRef.current) {
  23. setLoading(true);
  24. }
  25. return apolloClient.query({
  26. query: GET_CHECKOUT_SHIPPING_RATES,
  27. fetchPolicy: "no-cache",
  28. context: {
  29. fetchOptions: {
  30. cache: 'no-store',
  31. },
  32. }
  33. }).then((res) => {
  34. if(isIntRef.current) {
  35. isIntRef.current = false;
  36. }
  37. const shippingMethods = res.data?.collectionShippingRates || [];
  38. const resData: ShippingMethodsResult = {
  39. data: shippingMethods,
  40. msg: '',
  41. error: false
  42. };
  43. setData(resData.data);
  44. setLoading(false);
  45. console.log('GET_CHECKOUT_shippingmethod res ---- ',shippingMethods);
  46. resolveCallback(resData);
  47. return resData;
  48. }).catch((err) => {
  49. if(isIntRef.current) {
  50. isIntRef.current = false;
  51. }
  52. console.error('GET_CHECKOUT_shippingmethod error ---- ',err);
  53. const resData: ShippingMethodsResult = {
  54. data: [],
  55. msg: err.message,
  56. error: true
  57. };
  58. setError(resData.msg);
  59. setLoading(false);
  60. rejectCallback(resData);
  61. return resData;
  62. });
  63. };
  64. const saveShippingMethod = (params: CreateCheckoutShippingMethodVariables) => {
  65. return apolloClient.mutate({
  66. mutation: CREATE_CHECKOUT_SHIPPING_METHODS,
  67. variables:params,
  68. }).then((res) => {
  69. const resData = {
  70. data: res.data?.createCheckoutShippingMethod?.checkoutShippingMethod,
  71. msg: '',
  72. error: false
  73. };
  74. return resData;
  75. }).catch((err) => {
  76. const resData = {
  77. data: null,
  78. msg: err.message,
  79. error: true
  80. };
  81. return resData;
  82. });
  83. };
  84. useEffect(() => {
  85. getShippingMethod();
  86. // getShippingMethod((resolveData) => {
  87. // const methodsData = resolveData.data;
  88. // setData(methodsData);
  89. // setLoading(false);
  90. // }, (rejectData) => {
  91. // setError(rejectData.msg);
  92. // setLoading(false);
  93. // });
  94. }, []);
  95. return {
  96. data,
  97. loading,
  98. error,
  99. getShippingMethod,
  100. saveShippingMethod
  101. };
  102. }