Newer
Older
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
import { PaginationOptions } from "../shared/pagination-options.model";
import { SortOptions } from "../shared/sort-options.model";
import {
DataAction, DataActionTypes, DataFindAllRequestAction,
DataSuccessAction, DataErrorAction, DataFindByIDRequestAction
} from "./data.actions";
import { OpaqueToken } from "@angular/core";
export interface DataRequestState {
service: OpaqueToken
scopeID: string;
resourceID: string;
resourceUUIDs: Array<String>;
resourceType: String;
isLoading: boolean;
errorMessage: string;
paginationOptions: PaginationOptions;
sortOptions: SortOptions;
timeAdded: number;
msToLive: number;
}
export interface DataState {
[key: string]: DataRequestState
}
// Object.create(null) ensures the object has no default js properties (e.g. `__proto__`)
const initialState = Object.create(null);
export const dataReducer = (state = initialState, action: DataAction): DataState => {
switch (action.type) {
case DataActionTypes.FIND_ALL_REQUEST: {
return findAllRequest(state, <DataFindAllRequestAction> action);
}
case DataActionTypes.FIND_BY_ID_REQUEST: {
return findByIDRequest(state, <DataFindByIDRequestAction> action);
}
case DataActionTypes.SUCCESS: {
return success(state, <DataSuccessAction> action);
}
case DataActionTypes.ERROR: {
return error(state, <DataErrorAction> action);
}
default: {
return state;
}
}
};
function findAllRequest(state: DataState, action: DataFindAllRequestAction): DataState {
return Object.assign({}, state, {
[action.payload.key]: {
service: action.payload.service,
scopeID: action.payload.scopeID,
resourceUUIDs: [],
isLoading: true,
errorMessage: undefined,
paginationOptions: action.payload.paginationOptions,
sortOptions: action.payload.sortOptions
}
});
}
function findByIDRequest(state: DataState, action: DataFindByIDRequestAction): DataState {
return Object.assign({}, state, {
[action.payload.key]: {
service: action.payload.service,
resourceID: action.payload.resourceID,
resourceUUIDs: [],
isLoading: true,
errorMessage: undefined,
}
});
}
function success(state: DataState, action: DataSuccessAction): DataState {
return Object.assign({}, state, {
[action.payload.key]: Object.assign({}, state[action.payload.key], {
isLoading: false,
resourceUUIDs: action.payload.resourceUUIDs,
errorMessage: undefined
})
});
}
function error(state: DataState, action: DataErrorAction): DataState {
return Object.assign({}, state, {
[action.payload.key]: Object.assign({}, state[action.payload.key], {
isLoading: false,
errorMessage: action.payload.errorMessage
})
});
}