redux-paginator-immutable 19.0.2 → 19.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actions.d.ts +6 -2
- package/actions.js +6 -2
- package/actions.js.map +1 -1
- package/agent.d.ts +3 -1
- package/agent.js +6 -5
- package/agent.js.map +1 -1
- package/createPaginator.js +8 -1
- package/createPaginator.js.map +1 -1
- package/fetcherRegistry.d.ts +2 -0
- package/fetcherRegistry.js +10 -0
- package/fetcherRegistry.js.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +1 -1
- package/paginatorMiddleware.d.ts +2 -1
- package/paginatorMiddleware.js +81 -41
- package/paginatorMiddleware.js.map +1 -1
- package/reducerOperations.js +4 -3
- package/reducerOperations.js.map +1 -1
- package/types.d.ts +8 -0
package/actions.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EndPointCb, Action } from "./types";
|
|
2
2
|
type RequestPageArgsTypes = {
|
|
3
|
+
key: string;
|
|
3
4
|
endpoint: string;
|
|
4
5
|
endpointCb: EndPointCb;
|
|
5
6
|
manageEntity: any;
|
|
@@ -7,6 +8,8 @@ type RequestPageArgsTypes = {
|
|
|
7
8
|
totalKey: string;
|
|
8
9
|
pageArgName: string;
|
|
9
10
|
idKey: string;
|
|
11
|
+
cursorKey?: string;
|
|
12
|
+
cursorArgName: string;
|
|
10
13
|
page: number;
|
|
11
14
|
token: string;
|
|
12
15
|
};
|
|
@@ -21,6 +24,7 @@ type ReceivePageArgsTypes = {
|
|
|
21
24
|
items: Array<any>;
|
|
22
25
|
total: number;
|
|
23
26
|
error: boolean;
|
|
27
|
+
cursor?: string;
|
|
24
28
|
};
|
|
25
29
|
type FetchDataItem = {
|
|
26
30
|
dataItemURL: string;
|
|
@@ -31,8 +35,8 @@ type FetchDataItem = {
|
|
|
31
35
|
export declare const fetchItem: (things: FetchDataItem) => any;
|
|
32
36
|
declare const _default: {
|
|
33
37
|
clearData: (endpoint: string) => Action;
|
|
34
|
-
requestPage: ({ endpoint, endpointCb, manageEntity, resultsKey, totalKey, pageArgName, idKey, page, token, }: RequestPageArgsTypes) => Action;
|
|
35
|
-
receivePage: ({ endpoint, endpointCb, manageEntity, pageArgName, idKey, page, token, items, error, total, }: ReceivePageArgsTypes) => Action;
|
|
38
|
+
requestPage: ({ key, endpoint, endpointCb, manageEntity, resultsKey, totalKey, pageArgName, idKey, cursorKey, cursorArgName, page, token, }: RequestPageArgsTypes) => Action;
|
|
39
|
+
receivePage: ({ endpoint, endpointCb, manageEntity, pageArgName, idKey, page, token, items, error, total, cursor, }: ReceivePageArgsTypes) => Action;
|
|
36
40
|
resetView: (endpoint: string, token: string) => Action;
|
|
37
41
|
changeView: (endpoint: string, { token, view, }: {
|
|
38
42
|
token: string;
|
package/actions.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import agent from "superagent";
|
|
2
|
-
const requestPage = ({ endpoint, endpointCb, manageEntity, resultsKey, totalKey, pageArgName, idKey, page, token, }) => ({
|
|
2
|
+
const requestPage = ({ key, endpoint, endpointCb, manageEntity, resultsKey, totalKey, pageArgName, idKey, cursorKey, cursorArgName, page, token, }) => ({
|
|
3
3
|
type: "@@redux-paginator-immutable/REQUEST_PAGE",
|
|
4
4
|
meta: {
|
|
5
|
+
key,
|
|
5
6
|
endpoint,
|
|
6
7
|
endpointCb,
|
|
7
8
|
manageEntity,
|
|
@@ -9,12 +10,14 @@ const requestPage = ({ endpoint, endpointCb, manageEntity, resultsKey, totalKey,
|
|
|
9
10
|
totalKey,
|
|
10
11
|
pageArgName,
|
|
11
12
|
idKey,
|
|
13
|
+
cursorKey,
|
|
14
|
+
cursorArgName,
|
|
12
15
|
},
|
|
13
16
|
payload: {
|
|
14
17
|
page,
|
|
15
18
|
token,
|
|
16
19
|
},
|
|
17
|
-
}), receivePage = ({ endpoint, endpointCb, manageEntity, pageArgName, idKey, page, token, items, error, total, }) => ({
|
|
20
|
+
}), receivePage = ({ endpoint, endpointCb, manageEntity, pageArgName, idKey, page, token, items, error, total, cursor, }) => ({
|
|
18
21
|
type: "@@redux-paginator-immutable/RECEIVE_PAGE",
|
|
19
22
|
meta: {
|
|
20
23
|
endpoint,
|
|
@@ -29,6 +32,7 @@ const requestPage = ({ endpoint, endpointCb, manageEntity, resultsKey, totalKey,
|
|
|
29
32
|
items,
|
|
30
33
|
error,
|
|
31
34
|
total,
|
|
35
|
+
cursor,
|
|
32
36
|
},
|
|
33
37
|
}), resetView = (endpoint, token) => ({
|
|
34
38
|
type: "@@redux-paginator-immutable/RESET_VIEW",
|
package/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAC;AAgC/B,MAAM,WAAW,GAAG,CAAC,EACjB,GAAG,EACH,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAW,EACX,KAAK,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,KAAK,GACgB,EAAU,EAAE,CAAC,CAAC;IACnC,IAAI,EAAG,0CAA0C;IACjD,IAAI,EAAG;QACL,GAAG;QACH,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,WAAW;QACX,KAAK;QACL,SAAS;QACT,aAAa;KACd;IACD,OAAO,EAAE;QACP,IAAI;QACJ,KAAK;KACN;CACF,CAAC,EAEF,WAAW,GAAG,CAAC,EACb,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,GACe,EAAU,EAAE,CAAC,CAAC;IACnC,IAAI,EAAG,0CAA0C;IACjD,IAAI,EAAG;QACL,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,WAAW;QACX,KAAK;KACN;IACD,OAAO,EAAE;QACP,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;KACP;CACF,CAAC,EAEF,SAAS,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAU,EAAE,CAAC,CAAC;IACxD,IAAI,EAAG,wCAAwC;IAC/C,IAAI,EAAG;QACL,QAAQ;KACT;IACD,OAAO,EAAE;QACP,KAAK;KACN;CACF,CAAC,EAEF,UAAU,GAAG,CAAC,QAAgB,EAAE,EAC9B,KAAK,EACL,IAAI,GAIL,EAAU,EAAE,CAAC,CAAC;IACb,IAAI,EAAG,yCAAyC;IAChD,IAAI,EAAG;QACL,QAAQ;KACT;IACD,OAAO,EAAE;QACP,KAAK;QACL,IAAI;KACL;CACF,CAAC,EAEF,SAAS,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,CAAC;IACzC,IAAI,EAAG,wCAAwC;IAC/C,IAAI,EAAG;QACL,QAAQ;KACT;CACF,CAAC,CAAC;AAUL,MAAM,oBAAoB,GAAG,CAAC,EAC5B,WAAW,EACX,iBAAiB,EACjB,EAAE,GACY,EAAgB,EAAE,CAChC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAC/B,KAAK;IACH,GAAG,CAAC,GAAG,WAAW,IAAI,EAAE,EAAE,CAAC;IAC3B,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACjC,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAC1C,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAqB,EAAO,EAAE,CAAC,CAAC;IACxD,IAAI,EAAM,6CAA6C;IACvD,OAAO,EAAG,oBAAoB,CAAC,MAAM,CAAC;IACtC,IAAI,EAAM;QACR,EAAE,EAAS,MAAM,CAAC,EAAE;QACpB,QAAQ,EAAG,MAAM,CAAC,QAAQ;KAC3B;CACF,CAAC,CAAC;AAEH,eAAe;IACb,SAAS;IACT,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;CACX,CAAC"}
|
package/agent.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ type FetchPageArgs = {
|
|
|
3
3
|
pageArgName: string;
|
|
4
4
|
page: number;
|
|
5
5
|
token: string;
|
|
6
|
+
cursorArgName: string;
|
|
7
|
+
cursor?: string;
|
|
6
8
|
};
|
|
7
|
-
export declare const
|
|
9
|
+
export declare const fetchPage: ({ endpoint, pageArgName, page, token, cursorArgName, cursor, }: FetchPageArgs) => any;
|
|
8
10
|
export {};
|
package/agent.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/* eslint-disable no-bitwise*/
|
|
2
2
|
import qs from "query-string";
|
|
3
3
|
import agent from "superagent";
|
|
4
|
-
|
|
5
|
-
const parsedParams = qs.parse(params);
|
|
4
|
+
const buildSuffix = (options) => {
|
|
5
|
+
const { pageArgName, page, params, cursorArgName, cursor } = options, parsedParams = qs.parse(params), cursorParams = typeof cursor === "undefined" ? {} : { [cursorArgName]: cursor };
|
|
6
6
|
let finalParsedParams = {}, startString = "";
|
|
7
7
|
for (const key of Object.keys(parsedParams)) {
|
|
8
8
|
if (parsedParams[key] === null) {
|
|
@@ -16,11 +16,12 @@ export const buildSuffix = (pageArgName, page, params) => {
|
|
|
16
16
|
if (Object.keys(finalParsedParams).length > 0 && qs.extract(params) !== "") {
|
|
17
17
|
startString = params.replace(qs.extract(params), "");
|
|
18
18
|
}
|
|
19
|
-
return startString + qs.stringify(Object.assign(Object.assign({}, finalParsedParams), { [pageArgName]: page }), {
|
|
19
|
+
return startString + qs.stringify(Object.assign(Object.assign(Object.assign({}, finalParsedParams), { [pageArgName]: page }), cursorParams), {
|
|
20
20
|
encode: false,
|
|
21
21
|
}).replace(startString, "");
|
|
22
|
-
}
|
|
23
|
-
|
|
22
|
+
};
|
|
23
|
+
export const fetchPage = ({ endpoint, pageArgName, page, token, cursorArgName, cursor, }) => {
|
|
24
|
+
const suffix = buildSuffix({ pageArgName, page, params: token, cursorArgName, cursor }), url = endpoint + suffix, promise = new Promise((resolve, reject) => (agent.
|
|
24
25
|
get(url).
|
|
25
26
|
end((err, res) => err ? reject(err) : resolve(res))));
|
|
26
27
|
return promise.then((res) => ({
|
package/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,8BAA8B;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAmB9B,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MACE,WAAW,GAAG,CAAC,OAA2B,EAAE,EAAE;IAC5C,MACE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,EAC9D,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAC/B,YAAY,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClF,IAAI,iBAAiB,GAAG,EAAE,EACxB,WAAW,GAAG,EAAE,CAAC;IAEnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,WAAW,IAAI,GAAG,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,iBAAiB,mCAAQ,iBAAiB,KACxC,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,WAAW,GAAG,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC;IAE3D,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3E,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,WAAW,GAAG,EAAE,CAAC,SAAS,+CAAM,iBAAiB,KACtD,CAAC,WAAW,CAAC,EAAE,IAAI,KAChB,YAAY,GACd;QACD,MAAM,EAAE,KAAK;KACd,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEJ,MAAM,CAAC,MACL,SAAS,GAAG,CAAC,EACX,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,KAAK,EACL,aAAa,EACb,MAAM,GACQ,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EACrF,GAAG,GAAG,QAAQ,GAAG,MAAM,EACvB,OAAO,GAAQ,IAAI,OAAO,CACxB,CAAC,OAAY,EAAE,MAAW,EAAE,EAAE,CAAC,CAC7B,KAAK;QACH,GAAG,CAAC,GAAG,CAAC;QACR,GAAG,CAAC,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAChE,CACF,CAAC;IAEJ,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAEpB,EAAE,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,GAAG,CAAC,IAAI;KACnB,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
|
package/createPaginator.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const defaultRowsPerLoad = 25;
|
|
2
2
|
import * as Immutable from "immutable";
|
|
3
3
|
import actions from "./actions.js";
|
|
4
|
+
import { registerFetcher } from "./fetcherRegistry.js";
|
|
4
5
|
import { dataItems as dataItemsReducer, items as itemsReducer, pages as pagesReducer } from "./reducers.js";
|
|
5
6
|
const getEndpoint = (data) => {
|
|
6
7
|
if (typeof data === "object") {
|
|
@@ -20,8 +21,9 @@ const getEndpoint = (data) => {
|
|
|
20
21
|
return reducer(state, action);
|
|
21
22
|
};
|
|
22
23
|
export const createPaginator = (endpointData, settings) => {
|
|
23
|
-
const { path: endpoint, cb: endpointCb, } = getEndpoint(endpointData), { key, normalizeDataItem, dataItemURL, manageEntity, resultsKey, totalKey = "Total", pageArgName = "page", idKey = "ID", rowsPerLoad = defaultRowsPerLoad, manipulateItems = (items) => items, } = settings, endpointedActions = {
|
|
24
|
+
const { path: endpoint, cb: endpointCb, } = getEndpoint(endpointData), { key, normalizeDataItem, dataItemURL, manageEntity, resultsKey, totalKey = "Total", pageArgName = "page", idKey = "ID", cursorKey, cursorArgName = "cursor", rowsPerLoad = defaultRowsPerLoad, manipulateItems = (items) => items, fetcher, } = settings, endpointedActions = {
|
|
24
25
|
requestPage: (page, token) => actions.requestPage({
|
|
26
|
+
key,
|
|
25
27
|
endpoint,
|
|
26
28
|
endpointCb,
|
|
27
29
|
manageEntity,
|
|
@@ -29,6 +31,8 @@ export const createPaginator = (endpointData, settings) => {
|
|
|
29
31
|
totalKey,
|
|
30
32
|
pageArgName,
|
|
31
33
|
idKey,
|
|
34
|
+
cursorKey,
|
|
35
|
+
cursorArgName,
|
|
32
36
|
page,
|
|
33
37
|
token,
|
|
34
38
|
}),
|
|
@@ -45,6 +49,9 @@ export const createPaginator = (endpointData, settings) => {
|
|
|
45
49
|
return actions.clearData(endpoint);
|
|
46
50
|
},
|
|
47
51
|
};
|
|
52
|
+
if (typeof fetcher === "function") {
|
|
53
|
+
registerFetcher(endpoint, fetcher);
|
|
54
|
+
}
|
|
48
55
|
return Object.assign({ key,
|
|
49
56
|
normalizeDataItem,
|
|
50
57
|
dataItemURL,
|
package/createPaginator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPaginator.js","sourceRoot":"","sources":["../src/createPaginator.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AACvC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAgBzG,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACL,IAAI,EAAG,IAAI,CAAC,IAAI;YAChB,EAAE,EAAK,IAAI,CAAC,EAAE;SACf,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAG,IAAI;QACX,EAAE,EAAK,IAAI;KACZ,CAAC;AACJ,CAAC,EACD,eAAe,GAAG,CAAC,QAAiB,EAAE,OAAa,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,MAAe,EAAE,EAAE;IACnG,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC,CAAC;AAEJ,MAAM,CAAC,MACL,eAAe,GAAG,CAAC,YAAsB,EAAE,QAA2B,EAAE,EAAE;IACxE,MACE,EACE,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,UAAU,GACf,GAAG,WAAW,CAAC,YAAY,CAAC,EAC7B,EACE,GAAG,EACH,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,GAAG,OAAO,EAClB,WAAW,GAAG,MAAM,EACpB,KAAK,GAAG,IAAI,EACZ,WAAW,GAAG,kBAAkB,EAChC,eAAe,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"createPaginator.js","sourceRoot":"","sources":["../src/createPaginator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Endpoint → custom fetcher. A paginator created with a `fetcher` setting
|
|
2
|
+
// registers it here; paginatorMiddleware uses it instead of the built-in
|
|
3
|
+
// superagent HTTP call. Lets non-HTTP transports (e.g. Wails IPC) plug in
|
|
4
|
+
// without replacing the middleware. Endpoints without a registered fetcher
|
|
5
|
+
// keep the original superagent behaviour unchanged.
|
|
6
|
+
const registry = new Map();
|
|
7
|
+
export const registerFetcher = (endpoint, fetcher) => {
|
|
8
|
+
registry.set(endpoint, fetcher);
|
|
9
|
+
}, getFetcher = (endpoint) => registry.get(endpoint);
|
|
10
|
+
//# sourceMappingURL=fetcherRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcherRegistry.js","sourceRoot":"","sources":["../src/fetcherRegistry.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,oDAAoD;AAEpD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE5C,MAAM,CAAC,MACL,eAAe,GAAG,CAAC,QAAgB,EAAE,OAAgB,EAAQ,EAAE;IAC7D,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,EACD,UAAU,GAAG,CAAC,QAAgB,EAAuB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC"}
|
package/index.d.ts
CHANGED
|
@@ -9,3 +9,4 @@ export { default as paginatorMiddleware } from "./paginatorMiddleware";
|
|
|
9
9
|
export { default as reducerOperations } from "./reducerOperations";
|
|
10
10
|
export { default as paginatorSelectors } from "./selectors";
|
|
11
11
|
export { manageDataEntity, manageEntity, manipulateDataItems, manipulateItems } from "./util";
|
|
12
|
+
export type { Fetcher, PaginatorSettings } from "./types";
|
package/package.json
CHANGED
package/paginatorMiddleware.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Action, Dispatch } from "./types";
|
|
2
|
-
declare const paginatorMiddleware: ({ dispatch }: {
|
|
2
|
+
declare const paginatorMiddleware: ({ dispatch, getState }: {
|
|
3
3
|
dispatch: Dispatch;
|
|
4
|
+
getState: () => any;
|
|
4
5
|
}) => (next: any) => (action: Action) => any;
|
|
5
6
|
export default paginatorMiddleware;
|
package/paginatorMiddleware.js
CHANGED
|
@@ -1,33 +1,61 @@
|
|
|
1
1
|
/* eslint-disable no-console, max-lines-per-function */
|
|
2
|
-
import { REQUEST_PAGE } from "./actionTypes.js";
|
|
2
|
+
import { CLEAR_DATA, REQUEST_PAGE } from "./actionTypes.js";
|
|
3
3
|
import actions from "./actions.js";
|
|
4
4
|
import { fetchPage } from "./agent.js";
|
|
5
|
-
|
|
5
|
+
import { getFetcher } from "./fetcherRegistry.js";
|
|
6
|
+
const { receivePage } = actions, readSlice = (container, name) => (typeof (container === null || container === void 0 ? void 0 : container.get) === "function" ? container.get(name) : container === null || container === void 0 ? void 0 : container[name]), readStoredCursor = (storeState, address) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const pages = address.page > 1 ? readSlice(readSlice(storeState, "paginations"), address.key) : null;
|
|
9
|
+
return (_a = pages === null || pages === void 0 ? void 0 : pages.getIn) === null || _a === void 0 ? void 0 : _a.call(pages, [address.token, "cursor"]);
|
|
10
|
+
},
|
|
11
|
+
// (endpoint|page|token) of fetches currently in flight. Guards against a
|
|
12
|
+
// remount / fast-nav race firing the same fetch twice (the pages reducer
|
|
13
|
+
// concats ids on RECEIVE_PAGE → duplicate rows). Transparent on the happy
|
|
14
|
+
// path: a single REQUEST_PAGE adds then removes its own key.
|
|
15
|
+
inFlight = new Set(),
|
|
16
|
+
// Per-endpoint generation. CLEAR_DATA bumps it; a fetch started before the
|
|
17
|
+
// clear is discarded on resolve, so a stale response cannot refill a list
|
|
18
|
+
// the caller just cleared (and the post-clear refetch is free to run).
|
|
19
|
+
epochs = new Map(), epochOf = (endpoint) => epochs.get(endpoint) || 0, clearEndpoint = (endpoint) => {
|
|
20
|
+
epochs.set(endpoint, epochOf(endpoint) + 1);
|
|
21
|
+
Array.from(inFlight).forEach((key) => {
|
|
22
|
+
if (key.startsWith(`${endpoint}|`)) {
|
|
23
|
+
inFlight.delete(key);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}, paginatorMiddleware = ({ dispatch, getState }) => (next) => (action) => {
|
|
27
|
+
if (action.type === CLEAR_DATA) {
|
|
28
|
+
if (action.meta && typeof action.meta.endpoint === "string") {
|
|
29
|
+
clearEndpoint(action.meta.endpoint);
|
|
30
|
+
}
|
|
31
|
+
return next(action);
|
|
32
|
+
}
|
|
6
33
|
if (action.type === REQUEST_PAGE) {
|
|
7
|
-
const { meta: { endpoint, endpointCb, manageEntity, resultsKey, totalKey, pageArgName, idKey, }, payload: { page, token, }, } = action;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
const { meta: { key, endpoint, endpointCb, manageEntity, resultsKey, totalKey, pageArgName, idKey, cursorKey, cursorArgName, }, payload: { page, token, }, } = action, dedupeKey = `${endpoint}|${page}|${token}`, storedCursor = readStoredCursor(getState(), { key, token, page });
|
|
35
|
+
if (!inFlight.has(dedupeKey)) {
|
|
36
|
+
inFlight.add(dedupeKey);
|
|
37
|
+
const requestEpoch = epochOf(endpoint);
|
|
38
|
+
dispatch((dispatch2) => {
|
|
39
|
+
const isStale = () => epochOf(endpoint) !== requestEpoch, markAsError = () => {
|
|
40
|
+
if (isStale()) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
dispatch2(receivePage({
|
|
44
|
+
endpoint,
|
|
45
|
+
endpointCb,
|
|
46
|
+
manageEntity,
|
|
47
|
+
pageArgName,
|
|
48
|
+
idKey,
|
|
49
|
+
page,
|
|
50
|
+
error: true,
|
|
51
|
+
token,
|
|
52
|
+
items: [],
|
|
53
|
+
total: 0,
|
|
54
|
+
}));
|
|
55
|
+
}, onResponse = (response) => {
|
|
56
|
+
if (isStale()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
31
59
|
let results = [], total = 0;
|
|
32
60
|
if (typeof resultsKey === "undefined") {
|
|
33
61
|
results = response;
|
|
@@ -36,26 +64,38 @@ const { receivePage } = actions, paginatorMiddleware = ({ dispatch }) => (next)
|
|
|
36
64
|
results = response[resultsKey];
|
|
37
65
|
total = response[totalKey];
|
|
38
66
|
}
|
|
39
|
-
|
|
40
|
-
|
|
67
|
+
const cursorArgs = typeof cursorKey === "string" ? { cursor: response[cursorKey] } : {};
|
|
68
|
+
dispatch2(receivePage(Object.assign({ endpoint,
|
|
41
69
|
endpointCb,
|
|
42
70
|
manageEntity,
|
|
43
71
|
pageArgName,
|
|
44
72
|
idKey,
|
|
45
|
-
page,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
73
|
+
page, error: false, token, items: results, total }, cursorArgs)));
|
|
74
|
+
}, settle = () => {
|
|
75
|
+
inFlight.delete(dedupeKey);
|
|
76
|
+
}, fetcher = getFetcher(endpoint), rawPath = typeof endpointCb === "function" ? endpointCb(token) : endpoint, path = rawPath === null ? "" : rawPath;
|
|
77
|
+
try {
|
|
78
|
+
const run = typeof fetcher === "function"
|
|
79
|
+
? fetcher(token, page, storedCursor)
|
|
80
|
+
: fetchPage({
|
|
81
|
+
endpoint: path,
|
|
82
|
+
pageArgName,
|
|
83
|
+
page,
|
|
84
|
+
token,
|
|
85
|
+
cursorArgName,
|
|
86
|
+
cursor: storedCursor,
|
|
87
|
+
}).then((res) => res.response);
|
|
88
|
+
run.
|
|
89
|
+
then(onResponse).
|
|
90
|
+
catch(markAsError).
|
|
91
|
+
finally(settle);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
settle();
|
|
52
95
|
markAsError();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
markAsError();
|
|
57
|
-
}
|
|
58
|
-
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
59
99
|
}
|
|
60
100
|
return next(action);
|
|
61
101
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginatorMiddleware.js","sourceRoot":"","sources":["../src/paginatorMiddleware.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"paginatorMiddleware.js","sourceRoot":"","sources":["../src/paginatorMiddleware.ts"],"names":[],"mappings":"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"}
|
package/reducerOperations.js
CHANGED
|
@@ -18,11 +18,12 @@ const requestPage = (state, action) => {
|
|
|
18
18
|
});
|
|
19
19
|
return state.set(token, init);
|
|
20
20
|
}, receivePage = (state, action) => {
|
|
21
|
-
const { meta: { idKey, }, payload: { token, items, total, error, }, } = action;
|
|
21
|
+
const { meta: { idKey, }, payload: { token, items, total, error, cursor, }, } = action;
|
|
22
22
|
if (state.has(token)) {
|
|
23
|
-
const hasError = error === true;
|
|
23
|
+
const hasError = error === true, keepsCursor = hasError || typeof cursor === "undefined", receivedIds = Immutable.List(items.map((pageMember) => String(pageMember[idKey]))), mergeIds = (page) => page.get("ids").concat(receivedIds).toOrderedSet().toList(), pickCursor = (page) => (keepsCursor ? page.get("cursor") : cursor);
|
|
24
24
|
return state.update(token, ((current) => current.update((page) => current.merge(Immutable.Map({
|
|
25
|
-
ids: page
|
|
25
|
+
ids: mergeIds(page),
|
|
26
|
+
cursor: pickCursor(page),
|
|
26
27
|
fetching: false,
|
|
27
28
|
error: hasError,
|
|
28
29
|
fetched: true,
|
package/reducerOperations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducerOperations.js","sourceRoot":"","sources":["../src/reducerOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AAIvC,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,MAAyB,EAAE,EAAE;IACjE,MACE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM;IACrC,yDAAyD;IACzD,QAAQ,GAAS,SAAS,CAAC,GAAG,CAAC;QAC7B,IAAI;QACJ,KAAK,EAAM,KAAK;QAChB,QAAQ,EAAG,IAAI;QACf,OAAO,EAAI,KAAK;KACjB,CAAC,CAAC;IAEL,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAa,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC1B,IAAI,EAAG,CAAC;QACR,KAAK;QACL,GAAG,EAAI,SAAS,CAAC,IAAI,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,EACD,WAAW,GAAG,CAAC,KAAiB,EAAE,MAAyB,EAAE,EAAE;IAC7D,MAAM,EACJ,IAAI,EAAE,EACJ,KAAK,GACN,EACD,OAAO,EAAE,EACP,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"reducerOperations.js","sourceRoot":"","sources":["../src/reducerOperations.ts"],"names":[],"mappings":"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"}
|
package/types.d.ts
CHANGED
|
@@ -9,21 +9,26 @@ type PromiseAction = Promise<Action>;
|
|
|
9
9
|
type ThunkAction = (dispatch: Dispatch, getState: GetState) => any;
|
|
10
10
|
export type Dispatch = (action: Action | ThunkAction | PromiseAction | Array<Action>) => any;
|
|
11
11
|
export type EndPointCb = ((token?: string) => string) | null;
|
|
12
|
+
export type Fetcher = (token: string, page: number, cursor?: string) => Promise<any>;
|
|
12
13
|
export type PaginatorSettings = {
|
|
13
14
|
key: string;
|
|
14
15
|
manageEntity: any;
|
|
15
16
|
resultsKey: string;
|
|
17
|
+
fetcher?: Fetcher;
|
|
16
18
|
rowsPerLoad?: number;
|
|
17
19
|
manipulateItems?: (items: any) => any;
|
|
18
20
|
totalKey?: string;
|
|
19
21
|
pageArgName?: string;
|
|
20
22
|
idKey?: string;
|
|
23
|
+
cursorKey?: string;
|
|
24
|
+
cursorArgName?: string;
|
|
21
25
|
dataItemURL?: string;
|
|
22
26
|
normalizeDataItem?: any;
|
|
23
27
|
};
|
|
24
28
|
export type RequestPageAction = {
|
|
25
29
|
type: "@@redux-paginator-immutable/REQUEST_PAGE";
|
|
26
30
|
meta: {
|
|
31
|
+
key: string;
|
|
27
32
|
endpoint: string;
|
|
28
33
|
endpointCb: EndPointCb;
|
|
29
34
|
manageEntity: any;
|
|
@@ -31,6 +36,8 @@ export type RequestPageAction = {
|
|
|
31
36
|
totalKey: string;
|
|
32
37
|
pageArgName: string;
|
|
33
38
|
idKey: string;
|
|
39
|
+
cursorKey?: string;
|
|
40
|
+
cursorArgName: string;
|
|
34
41
|
};
|
|
35
42
|
payload: {
|
|
36
43
|
page: number;
|
|
@@ -52,6 +59,7 @@ export type ReceivePageAction = {
|
|
|
52
59
|
items: Array<any>;
|
|
53
60
|
total: number;
|
|
54
61
|
error: boolean;
|
|
62
|
+
cursor?: string;
|
|
55
63
|
raw?: string;
|
|
56
64
|
};
|
|
57
65
|
};
|