Jelajahi Sumber

eslint 代码检查结果建议修改

fogwind 2 hari lalu
induk
melakukan
76269629ee

+ 3 - 5
src/app/(public)/product/[...urlProduct]/page.tsx

@@ -16,8 +16,6 @@ import {
   ProductOption,
   SingleProductResponse,
   ProductMediaType,
-  ProductFlexibleVariant,
-  ResolvedVariant
 } from "@components/catalog/type";
 import { RelatedProductsSection } from "@components/catalog/product/RelatedProductsSection";
 import { HeroCarouselShimmer } from "@components/common/slider";
@@ -87,9 +85,9 @@ export default async function ProductPage({
 
   const flexibleVariants = formatFlexibleVariants(product?.flexibleVariants);
 
-    const reviews = Array.isArray(product?.reviews?.edges)
-    ? product?.reviews.edges.map((e) => e.node)
-    : [];
+    // const reviews = Array.isArray(product?.reviews?.edges)
+    // ? product?.reviews.edges.map((e) => e.node)
+    // : [];
 
   // const VariantImages = isArray(product?.variants?.edges)
   //   ? product?.variants.edges.map(

+ 8 - 9
src/app/(public)/product/_components/ProductInformation.tsx

@@ -16,7 +16,6 @@ import {
     getFirstAvailable,
     getAvailableVariants,
     isCombinationAvailable,
-    formatFlexibleVariants,
     findNearestAvailableVariant
 } from "@/utils/variantTools";
 import { Price } from "@components/theme/ui/Price";
@@ -95,7 +94,7 @@ export function ProductInformation({
     const handleOptionClick = (optionId: number, valueId: number) => {
         // 更新前需要判断当前选中的组合是否可以购买,如果可以购买正常更新;如果不能购买查找可以购买的组合然后更新
         let newSelected: Record<number, number> = {...selected,[optionId]: valueId};
-        let selectedValueIds = Object.values(newSelected);
+        const selectedValueIds = Object.values(newSelected);
         if(!isCombinationAvailable(selectedValueIds, availableVariants)) {
             newSelected = findNearestAvailableVariant(optionId,valueId,{...newSelected},productOptions,availableVariants);
         }
@@ -127,7 +126,7 @@ export function ProductInformation({
         let totalLinePrice = 0;
         let totalNowPrice = 0;
         let save = 0;
-        let variant = flexibleVariants.find((v) => {
+        const variant = flexibleVariants.find((v) => {
             const vIds = v.optionValues.map((ov) => ov.id);
             return selectedIds.length === vIds.length && selectedIds.every((id) => vIds.includes(id));
         });
@@ -153,10 +152,10 @@ export function ProductInformation({
     }, [selected, flexibleVariants, productQty]);
 
 
-    let classNameOptionValueBtn = "text-ly-14 leading-ly-24 border border-solid rounded-lg pt-1.5 pb-1.5 pl-3 pr-3 bg-white";
+    const classNameOptionValueBtn = "text-ly-14 leading-ly-24 border border-solid rounded-lg pt-1.5 pb-1.5 pl-3 pr-3 bg-white";
 
 
-    let handlerProductQty = (action: string) => {
+    const handlerProductQty = (action: string) => {
         if (action === "increase") {
             setProductQty(productQty + 1);
         } else if (action === "decrease" && productQty > 1) {
@@ -166,12 +165,12 @@ export function ProductInformation({
 
     async function addProductToCart(action:string = 'addtocart') {
         
-        let params = { 
+        const params = { 
             productId: String(productId), 
             quantity: productQty,
             variantId: currentVariantInfo.variant?._id,
         };
-        let res = await onAddToCart(params);
+        const res = await onAddToCart(params);
         console.log('onAddToCart result --- ', res);
         if(action === 'buynow') {
             if(res) {
@@ -183,7 +182,7 @@ export function ProductInformation({
         }
     } 
 
-    let addToCartHandler = async () => {
+    const addToCartHandler = async () => {
    
         if(!isCurrentSelectionAvailable) {
             showToast("The selected options are not available!", "warning");
@@ -195,7 +194,7 @@ export function ProductInformation({
         }
     };
 
-    let buyNowHandler = () => {
+    const buyNowHandler = () => {
         if(!isCurrentSelectionAvailable) {
             showToast("The selected options are not available!", "warning");
             return;

+ 1 - 1
src/app/(public)/product/_components/ProductMedia.tsx

@@ -34,7 +34,7 @@ export function ProductMedia({ mediaData }: {mediaData: Array<ProductMediaType>;
                 {
                     mediaData.map((img) => {
                         return (
-                            <SwiperSlide>
+                            <SwiperSlide key={img.id}>
                                 <Image className="block w-full"
                                     src={getImageUrl(img.publicPath,baseUrl)}
                                     width={390}

+ 1 - 1
src/app/(public)/product/_components/review/ReviewDetail.tsx

@@ -47,7 +47,7 @@ const ReviewDetail: FC<ReviewDetailProps> = ({
               reviewCount={totalReview}
             />
           </div>
-
+          <span style={{display:"none"}}>{productId}</span>
           <div className="flex w-full max-w-[280px] overflow-hidden rounded-sm">
             {Object.entries(ratingCounts)
               .reverse()

+ 4 - 4
src/app/api/graphql/route.ts

@@ -36,9 +36,9 @@ const ALLOWED_OPERATIONS: Record<string, any> = {
     CreateCheckoutOrder: CREATE_CHECKOUT_ORDER,
     CreateProductReview: CREATE_PRODUCT_REVIEW,
 };
-const QUERY_OPERATIONS: Record<string, any> = {
-    GetProductById: GET_PRODUCT_BY_URL_KEY,
-}
+// const QUERY_OPERATIONS: Record<string, any> = {
+//     GetProductById: GET_PRODUCT_BY_URL_KEY,
+// }
 
 interface FetchOption  {
     query: string;
@@ -50,7 +50,7 @@ interface FetchOption  {
 
 // 需要authorization的operation
 function authorizationOperations(body: Record<string, any>,req:NextRequest): FetchOption {
-    const { operationName, query: bodyGraphqlQuery, variables } = body;
+    const { operationName, variables } = body;
     const guestToken = getAuthToken(req);
     const query = ALLOWED_OPERATIONS[operationName];
     let finalVariables = variables;

+ 5 - 13
src/components/cart/CartModal.tsx

@@ -2,13 +2,6 @@
 import clsx from "clsx";
 import { useDisclosure } from "@heroui/use-disclosure";
 import { AnimatePresence, motion } from "framer-motion";
-import {
-  Drawer,
-  DrawerBody,
-  DrawerContent,
-  DrawerFooter,
-  DrawerHeader,
-} from "@heroui/drawer";
 import { ShoppingCartIcon } from "@heroicons/react/24/outline";
 import { DEFAULT_OPTION } from "@/utils/constants";
 import { useAppSelector } from "@/store/hooks";
@@ -27,7 +20,6 @@ import { redirectToCheckout } from "@/utils/actions";
 import { EMAIL, getLocalStorage } from "@/store/local-storage";
 import Link from "next/link";
 import { createUrl, isCheckout, safeParse } from "@utils/helper";
-import { useMediaQuery } from "@utils/hooks/useMediaQueryHook";
 import { useBodyScrollLock } from "@utils/hooks/useBodyScrollLock";
 import { useSyncExternalStore } from "react";
 import { useAddressesFromApi } from "@utils/hooks/getAddress";
@@ -75,11 +67,11 @@ export default function CartModal({
 
   useBodyScrollLock(finalIsOpen);
 
-  const handleOpenChange = (open: boolean) => {
-    if (!open) {
-      finalOnClose?.();
-    }
-  };
+  // const handleOpenChange = (open: boolean) => {
+  //   if (!open) {
+  //     finalOnClose?.();
+  //   }
+  // };
 
   return (
     <>

+ 2 - 2
src/components/common/AddToCartModal/OpenAddToCartModalButton.tsx

@@ -20,13 +20,13 @@ export function OpenAddToCartModalButton({productUrlKey}: {productUrlKey: string
     const openDialog = async () => {
         if( loading) return; 
         try {
-            let result = await getContent({
+            const result = await getContent({
                 variables: { urlKey: productUrlKey }
             });
 
             console.log('product ----- ', result);// 返回的数据中有__typename,如何过滤 @todo
 
-            let productData = result?.data?.product;
+            const productData = result?.data?.product;
             if(result.error) {
                 showToast(result.error.message, "danger");
             } else {

+ 1 - 1
src/components/common/AddToCartModal/ProductOptionsInAddToCartModal.tsx

@@ -20,7 +20,7 @@ export default function ProductOptionsInAddToCartModal({
     }) => void;
 }) {
 
-    let classNameOptionValueBtn = "text-ly-14 leading-ly-24 border border-solid rounded-lg pt-1.5 pb-1.5 pl-3 pr-3 bg-white";
+    const classNameOptionValueBtn = "text-ly-14 leading-ly-24 border border-solid rounded-lg pt-1.5 pb-1.5 pl-3 pr-3 bg-white";
     // 处理选项点击
     const handleOptionClick = (optionId: number, valueId: number) => {
         onOptionClick({

+ 0 - 1
src/components/layout/navbar/MobileMenu.tsx

@@ -4,7 +4,6 @@ import { AnimatePresence, motion } from "framer-motion";
 import Link from "next/link";
 
 import { MobileSearchBar } from "./MobileSearch";
-import { useState } from "react";
 import { useBodyScrollLock } from "@utils/hooks/useBodyScrollLock";
 
 interface MobileMenuProps {

+ 1 - 1
src/lib/ApolloClientBrowser.ts

@@ -45,7 +45,7 @@ export default function makeClient() {
   });
 
 
-  const authLink = new SetContextLink(async (prevContext, operation) => {
+  const authLink = new SetContextLink(async (prevContext) => {
       
       const session = await getCachedSession();
       const userToken = session?.user?.accessToken;

+ 1 - 1
src/lib/ApolloClientServer.ts

@@ -23,7 +23,7 @@ export const { getClient, query, PreloadQuery } = registerApolloClient(() => {
       },
       */
     });
-    const authLink = new SetContextLink((prevContext, operation) => {
+    const authLink = new SetContextLink((prevContext) => {
         const storefrontKey =
             process.env.BAGISTO_STOREFRONT_KEY ||
             process.env.NEXT_PUBLIC_BAGISTO_STOREFRONT_KEY ||

+ 3 - 46
src/lib/graphql-fetch.ts

@@ -1,5 +1,5 @@
-import { unstable_cache } from "next/cache";
-import { print, type DocumentNode } from "graphql";
+
+import { type DocumentNode } from "graphql";
 import {
   type OperationVariables,
   ApolloClient
@@ -7,50 +7,7 @@ import {
 
 import {getClient} from "@/lib/ApolloClientServer";
 
-import {
-  CombinedGraphQLErrors,
-  CombinedProtocolErrors,
-  LocalStateError,
-  ServerError,
-  ServerParseError,
-  UnconventionalError,
-} from "@apollo/client/errors";
 // Comprehensive error handling example. https://www.apollographql.com/docs/react/data/error-handling
-function handleError(error: unknown) {
-  let res = '';
-  if (CombinedGraphQLErrors.is(error)) {
-    // Handle GraphQL errors 发起请求前graphql的致命错误 直接抛出
-    throw error;
-  } /*else if (CombinedProtocolErrors.is(error)) {
-    // Handle multipart subscription protocol errors
-    error.errors.forEach((protocolError) => {
-      console.log(protocolError.message);
-      console.log(protocolError.extensions);
-    });
-  } */else if (LocalStateError.is(error)) { // 使用@client 报错时
-    // Handle errors thrown by the `LocalState` class
-    throw error;
-
-  } else if (ServerError.is(error)) {
-    // Handle server HTTP errors
-    res = `Response body: ${error.statusCode} / ${error.message}`;
-    // Handle unauthorized access
-    //  if (error.statusCode === 401) {
-    //    
-    //  }
-  } else if (ServerParseError.is(error)) {
-    // Handle JSON parse 
-     throw error;
-  } else if (UnconventionalError.is(error)) {
-    // Handle errors thrown by irregular types
-    throw error;
-
-  } else {
-    // Handle other errors
-    throw error;
-  }
-  return res;
-}
 
 export interface GraphqlRequestResult<TData = unknown> {
   data: TData | null;
@@ -137,7 +94,7 @@ export async function graphqlRequest<
   options?: GraphQLRequestOptions
 ): Promise<GraphqlRequestResult<TData>> {
   const client = getClient();
-  let resData, resError;
+  let resData;
   const revalidate = getRevalidateTime(options?.life);
   let queryOption: ApolloClient.QueryOptions<TData> = {
     query,

+ 1 - 1
src/lib/restApiClient.ts

@@ -42,7 +42,7 @@ export async function clientFetch(apiUrl: string, options: RequestInit) {
     const response = await fetch(apiUrl, options);
     // console.log('response -- ', response);
     if(response.ok) {
-        let result = await response.json();
+        const result = await response.json();
         return result;
     } else {
         return {

+ 1 - 1
src/providers/ApolloWrapper.tsx

@@ -1,7 +1,7 @@
 "use client";
 
 import { ApolloNextAppProvider } from "@apollo/client-integration-nextjs";
-import { ReactNode, useMemo } from "react";
+import { ReactNode } from "react";
 import makeClient from "@/lib/ApolloClientBrowser";
 
 const ApolloWrapper = ({ children }: { children: ReactNode }) => {

+ 1 - 1
src/store/slices/addToCartDialogSlice.ts

@@ -1,5 +1,5 @@
 import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-import { SingleProductResponse, ProductNode } from "@/components/catalog/type";
+import { ProductNode } from "@/components/catalog/type";
 
 interface DialogState {
   isOpen: boolean;

+ 1 - 1
src/utils/bagisto/index.ts

@@ -105,7 +105,7 @@ export async function restApiFetch<T>({
       }
     }
 console.log('restApiFetch --- baseHeaders:', baseHeaders)
-    let param: RequestInit = {
+    const param: RequestInit = {
       method: method,
       headers: baseHeaders,
       cache,

+ 4 - 4
src/utils/hooks/useAddToCart.ts

@@ -37,7 +37,7 @@ export const useAddProduct = () => {
         }
         if (responseData) {
           if (responseData.success) {
-            let cartDetail = {
+            const cartDetail = {
               id: responseData.id,
               itemsQty: responseData.itemsQty,
               taxAmount: responseData.taxAmount,
@@ -83,7 +83,7 @@ export const useAddProduct = () => {
         return;
       }
     }
-    let param : { productId: number; quantity:number; variantId?: number; } = {
+    const param : { productId: number; quantity:number; variantId?: number; } = {
       productId: parseInt(productId),
       quantity,
     };
@@ -91,7 +91,7 @@ export const useAddProduct = () => {
       param.variantId = variantId;
     }
 
-    let result = await mutateAsync({
+    const result = await mutateAsync({
       variables: param,
     });
 
@@ -146,7 +146,7 @@ export const useAddProduct = () => {
         const responseData = response?.createUpdateCartItem?.updateCartItem;
 
         if (isObject(responseData)) {
-          let cartDetail = {
+          const cartDetail = {
             id: responseData.id,
             itemsQty: responseData.itemsQty,
             taxAmount: responseData.taxAmount,

+ 1 - 1
src/utils/hooks/useCartDetail.ts

@@ -21,7 +21,7 @@ export function useCartDetail() {
       onCompleted: (response) => {
         const cartData = response?.createReadCart?.readCart;
         if (cartData) {
-          let cartDetail = {
+          const cartDetail = {
             id: cartData.id,
             itemsQty: cartData.itemsQty,
             taxAmount: cartData.taxAmount,

+ 1 - 1
src/utils/hooks/useMergeCart.ts

@@ -22,7 +22,7 @@ export function useMergeCart() {
       if (cartId !== null && typeof cartId !== "undefined") {
         setCookie(GUEST_CART_ID, String(cartId));
       }
-      let cartDetail = {
+      const cartDetail = {
         id: responseData.id,
         itemsQty: responseData.itemsQty,
         taxAmount: responseData.taxAmount,

+ 2 - 2
src/utils/variantTools.ts

@@ -100,9 +100,9 @@ export function findNearestAvailableVariant(
     let res:Record<number, number> = {[fixedOptionId]: fixedValueId};
 
     for (const option of allOptions) {
-        let optionId = option.id;
+        const optionId = option.id;
         if(fixedOptionId === optionId) continue;
-        let valueId = valueIdMap[optionId];
+        const valueId = valueIdMap[optionId];
         if(isOptionValueAvailable(optionId,valueId,res,allOptions,variants)) {
             res = {...res,[optionId]: valueId};
         } else {