summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/gql/Mutations.ts
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/gql/Mutations.ts')
-rw-r--r--frontend/src/gql/Mutations.ts244
1 files changed, 244 insertions, 0 deletions
diff --git a/frontend/src/gql/Mutations.ts b/frontend/src/gql/Mutations.ts
new file mode 100644
index 0000000..d669b25
--- /dev/null
+++ b/frontend/src/gql/Mutations.ts
@@ -0,0 +1,244 @@
+import { toastSuccess } from '$lib/Toasts';
+import {
+ Client,
+ type AnyVariables,
+ type OperationResult,
+ type OperationResultSource
+} from '@urql/svelte';
+import { isError, isSuccess, type RequiredName } from './Utils';
+import * as gql from './graphql';
+
+export type DeleteMutation = (client: Client, args: { ids: number | number[] }) => Promise<unknown>;
+
+const comicTypes = ['Comic'];
+const comicUpsertTypes = comicTypes.concat([
+ 'Artist',
+ 'Character',
+ 'Circle',
+ 'Namespace',
+ 'Collection',
+ 'Tag',
+ 'World'
+]);
+
+function handleResult<D, I extends AnyVariables>(result: OperationResult<D, I>): Promise<D> {
+ return new Promise((resolve, reject) => {
+ if (result.error) {
+ return reject(`${result.error.name}: ${result.error.message}`);
+ }
+
+ if (!result.data) {
+ return reject('Mutation resolved, but result contains no data.');
+ }
+
+ const obj = Object.values(result.data)[0];
+
+ if (isError(obj)) {
+ reject(obj.message);
+ } else if (isSuccess(obj)) {
+ toastSuccess(obj.message);
+ resolve(result.data);
+ }
+
+ reject('This should not happen.');
+ });
+}
+
+async function handleMutation<D, V extends AnyVariables>(
+ mutation: OperationResultSource<OperationResult<D, V>>
+) {
+ return await mutation.toPromise().then(handleResult);
+}
+
+export async function addComic(client: Client, args: gql.AddComicMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddComicDocument, args, {
+ additionalTypenames: comicTypes.concat('Archive', 'Page')
+ })
+ );
+}
+
+export async function updateComics(client: Client, args: gql.UpdateComicsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpdateComicsDocument, args, {
+ additionalTypenames: comicTypes
+ })
+ );
+}
+
+export async function upsertComics(client: Client, args: gql.UpsertComicsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpsertComicsDocument, args, {
+ additionalTypenames: comicUpsertTypes
+ })
+ );
+}
+
+export async function updateArchives(client: Client, args: gql.UpdateArchivesMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpdateArchivesDocument, args, {
+ additionalTypenames: ['Archive']
+ })
+ );
+}
+
+export async function deleteArchives(client: Client, args: gql.DeleteArchivesMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.DeleteArchivesDocument, args, {
+ additionalTypenames: comicTypes.concat('Archive')
+ })
+ );
+}
+
+export async function deleteComics(client: Client, args: gql.DeleteComicsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.DeleteComicsDocument, args, { additionalTypenames: comicTypes })
+ );
+}
+
+export async function addArtist(client: Client, args: gql.AddArtistMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddArtistDocument, args, { additionalTypenames: ['ArtistFilterResult'] })
+ );
+}
+
+export async function updateArtists(client: Client, args: gql.UpdateArtistsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpdateArtistsDocument, args, { additionalTypenames: ['Artist'] })
+ );
+}
+
+export async function deleteArtists(client: Client, args: gql.DeleteArtistsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.DeleteArtistsDocument, args, {
+ additionalTypenames: ['Artist']
+ })
+ );
+}
+
+export async function addCharacter(client: Client, args: gql.AddCharacterMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddCharacterDocument, args, {
+ additionalTypenames: ['CharacterFilterResult']
+ })
+ );
+}
+
+export async function updateCharacters(
+ client: Client,
+ args: gql.UpdateCharactersMutationVariables
+) {
+ return await handleMutation(
+ client.mutation(gql.UpdateCharactersDocument, args, { additionalTypenames: ['Character'] })
+ );
+}
+
+export async function deleteCharacters(
+ client: Client,
+ args: gql.DeleteCharactersMutationVariables
+) {
+ return await handleMutation(
+ client.mutation(gql.DeleteCharactersDocument, args, {
+ additionalTypenames: ['Character']
+ })
+ );
+}
+
+export async function addCircle(client: Client, args: gql.AddCircleMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddCircleDocument, args, { additionalTypenames: ['CircleFilterResult'] })
+ );
+}
+
+export async function updateCircles(client: Client, args: gql.UpdateCirclesMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpdateCirclesDocument, args, { additionalTypenames: ['Circle'] })
+ );
+}
+
+export async function deleteCircles(client: Client, args: gql.DeleteCirclesMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.DeleteCirclesDocument, args, {
+ additionalTypenames: ['Circle']
+ })
+ );
+}
+
+export async function addNamespace(client: Client, args: gql.AddNamespaceMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddNamespaceDocument, args, {
+ additionalTypenames: ['NamespaceFilterResult', 'ComicTagFilterResult']
+ })
+ );
+}
+
+export async function updateNamespaces(
+ client: Client,
+ args: gql.UpdateNamespacesMutationVariables
+) {
+ return await handleMutation(
+ client.mutation(gql.UpdateNamespacesDocument, args, {
+ additionalTypenames: ['Namespace', 'ComicTag']
+ })
+ );
+}
+
+export async function deleteNamespaces(
+ client: Client,
+ args: gql.DeleteNamespacesMutationVariables
+) {
+ return await handleMutation(
+ client.mutation(gql.DeleteNamespacesDocument, args, {
+ additionalTypenames: ['NamespaceFilterResult', 'ComicTag']
+ })
+ );
+}
+
+export async function addTag(client: Client, args: gql.AddTagMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddTagDocument, args, {
+ additionalTypenames: ['TagFilterResult', 'ComicTagFilterResult']
+ })
+ );
+}
+
+export async function updateTags(client: Client, args: gql.UpdateTagsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpdateTagsDocument, args, {
+ additionalTypenames: ['Tag', 'ComicTag']
+ })
+ );
+}
+
+export async function deleteTags(client: Client, args: gql.DeleteTagsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.DeleteTagsDocument, args, {
+ additionalTypenames: ['TagFilterResult', 'ComicTag']
+ })
+ );
+}
+
+export async function addWorld(client: Client, args: gql.AddWorldMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.AddWorldDocument, args, { additionalTypenames: ['WorldFilterResult'] })
+ );
+}
+
+export async function updateWorlds(client: Client, args: gql.UpdateWorldsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.UpdateWorldsDocument, args, { additionalTypenames: ['World'] })
+ );
+}
+
+export async function deleteWorlds(client: Client, args: gql.DeleteWorldsMutationVariables) {
+ return await handleMutation(
+ client.mutation(gql.DeleteWorldsDocument, args, { additionalTypenames: ['World'] })
+ );
+}
+
+export type ArtistInput = RequiredName<gql.UpdateArtistInput>;
+export type CharacterInput = RequiredName<gql.UpdateCharacterInput>;
+export type CircleInput = RequiredName<gql.UpdateCircleInput>;
+export type NamespaceInput = RequiredName<gql.UpdateNamespaceInput>;
+export type TagInput = RequiredName<gql.UpdateTagInput>;
+export type WorldInput = RequiredName<gql.UpdateWorldInput>;