1 |
|
2 |
|
3 | import type { Action, EndPointCb } from "./types";
|
4 |
|
5 | type RequestPageArgsTypes = {
|
6 | endpoint: string;
|
7 | endpointCb: EndPointCb;
|
8 | manageEntity: any;
|
9 | resultsKey: string;
|
10 | totalKey: string;
|
11 | pageArgName: string;
|
12 | idKey: string;
|
13 | page: number;
|
14 | token: string;
|
15 | };
|
16 |
|
17 | type ReceivePageArgsTypes = {
|
18 | endpoint: string;
|
19 | endpointCb: EndPointCb;
|
20 | manageEntity: any;
|
21 | pageArgName: string;
|
22 | idKey: string;
|
23 | page: number;
|
24 | token: string;
|
25 | items: Array<any>;
|
26 | total: number;
|
27 | error: bool;
|
28 | }
|
29 |
|
30 | import agent from "superagent";
|
31 |
|
32 | const requestPage = ({
|
33 | endpoint,
|
34 | endpointCb,
|
35 | manageEntity,
|
36 | resultsKey,
|
37 | totalKey,
|
38 | pageArgName,
|
39 | idKey,
|
40 | page,
|
41 | token,
|
42 | } : RequestPageArgsTypes) : Action => ({
|
43 | type : "@@redux-paginator-immutable/REQUEST_PAGE",
|
44 | meta : {
|
45 | endpoint,
|
46 | endpointCb,
|
47 | manageEntity,
|
48 | resultsKey,
|
49 | totalKey,
|
50 | pageArgName,
|
51 | idKey,
|
52 | },
|
53 | payload: {
|
54 | page,
|
55 | token,
|
56 | },
|
57 | });
|
58 |
|
59 | const receivePage = ({
|
60 | endpoint,
|
61 | endpointCb,
|
62 | manageEntity,
|
63 | pageArgName,
|
64 | idKey,
|
65 | page,
|
66 | token,
|
67 | items,
|
68 | error,
|
69 | total,
|
70 | } : ReceivePageArgsTypes) : Action => ({
|
71 | type : "@@redux-paginator-immutable/RECEIVE_PAGE",
|
72 | meta : {
|
73 | endpoint,
|
74 | endpointCb,
|
75 | manageEntity,
|
76 | pageArgName,
|
77 | idKey,
|
78 | },
|
79 | payload: {
|
80 | page,
|
81 | token,
|
82 | items,
|
83 | error,
|
84 | total,
|
85 | },
|
86 | });
|
87 |
|
88 | const resetView = (endpoint : string, token : string) : Action => ({
|
89 | type : "@@redux-paginator-immutable/RESET_VIEW",
|
90 | meta : {
|
91 | endpoint,
|
92 | },
|
93 | payload: {
|
94 | token,
|
95 | },
|
96 | });
|
97 |
|
98 | const changeView = (endpoint : string, {
|
99 | token,
|
100 | view,
|
101 | } : { token : string, view : number }) : Action => ({
|
102 | type : "@@redux-paginator-immutable/CHANGE_VIEW",
|
103 | meta : {
|
104 | endpoint,
|
105 | },
|
106 | payload: {
|
107 | token,
|
108 | view,
|
109 | },
|
110 | });
|
111 |
|
112 | const clearData = (endpoint : string) : Action => ({
|
113 | type : "@@redux-paginator-immutable/CLEAR_DATA",
|
114 | meta : {
|
115 | endpoint,
|
116 | },
|
117 | });
|
118 |
|
119 |
|
120 |
|
121 |
|
122 | type FetchDataItem = {
|
123 | dataItemURL: string;
|
124 | endpoint: string;
|
125 | normalizeDataItem: any;
|
126 | id: string;
|
127 | }
|
128 |
|
129 | const fetchDataItemRequest = ({ dataItemURL, normalizeDataItem, id } : FetchDataItem) : Promise<*> => (
|
130 | new Promise((resolve, reject) => (
|
131 | agent.
|
132 | get(`${dataItemURL}/${id}`).
|
133 | set("Accept", "application/json").
|
134 | end(normalizeDataItem(resolve, reject))
|
135 | )) : Promise<any>
|
136 | );
|
137 |
|
138 | export const fetchItem = (things : FetchDataItem) : any => ({
|
139 | type : "@@redux-paginator-immutable/FETCH_ITEM_DATA",
|
140 | payload : fetchDataItemRequest(things),
|
141 | meta : {
|
142 | id : things.id,
|
143 | endpoint : things.endpoint,
|
144 | },
|
145 | });
|
146 |
|
147 | export default {
|
148 | clearData,
|
149 | requestPage,
|
150 | receivePage,
|
151 | resetView,
|
152 | changeView,
|
153 | };
|
154 |
|
\ | No newline at end of file |