import { ApolloClient, ApolloLink, HttpLink, InMemoryCache, Observable, } from "@apollo/client"; const responseWrapperLink = new ApolloLink((operation, forward) => { return new Observable((observer) => { const handle = forward(operation).subscribe({ next: (response) => { // Kiểm tra nếu dữ liệu trả về bị "trần" (thiếu data property) if ( response && !Object.prototype.hasOwnProperty.call(response, "data") ) { // Khởi tạo một object mới theo chuẩn GraphQL const formattedResponse = { data: response, errors: (response as any).errors, }; observer.next(formattedResponse); } else { observer.next(response); } }, error: observer.error.bind(observer), complete: observer.complete.bind(observer), }); return () => { if (handle) handle.unsubscribe(); }; }); }); export const cartClient = new ApolloClient({ link: ApolloLink.from([ responseWrapperLink, new HttpLink({ uri: "/api/cart/graphql" }), ]), cache: new InMemoryCache(), }); export const eateryClient = new ApolloClient({ link: ApolloLink.from([ responseWrapperLink, new HttpLink({ uri: "/api/eatery/graphql" }), ]), cache: new InMemoryCache(), });