/
providers.tsx
81 lines (75 loc) · 1.98 KB
/
providers.tsx
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
import {
State,
reducer,
ExternalCacheProvider,
CacheProvider,
Manager,
PromiseifyMiddleware,
} from 'rest-hooks';
import React from 'react';
// Extension of the DeepPartial type defined by Redux which handles unknown
type DeepPartialWithUnknown<T> = {
[K in keyof T]?: T[K] extends unknown
? any
: T[K] extends object
? DeepPartialWithUnknown<T[K]>
: T[K];
};
let makeExternalCacheProvider: (
managers: Manager[],
initialState?: DeepPartialWithUnknown<State<any>>,
) => (props: { children: React.ReactNode }) => JSX.Element;
try {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { createStore, applyMiddleware } = require('redux');
makeExternalCacheProvider = (
managers: Manager[],
initialState?: DeepPartialWithUnknown<State<any>>,
) => {
const store = createStore(
reducer,
initialState,
applyMiddleware(
...managers.map(manager => manager.getMiddleware()),
PromiseifyMiddleware,
),
);
return function ConfiguredExternalCacheProvider({
children,
}: {
children: React.ReactNode;
}) {
return (
<ExternalCacheProvider store={store} selector={(s: State<any>) => s}>
{children}
</ExternalCacheProvider>
);
};
};
} catch (e) {
makeExternalCacheProvider = (
managers: Manager[],
initialState?: DeepPartialWithUnknown<State<any>>,
): ((props: { children: React.ReactNode }) => JSX.Element) => {
throw new Error(
'Using makeExternalCacheProvider() requires redux to be installed as a peerDependency to rest-hooks',
);
};
}
const makeCacheProvider = (
managers: Manager[],
initialState?: State<unknown>,
) => {
return function ConfiguredCacheProvider({
children,
}: {
children: React.ReactNode;
}) {
return (
<CacheProvider managers={managers} initialState={initialState}>
{children}
</CacheProvider>
);
};
};
export { makeExternalCacheProvider, makeCacheProvider };