vbv/client/src/graphql/client.ts

61 lines
2.0 KiB
TypeScript

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import { cacheExchange } from "@urql/exchange-graphcache";
import { Client, fetchExchange } from "@urql/vue";
import schema from "../gql/minifiedSchema.json";
import {
AssignmentCompletionMutation,
AssignmentCompletionObjectType,
} from "../gql/typenames";
export const graphqlClient = new Client({
url: import.meta.env.VITE_GRAPHQL_URL || "/server/graphql/",
exchanges: [
cacheExchange({
schema: schema,
keys: {
AttendanceUserType: (data) => data?.user_id?.toString() ?? null,
},
updates: {
Mutation: {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
upsert_assignment_completion(result, args, cache, info) {
// will run on every mutation
// console.log("udpates upsert_assignment_completion", result);
},
},
},
optimistic: {
// @ts-ignore, weiss oh nöt...
upsert_assignment_completion(args, cache, info) {
console.log("optimistic upsert_assignment_completion", args, cache, info);
const id = info.variables.id;
if (id) {
const completionData = cache.resolve(
{ __typename: AssignmentCompletionObjectType, id: "1" },
"completion_data"
);
return {
__typename: AssignmentCompletionMutation,
assignment_completion: {
__typename: AssignmentCompletionObjectType,
id: id,
completion_data: Object.assign(
{},
completionData,
// @ts-ignore, weiss oh nöt...
JSON.parse(args.completion_data_string || "{}")
),
completion_status: args.completion_status,
evaluation_grade: args.evaluation_grade,
evaluation_points: args.evaluation_points,
},
};
}
},
},
}),
fetchExchange,
],
});