From 8f4da52d1fead52616b2c02c5f9f9ae024632081 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Thu, 26 Sep 2024 13:59:37 +0200 Subject: [PATCH] Add optimistic response to server settings mutation --- src/lib/requests/RequestManager.ts | 20 +++++++++++++++++++- src/lib/requests/client/GraphQLClient.ts | 8 ++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts index b2cd4650..8a8d247c 100644 --- a/src/lib/requests/RequestManager.ts +++ b/src/lib/requests/RequestManager.ts @@ -133,6 +133,7 @@ import { SetMangaMetadataMutationVariables, SetSourceMetadataMutation, SetSourceMetadataMutationVariables, + SettingsType, SortOrder, SourcePreferenceChangeInput, StartDownloaderMutation, @@ -2657,7 +2658,24 @@ export class RequestManager { public useUpdateServerSettings( options?: MutationHookOptions, ): AbortableApolloUseMutationResponse { - return this.doRequest(GQLMethod.USE_MUTATION, UPDATE_SERVER_SETTINGS, undefined, options); + const [mutate, result] = this.doRequest(GQLMethod.USE_MUTATION, UPDATE_SERVER_SETTINGS, undefined, options); + + const wrappedMutate = async (mutateOptions: Parameters[0]) => + mutate({ + optimisticResponse: { + __typename: 'Mutation', + setSettings: { + __typename: 'SetSettingsPayload', + settings: { + __typename: 'SettingsType', + ...(mutateOptions?.variables?.input.settings ?? {}), + } as SettingsType, + }, + }, + ...mutateOptions, + }); + + return [wrappedMutate, result]; } public useGetLastGlobalUpdateTimestamp( diff --git a/src/lib/requests/client/GraphQLClient.ts b/src/lib/requests/client/GraphQLClient.ts index 991b05aa..921c6d7e 100644 --- a/src/lib/requests/client/GraphQLClient.ts +++ b/src/lib/requests/client/GraphQLClient.ts @@ -144,6 +144,14 @@ const typePolicies: StrictTypedTypePolicies = { return existingWithAppendedIncoming; }, }, + settings: { + merge(existing, incoming) { + return { + ...(existing ?? {}), + ...(incoming ?? {}), + }; + }, + }, }, }, };