badmfck-signal
Version:
An implementation of a signaling mechanism used to connect components and transfer data between them
56 lines (55 loc) • 1.93 kB
TypeScript
/**
*
* Binder provide functionality to bind data to any component
* T - request type
* K - data type
*
* To use Binder you need to create instance of it and provide request and response types
* Use request() to send request to data source via request pipeline, anyone can subscribe to request pipeline
* Use subscribe() to request data from source via response pipeline, anyone can subscribe to response pipeline
* Use execute() to request data from source and wait for response
* Use use() to bind data to react component, before using it you need to setup react hooks, by calling Binder.setupReact(useState,useEffect)
*
*/
export declare class Binder<T, K> {
private static reactUseState;
private static reactUseEffect;
private static nextID;
name: string;
type: "signal" | "request" | "binder";
private readyListener;
private requestListener;
constructor(name?: string);
/**
* Setup react hook before using it
* @param useState - reference to react useState
* @param useEffect - reference to react useEffect
*/
static setupReact(useState: any, useEffect: any): void;
/**
subscribe to request pipeline
*/
onRequest(cb: (data: T | null) => void): void;
/**
subscribe to response pipeline
*/
subscribe(cb: (data: K | null) => void): void;
/**
invoke response pipeline
*/
invoke(data: K): void;
request(req: T | null): void;
/**
Execute binder & wait for results
*/
execute(req: T | null): Promise<K | null>;
/**
* Binder hook
* request - request object for data loading procedure
* initial - initial data object
* dependency - react dependency array
* return - array [data,busy], where first element - Binded data, second element - Busy indicator
*/
use(request?: T, initial?: K, dependency?: any[]): [K | null, boolean];
clear(): void;
}