UNPKG

@speckle/apollo-composable

Version:

Apollo GraphQL for Vue Composition API

59 lines (58 loc) 3.53 kB
import { DocumentNode } from 'graphql'; import { Ref } from 'vue-demi'; import type { OperationVariables, SubscriptionOptions, FetchResult, Observable, TypedDocumentNode, ApolloError, ApolloClient } from '@apollo/client/core/index.js'; import { ReactiveFunction } from './util/ReactiveFunction'; export interface UseSubscriptionOptions<TResult = any, TVariables = OperationVariables> extends Omit<SubscriptionOptions<TVariables>, 'query' | 'variables'> { clientId?: string; enabled?: boolean | Ref<boolean>; throttle?: number; debounce?: number; } type DocumentParameter<TResult, TVariables> = DocumentNode | Ref<DocumentNode> | ReactiveFunction<DocumentNode> | TypedDocumentNode<TResult, TVariables> | Ref<TypedDocumentNode<TResult, TVariables>> | ReactiveFunction<TypedDocumentNode<TResult, TVariables>>; type VariablesParameter<TVariables> = TVariables | Ref<TVariables> | ReactiveFunction<TVariables>; type OptionsParameter<TResult, TVariables> = UseSubscriptionOptions<TResult, TVariables> | Ref<UseSubscriptionOptions<TResult, TVariables>> | ReactiveFunction<UseSubscriptionOptions<TResult, TVariables>>; export interface OnResultContext { client: ApolloClient<any>; } export interface OnErrorContext { client: ApolloClient<any>; } export interface UseSubscriptionReturn<TResult, TVariables> { result: Ref<TResult | null | undefined>; loading: Ref<boolean>; error: Ref<ApolloError | null>; start: () => void; stop: () => void; restart: () => void; document: Ref<DocumentNode>; variables: Ref<TVariables | undefined>; options: UseSubscriptionOptions<TResult, TVariables> | Ref<UseSubscriptionOptions<TResult, TVariables>>; subscription: Ref<Observable<FetchResult<TResult, Record<string, any>, Record<string, any>>> | null>; onResult: (fn: (param: FetchResult<TResult, Record<string, any>, Record<string, any>>, context: OnResultContext) => void) => { off: () => void; }; onError: (fn: (param: ApolloError, context: OnErrorContext) => void) => { off: () => void; }; } /** * Use a subscription that does not require variables or options. * */ export declare function useSubscription<TResult = any>(document: DocumentParameter<TResult, undefined>): UseSubscriptionReturn<TResult, undefined>; /** * Use a subscription that requires options but not variables. */ export declare function useSubscription<TResult = any>(document: DocumentParameter<TResult, undefined>, variables: undefined | null, options: OptionsParameter<TResult, null>): UseSubscriptionReturn<TResult, null>; /** * Use a subscription that requires variables. */ export declare function useSubscription<TResult = any, TVariables extends OperationVariables = OperationVariables>(document: DocumentParameter<TResult, TVariables>, variables: VariablesParameter<TVariables>): UseSubscriptionReturn<TResult, TVariables>; /** * Use a subscription that has optional variables. */ export declare function useSubscription<TResult = any, TVariables extends OperationVariables = OperationVariables>(document: DocumentParameter<TResult, TVariables>): UseSubscriptionReturn<TResult, TVariables>; /** * Use a subscription that requires variables and options. */ export declare function useSubscription<TResult = any, TVariables extends OperationVariables = OperationVariables>(document: DocumentParameter<TResult, TVariables>, variables: VariablesParameter<TVariables>, options: OptionsParameter<TResult, TVariables>): UseSubscriptionReturn<TResult, TVariables>; export {};