/
use-request-events.types.ts
108 lines (100 loc) · 3.76 KB
/
use-request-events.types.ts
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import {
Dispatcher,
ExtractErrorType,
CacheValueType,
ExtractResponseType,
LoggerType,
ProgressType,
ExtractAdapterReturnType,
RequestEventType,
RequestInstance,
ResponseDetailsType,
} from "@hyper-fetch/core";
import { UseTrackedStateActions } from "helpers";
// Misc
export type UseRequestEventsDataMap = { unmount: VoidFunction };
export type UseRequestEventsLifecycleMap = Map<string, { unmount: VoidFunction }>;
// Props
export type UseRequestEventsPropsType<T extends RequestInstance> = {
request: T;
dispatcher: Dispatcher;
logger: LoggerType;
actions: UseTrackedStateActions<T>;
setCacheData: (cacheData: CacheValueType<ExtractResponseType<T>, ExtractErrorType<T>>) => void;
};
export type UseRequestEventsActionsType<T extends RequestInstance> = {
/**
* Callback that allows canceling ongoing requests from the given queueKey.
*/
abort: () => void;
/**
* Helper hook listening on success response.
*/
onSuccess: (callback: OnSuccessCallbackType<T>) => void;
/**
* Helper hook listening on error response.
*/
onError: (callback: OnErrorCallbackType<T>) => void;
/**
* Helper hook listening on aborting of requests. Abort events are not triggering onError callbacks.
*/
onAbort: (callback: OnErrorCallbackType<T>) => void;
/**
* Helper hook listening on request going into offline awaiting for network connection to be restored. It will not trigger onError when 'offline' mode is set on request.
*/
onOfflineError: (callback: OnErrorCallbackType<T>) => void;
/**
* Helper hook listening on any response.
*/
onFinished: (callback: OnFinishedCallbackType<T>) => void;
/**
* Helper hook listening on request start.
*/
onRequestStart: (callback: OnStartCallbackType<T>) => void;
/**
* Helper hook listening on response start(before we receive all data from server).
*/
onResponseStart: (callback: OnStartCallbackType<T>) => void;
/**
* Helper hook listening on download progress ETA. We can later match given requests by their id's or request instance which holds all data which is being transferred.
*/
onDownloadProgress: (callback: OnProgressCallbackType) => void;
/**
* Helper hook listening on upload progress ETA. We can later match given requests by their id's or request instance which holds all data which is being transferred.
*/
onUploadProgress: (callback: OnProgressCallbackType) => void;
};
// Return
export type UseRequestEventsReturnType<T extends RequestInstance> = [
UseRequestEventsActionsType<T>,
{
addDataListener: (request: RequestInstance) => VoidFunction;
clearDataListener: VoidFunction;
addLifecycleListeners: (request: RequestInstance, requestId?: string) => VoidFunction;
removeLifecycleListener: (requestId: string) => void;
clearLifecycleListeners: () => void;
},
];
// Lifecycle
export type CallbackParameters<Request, ResponseType> = {
response: ResponseType;
details: ResponseDetailsType;
request: Request;
};
export type OnSuccessCallbackType<Request extends RequestInstance> = (
params: CallbackParameters<Request, ExtractResponseType<Request>>,
) => void | Promise<void>;
export type OnErrorCallbackType<Request extends RequestInstance> = (
params: CallbackParameters<Request, ExtractErrorType<Request>>,
) => void | Promise<void>;
export type OnFinishedCallbackType<Request extends RequestInstance> = (
params: CallbackParameters<Request, ExtractAdapterReturnType<Request>>,
) => void | Promise<void>;
export type OnStartCallbackType<Request extends RequestInstance> = (params: {
details: RequestEventType<Request>;
request: Request;
}) => void | Promise<void>;
export type OnProgressCallbackType = <Request extends RequestInstance>(
progress: ProgressType,
details: RequestEventType<Request>,
) => void | Promise<void>;