75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
// DON'T TOUCH THIS
|
|
// These are separate clients and do not share configs between themselves
|
|
import { ApolloClient, ApolloLink, InMemoryCache } from "@apollo/client";
|
|
import { createFetch, createSaleorClient } from "@saleor/sdk";
|
|
import { createUploadLink } from "apollo-upload-client";
|
|
|
|
import { getApiUrl } from "../config";
|
|
import introspectionQueryResultData from "./fragmentTypes.generated";
|
|
import { TypedTypePolicies } from "./typePolicies.generated";
|
|
|
|
const attachVariablesLink = new ApolloLink((operation, forward) =>
|
|
forward(operation).map(data => ({
|
|
...data,
|
|
extensions: {
|
|
...data.extensions,
|
|
variables: operation.variables,
|
|
},
|
|
})),
|
|
);
|
|
|
|
export const link = attachVariablesLink.concat(
|
|
createUploadLink({
|
|
credentials: "include",
|
|
uri: getApiUrl(),
|
|
fetch: createFetch(),
|
|
}),
|
|
);
|
|
|
|
export const apolloClient = new ApolloClient({
|
|
cache: new InMemoryCache({
|
|
possibleTypes: introspectionQueryResultData.possibleTypes,
|
|
typePolicies: {
|
|
CountryDisplay: {
|
|
keyFields: ["code"],
|
|
},
|
|
Money: {
|
|
merge: false,
|
|
},
|
|
TaxedMoney: {
|
|
merge: false,
|
|
},
|
|
Weight: {
|
|
merge: false,
|
|
},
|
|
Shop: {
|
|
keyFields: [],
|
|
},
|
|
AttributeValue: {
|
|
fields: {
|
|
/**
|
|
* Since, API sometimes creates an empty slug,
|
|
* We need to handle that case also on front-end,
|
|
* so after fix that problem in the API, the UI will ablle
|
|
* to handle it.
|
|
*
|
|
* If the slug is empty, use the name
|
|
*/
|
|
slug: (givenSlug, { readField }) => {
|
|
if (!givenSlug) {
|
|
return readField("name");
|
|
}
|
|
|
|
return givenSlug;
|
|
},
|
|
},
|
|
},
|
|
} as TypedTypePolicies,
|
|
}),
|
|
link,
|
|
});
|
|
|
|
export const saleorClient = createSaleorClient({
|
|
apiUrl: getApiUrl(),
|
|
channel: "",
|
|
});
|