@speckle/apollo-composable
Version:
Apollo GraphQL for Vue Composition API
59 lines (58 loc) • 3.53 kB
TypeScript
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 {};