feat: f**k the __typename :)
This commit is contained in:
parent
dee2c97ba4
commit
120a720be5
@ -15,6 +15,7 @@ import { onError } from "@apollo/client/link/error";
|
|||||||
import { WebSocketLink } from "@apollo/client/link/ws";
|
import { WebSocketLink } from "@apollo/client/link/ws";
|
||||||
import { getMainDefinition } from "@apollo/client/utilities";
|
import { getMainDefinition } from "@apollo/client/utilities";
|
||||||
import { useSnackbar } from "notistack";
|
import { useSnackbar } from "notistack";
|
||||||
|
import { deepOmit } from "../../utils/deep-omit";
|
||||||
|
|
||||||
const schema = buildClientSchema(
|
const schema = buildClientSchema(
|
||||||
introspectionResult as unknown as IntrospectionQuery
|
introspectionResult as unknown as IntrospectionQuery
|
||||||
@ -24,6 +25,15 @@ const typesMap = {
|
|||||||
DateTime: DateTimeResolver,
|
DateTime: DateTimeResolver,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const cleanTypeName = new ApolloLink((operation, forward) => {
|
||||||
|
if (operation.variables) {
|
||||||
|
operation.variables = deepOmit(["__typename"], operation.variables);
|
||||||
|
}
|
||||||
|
return forward(operation).map((data) => {
|
||||||
|
return data;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
export const FennecApolloClientProvider: FC = ({ children }) => {
|
export const FennecApolloClientProvider: FC = ({ children }) => {
|
||||||
const { enqueueSnackbar } = useSnackbar();
|
const { enqueueSnackbar } = useSnackbar();
|
||||||
const errorLink = onError(({ graphQLErrors, networkError }) => {
|
const errorLink = onError(({ graphQLErrors, networkError }) => {
|
||||||
@ -71,6 +81,7 @@ export const FennecApolloClientProvider: FC = ({ children }) => {
|
|||||||
const link = ApolloLink.from([
|
const link = ApolloLink.from([
|
||||||
errorLink,
|
errorLink,
|
||||||
withScalars({ schema, typesMap }) as unknown as ApolloLink,
|
withScalars({ schema, typesMap }) as unknown as ApolloLink,
|
||||||
|
cleanTypeName,
|
||||||
splitLink,
|
splitLink,
|
||||||
]);
|
]);
|
||||||
const client = new ApolloClient({
|
const client = new ApolloClient({
|
||||||
|
22
src/utils/deep-omit.ts
Normal file
22
src/utils/deep-omit.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { fromPairs, map, omit, pipe, toPairs, type } from "ramda";
|
||||||
|
|
||||||
|
export const deepOmit = <T = any, K = any>(
|
||||||
|
names: readonly string[],
|
||||||
|
value: K
|
||||||
|
): T => {
|
||||||
|
switch (type(value)) {
|
||||||
|
case "Array":
|
||||||
|
return (value as unknown as Array<any>).map((item: any) =>
|
||||||
|
deepOmit(names, item)
|
||||||
|
) as unknown as T;
|
||||||
|
case "Object":
|
||||||
|
return pipe(
|
||||||
|
omit(names),
|
||||||
|
toPairs,
|
||||||
|
map(([key, val]) => [key, deepOmit(names, val)] as any),
|
||||||
|
fromPairs
|
||||||
|
)(value) as unknown as T;
|
||||||
|
default:
|
||||||
|
return value as unknown as T;
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user