Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 2x 2x 2x 2x 8x 8x 2x 4x | import { BaseMutationOptionsWithState, MutationTupleWithState } from './types' import { CoreEvents, CoreState, EventTypeMap, MutationStates, MutationStatesSubject, } from '@graphprotocol/mutations' import { useEffect, useState } from 'react' import { useMutation as apolloUseMutation, MutationHookOptions, } from '@apollo/react-hooks' import { OperationVariables } from '@apollo/react-common' import { DocumentNode } from 'graphql' export const useMutation = < TState = CoreState, TEventMap extends EventTypeMap = CoreEvents, TData = any, TVariables = OperationVariables >( mutation: DocumentNode, options?: MutationHookOptions<TData, TVariables>, ): MutationTupleWithState<TState, TEventMap, TData, TVariables> => { const [state, setState] = useState({} as MutationStates<TState, TEventMap>) const [observable] = useState(new MutationStatesSubject<TState, TEventMap>({})) const graphContext = { _rootSub: observable, } const updatedOptions = options ? { ...options, context: { ...options.context, client: options.client, ...graphContext, }, } : { context: { ...graphContext, }, } const [execute, result] = apolloUseMutation(mutation, updatedOptions) useEffect(() => { let subscription = observable.subscribe( (result: MutationStates<TState, TEventMap>) => { if (result) { setState(result) } }, ) return () => subscription.unsubscribe() }, [observable, setState]) return [ execute, { ...result, state, }, ] } export const Mutation = < TState = CoreState, TEventMap extends EventTypeMap = CoreEvents, TData = any, TVariables = OperationVariables >( props: BaseMutationOptionsWithState<TState, TEventMap, TData, TVariables>, ) => { const [runMutation, result] = useMutation<TState, TEventMap>(props.mutation, props) return props.children ? props.children(runMutation, result) : null } |