From ac6f6beb2e73571f2372dda91b43641fbc1bf1e6 Mon Sep 17 00:00:00 2001 From: Mikkel Birkegaard Andersen Date: Sun, 15 Dec 2019 14:16:56 +0100 Subject: [PATCH 1/2] Add optimistic response --- src/ApolloHooksMutation.re | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ApolloHooksMutation.re b/src/ApolloHooksMutation.re index 86f62ab..be9184b 100644 --- a/src/ApolloHooksMutation.re +++ b/src/ApolloHooksMutation.re @@ -48,6 +48,8 @@ type options('a) = { awaitRefetchQueries: bool, [@bs.optional] update: (ApolloClient.generatedApolloClient, mutationResult('a)) => unit, + [@bs.optional] + optimisticResponse: Js.Json.t, }; type jsResult = { @@ -65,6 +67,7 @@ type mutation('a) = ~client: ApolloClient.generatedApolloClient=?, ~refetchQueries: refetchQueries=?, ~awaitRefetchQueries: bool=?, + ~optimisticResponse: Js.Json.t=?, unit ) => Js.Promise.t(controlledVariantResult('a)); @@ -85,6 +88,7 @@ let useMutation: ~update: (ApolloClient.generatedApolloClient, mutationResult('data)) => unit =?, + ~optimisticResponse: Js.Json.t=?, ApolloHooksTypes.graphqlDefinition('data, _, _) ) => ( @@ -98,6 +102,7 @@ let useMutation: ~refetchQueries=?, ~awaitRefetchQueries=?, ~update=?, + ~optimisticResponse=?, (parse, query, _), ) => { let (jsMutate, jsResult) = @@ -109,6 +114,7 @@ let useMutation: ~refetchQueries?, ~awaitRefetchQueries?, ~update?, + ~optimisticResponse?, (), ), ); @@ -121,6 +127,7 @@ let useMutation: ~client=?, ~refetchQueries=?, ~awaitRefetchQueries=?, + ~optimisticResponse=?, (), ) => jsMutate(. @@ -129,6 +136,7 @@ let useMutation: ~client?, ~refetchQueries?, ~awaitRefetchQueries?, + ~optimisticResponse?, (), ), ) From 370ceecf02cf82a74e48a5badebde36e5083a564 Mon Sep 17 00:00:00 2001 From: Mikkel Birkegaard Andersen Date: Sun, 15 Dec 2019 14:17:09 +0100 Subject: [PATCH 2/2] Add optimistic response to example --- examples/persons/src/EditPerson.re | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/examples/persons/src/EditPerson.re b/examples/persons/src/EditPerson.re index 02d3ae6..5d8cdb3 100644 --- a/examples/persons/src/EditPerson.re +++ b/examples/persons/src/EditPerson.re @@ -11,6 +11,34 @@ module EditPersonMutation = [%graphql |} ]; +module OptimisticResponse = { + type t = { + . + "__typename": string, + "updatePerson": { + . + "__typename": string, + "age": int, + "id": string, + "name": string, + }, + }; + + external cast: t => Js.Json.t = "%identity"; + + let make = (~id, ~name, ~age) => + { + "__typename": "Mutation", + "updatePerson": { + "__typename": "Person", + "id": id, + "name": name, + "age": age, + }, + } + ->cast; +}; + type state = { id: string, age: option(int), @@ -72,6 +100,8 @@ let make = () => { ~name=state.name, (), ), + ~optimisticResponse= + OptimisticResponse.make(~id=state.id, ~name=state.name, ~age), (), ) |> ignore