/
use-tracked-state.types.ts
105 lines (100 loc) · 3.4 KB
/
use-tracked-state.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
import {
Dispatcher,
ExtractErrorType,
CacheValueType,
ExtractResponseType,
RequestInstance,
LoggerType,
ExtractAdapterType,
ExtractAdapterStatusType,
ExtractAdapterExtraType,
ExtractAdapterReturnType,
NullableType,
} from "@hyper-fetch/core";
import { isEqual } from "utils";
export type UseTrackedStateProps<T extends RequestInstance> = {
request: T;
logger: LoggerType;
initialData: NullableType<Partial<ExtractAdapterReturnType<T>>>;
dispatcher: Dispatcher;
dependencyTracking: boolean;
defaultCacheEmitting?: boolean;
deepCompare: boolean | typeof isEqual;
};
export type UseTrackedStateReturn<T extends RequestInstance> = [
UseTrackedStateType<T>,
UseTrackedStateActions<T>,
{
setRenderKey: (renderKey: keyof UseTrackedStateType<T>) => void;
setCacheData: (cacheData: CacheValueType<ExtractResponseType<T>, ExtractErrorType<T>>) => void;
getStaleStatus: () => boolean;
},
];
export type UseTrackedStateType<T extends RequestInstance = RequestInstance> = {
/**
* Request response data
*/
data: null | ExtractResponseType<T>;
/**
* Request response error
*/
error: null | ExtractErrorType<T>;
/**
* Request loading state
*/
loading: boolean;
/**
* Request status
*/
status: ExtractAdapterStatusType<ExtractAdapterType<T>>;
/**
* Request additional response data
*/
extra: ExtractAdapterExtraType<ExtractAdapterType<T>>;
/**
* Information whether request succeeded
*/
success: boolean;
/**
* Request attempts
*/
retries: number;
/**
* Request response timestamp
*/
timestamp: null | Date;
};
export type UseTrackedStateActions<T extends RequestInstance> = {
/**
* Action to set custom data. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option.
*/
setData: (data: ExtractResponseType<T>, emitToCache?: boolean) => void;
/**
* Action to set custom error. We can do it locally(inside hook state) or in all hooks with 'emitToCache' option.
*/
setError: (error: ExtractErrorType<T>, emitToCache?: boolean) => void;
/**
* Action to set custom loading. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option
*/
setLoading: (loading: boolean, emitToHooks?: boolean) => void;
/**
* Action to set custom status. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option
*/
setStatus: (status: ExtractAdapterStatusType<ExtractAdapterType<T>>, emitToCache?: boolean) => void;
/**
* Action to set custom success. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option
*/
setSuccess: (success: boolean, emitToCache?: boolean) => void;
/**
* Action to set custom additional data. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option
*/
setExtra: (extra: ExtractAdapterExtraType<ExtractAdapterType<T>>, emitToCache?: boolean) => void;
/**
* Action to set custom retries count. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option
*/
setRetries: (retries: number, emitToCache?: boolean) => void;
/**
* Action to set custom timestamp. We can do it locally(inside hook state) or in cache(all related sources) with 'emitToCache' option
*/
setTimestamp: (timestamp: Date, emitToCache?: boolean) => void;
};