forked from birdiecare/galette
-
Notifications
You must be signed in to change notification settings - Fork 0
/
redux.ts
41 lines (35 loc) · 1.28 KB
/
redux.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
import {
reduceList as originalReduceList,
reduceItems as originalReduceItems,
reduceListAndItems as originalReduceListAndItems,
Action,
ReduceListOptions, ActionLifecycleOptions,
} from "../store/redux/reducers";
export type HydraOptions = ActionLifecycleOptions & {
listKeyInState: string;
payloadResolver: (action : Action) => any;
}
const addDefaultHydraOptions = (options : HydraOptions) : ReduceListOptions => {
const {payloadResolver, ...rest} = options;
return {
itemIdentifierResolver: (item: any) => {
return item['@id'];
},
items: (action: Action) => {
return payloadResolver(action)['hydra:member'] || [];
},
totalItems: (action: Action) => {
return payloadResolver(action)['hydra:totalItems'];
},
...rest
}
};
export function reduceList(state : object, action : Action, options : HydraOptions) {
return originalReduceList(state, action, addDefaultHydraOptions(options));
}
export function reduceItems(state : object, action : Action, options : HydraOptions) {
return originalReduceItems(state, action, addDefaultHydraOptions(options));
}
export function reduceListAndItems(state : object, action : Action, options : HydraOptions) {
return originalReduceListAndItems(state, action, addDefaultHydraOptions(options))
}