61 lines
2.0 KiB
TypeScript
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,
|
|
],
|
|
});
|