aidbox-react 1.6.0 → 1.7.1

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.
@@ -3,7 +3,11 @@ import { RemoteData } from '../libs/remoteData';
3
3
  import { SearchParams } from '../services/search';
4
4
  export interface PagerManager {
5
5
  loadNext: () => void;
6
+ loadPrevious: () => void;
7
+ loadPage: (page: number) => void;
6
8
  reload: () => void;
7
9
  hasNext: boolean;
10
+ hasPrevious: boolean;
11
+ currentPage: number;
8
12
  }
9
13
  export declare function usePager<T extends AidboxResource>(resourceType: T['resourceType'], resourcesOnPage?: number, searchParams?: SearchParams): [RemoteData<Bundle<T>>, PagerManager];
package/dist/cjs/index.js CHANGED
@@ -3168,19 +3168,28 @@ function createSharedState(initial) {
3168
3168
  }
3169
3169
 
3170
3170
  function usePager(resourceType, resourcesOnPage = 15, searchParams = {}) {
3171
- const [pageToLoad, setPageToLoad] = react.exports.useState(1);
3171
+ var _a;
3172
+ const [pageToLoad, setPageToLoad] = react.exports.useState((_a = searchParams._page) !== null && _a !== void 0 ? _a : 1);
3172
3173
  const [reloadsCount, setReloadsCount] = react.exports.useState(0);
3173
- const [resources] = useService(() => getFHIRResources(resourceType, Object.assign(Object.assign({}, searchParams), { _count: resourcesOnPage, _page: pageToLoad })), [pageToLoad, reloadsCount]);
3174
+ const [resources] = useService(() => getFHIRResources(resourceType, Object.assign(Object.assign({}, searchParams), { _count: resourcesOnPage, _page: pageToLoad })), [pageToLoad, reloadsCount, resourcesOnPage]);
3175
+ const hasNext = react.exports.useMemo(() => { var _a; return (isSuccess(resources) ? Boolean((_a = resources.data.link) === null || _a === void 0 ? void 0 : _a.some((link) => link.relation === 'next')) : false); }, [resources]);
3176
+ const hasPrevious = react.exports.useMemo(() => { var _a; return isSuccess(resources) ? Boolean((_a = resources.data.link) === null || _a === void 0 ? void 0 : _a.some((link) => link.relation === 'previous')) : false; }, [resources]);
3177
+ const loadNext = react.exports.useCallback(() => setPageToLoad((currentPage) => currentPage + 1), []);
3178
+ const loadPrevious = react.exports.useCallback(() => setPageToLoad((currentPage) => (hasPrevious ? currentPage - 1 : currentPage)), [hasPrevious]);
3179
+ const reload = react.exports.useCallback(() => {
3180
+ setPageToLoad(1);
3181
+ setReloadsCount((c) => c + 1);
3182
+ }, []);
3174
3183
  return [
3175
3184
  resources,
3176
3185
  {
3177
- loadNext: () => setPageToLoad((currentPage) => currentPage + 1),
3178
- hasNext: isSuccess(resources) &&
3179
- Boolean(resources.data.link && resources.data.link.some((link) => link.relation === 'next')),
3180
- reload: () => {
3181
- setPageToLoad(1);
3182
- setReloadsCount((c) => c + 1);
3183
- },
3186
+ loadNext,
3187
+ loadPrevious,
3188
+ loadPage: setPageToLoad,
3189
+ reload,
3190
+ hasNext,
3191
+ hasPrevious,
3192
+ currentPage: pageToLoad,
3184
3193
  },
3185
3194
  ];
3186
3195
  }
@@ -1,4 +1,5 @@
1
1
  export interface Token {
2
2
  access_token: string;
3
3
  token_type: string;
4
+ refresh_token?: string;
4
5
  }
@@ -3,7 +3,11 @@ import { RemoteData } from '../libs/remoteData';
3
3
  import { SearchParams } from '../services/search';
4
4
  export interface PagerManager {
5
5
  loadNext: () => void;
6
+ loadPrevious: () => void;
7
+ loadPage: (page: number) => void;
6
8
  reload: () => void;
7
9
  hasNext: boolean;
10
+ hasPrevious: boolean;
11
+ currentPage: number;
8
12
  }
9
13
  export declare function usePager<T extends AidboxResource>(resourceType: T['resourceType'], resourcesOnPage?: number, searchParams?: SearchParams): [RemoteData<Bundle<T>>, PagerManager];
package/dist/esm/index.js CHANGED
@@ -3166,19 +3166,28 @@ function createSharedState(initial) {
3166
3166
  }
3167
3167
 
3168
3168
  function usePager(resourceType, resourcesOnPage = 15, searchParams = {}) {
3169
- const [pageToLoad, setPageToLoad] = react.exports.useState(1);
3169
+ var _a;
3170
+ const [pageToLoad, setPageToLoad] = react.exports.useState((_a = searchParams._page) !== null && _a !== void 0 ? _a : 1);
3170
3171
  const [reloadsCount, setReloadsCount] = react.exports.useState(0);
3171
- const [resources] = useService(() => getFHIRResources(resourceType, Object.assign(Object.assign({}, searchParams), { _count: resourcesOnPage, _page: pageToLoad })), [pageToLoad, reloadsCount]);
3172
+ const [resources] = useService(() => getFHIRResources(resourceType, Object.assign(Object.assign({}, searchParams), { _count: resourcesOnPage, _page: pageToLoad })), [pageToLoad, reloadsCount, resourcesOnPage]);
3173
+ const hasNext = react.exports.useMemo(() => { var _a; return (isSuccess(resources) ? Boolean((_a = resources.data.link) === null || _a === void 0 ? void 0 : _a.some((link) => link.relation === 'next')) : false); }, [resources]);
3174
+ const hasPrevious = react.exports.useMemo(() => { var _a; return isSuccess(resources) ? Boolean((_a = resources.data.link) === null || _a === void 0 ? void 0 : _a.some((link) => link.relation === 'previous')) : false; }, [resources]);
3175
+ const loadNext = react.exports.useCallback(() => setPageToLoad((currentPage) => currentPage + 1), []);
3176
+ const loadPrevious = react.exports.useCallback(() => setPageToLoad((currentPage) => (hasPrevious ? currentPage - 1 : currentPage)), [hasPrevious]);
3177
+ const reload = react.exports.useCallback(() => {
3178
+ setPageToLoad(1);
3179
+ setReloadsCount((c) => c + 1);
3180
+ }, []);
3172
3181
  return [
3173
3182
  resources,
3174
3183
  {
3175
- loadNext: () => setPageToLoad((currentPage) => currentPage + 1),
3176
- hasNext: isSuccess(resources) &&
3177
- Boolean(resources.data.link && resources.data.link.some((link) => link.relation === 'next')),
3178
- reload: () => {
3179
- setPageToLoad(1);
3180
- setReloadsCount((c) => c + 1);
3181
- },
3184
+ loadNext,
3185
+ loadPrevious,
3186
+ loadPage: setPageToLoad,
3187
+ reload,
3188
+ hasNext,
3189
+ hasPrevious,
3190
+ currentPage: pageToLoad,
3182
3191
  },
3183
3192
  ];
3184
3193
  }
@@ -1,4 +1,5 @@
1
1
  export interface Token {
2
2
  access_token: string;
3
3
  token_type: string;
4
+ refresh_token?: string;
4
5
  }
package/dist/index.d.ts CHANGED
@@ -42,6 +42,7 @@ declare function isNotAskedAny(responses: Array<RemoteData>): responses is Array
42
42
  interface Token {
43
43
  access_token: string;
44
44
  token_type: string;
45
+ refresh_token?: string;
45
46
  }
46
47
 
47
48
  declare function buildQueryParams(params: Record<string, any>): string;
@@ -223,8 +224,12 @@ declare function createSharedState<S>(initial?: S): StateManager<S>;
223
224
 
224
225
  interface PagerManager {
225
226
  loadNext: () => void;
227
+ loadPrevious: () => void;
228
+ loadPage: (page: number) => void;
226
229
  reload: () => void;
227
230
  hasNext: boolean;
231
+ hasPrevious: boolean;
232
+ currentPage: number;
228
233
  }
229
234
  declare function usePager<T extends AidboxResource>(resourceType: T['resourceType'], resourcesOnPage?: number, searchParams?: SearchParams): [RemoteData<Bundle<T>>, PagerManager];
230
235
 
@@ -3,7 +3,11 @@ import { RemoteData } from '../libs/remoteData';
3
3
  import { SearchParams } from '../services/search';
4
4
  export interface PagerManager {
5
5
  loadNext: () => void;
6
+ loadPrevious: () => void;
7
+ loadPage: (page: number) => void;
6
8
  reload: () => void;
7
9
  hasNext: boolean;
10
+ hasPrevious: boolean;
11
+ currentPage: number;
8
12
  }
9
13
  export declare function usePager<T extends AidboxResource>(resourceType: T['resourceType'], resourcesOnPage?: number, searchParams?: SearchParams): [RemoteData<Bundle<T>>, PagerManager];
@@ -7,23 +7,32 @@ var remoteData_1 = require("../libs/remoteData");
7
7
  var fhir_1 = require("../services/fhir");
8
8
  var service_1 = require("./service");
9
9
  function usePager(resourceType, resourcesOnPage, searchParams) {
10
+ var _a;
10
11
  if (resourcesOnPage === void 0) { resourcesOnPage = 15; }
11
12
  if (searchParams === void 0) { searchParams = {}; }
12
- var _a = (0, react_1.useState)(1), pageToLoad = _a[0], setPageToLoad = _a[1];
13
- var _b = (0, react_1.useState)(0), reloadsCount = _b[0], setReloadsCount = _b[1];
13
+ var _b = (0, react_1.useState)((_a = searchParams._page) !== null && _a !== void 0 ? _a : 1), pageToLoad = _b[0], setPageToLoad = _b[1];
14
+ var _c = (0, react_1.useState)(0), reloadsCount = _c[0], setReloadsCount = _c[1];
14
15
  var resources = (0, service_1.useService)(function () {
15
16
  return (0, fhir_1.getFHIRResources)(resourceType, tslib_1.__assign(tslib_1.__assign({}, searchParams), { _count: resourcesOnPage, _page: pageToLoad }));
16
- }, [pageToLoad, reloadsCount])[0];
17
+ }, [pageToLoad, reloadsCount, resourcesOnPage])[0];
18
+ var hasNext = (0, react_1.useMemo)(function () { var _a; return ((0, remoteData_1.isSuccess)(resources) ? Boolean((_a = resources.data.link) === null || _a === void 0 ? void 0 : _a.some(function (link) { return link.relation === 'next'; })) : false); }, [resources]);
19
+ var hasPrevious = (0, react_1.useMemo)(function () { var _a; return (0, remoteData_1.isSuccess)(resources) ? Boolean((_a = resources.data.link) === null || _a === void 0 ? void 0 : _a.some(function (link) { return link.relation === 'previous'; })) : false; }, [resources]);
20
+ var loadNext = (0, react_1.useCallback)(function () { return setPageToLoad(function (currentPage) { return currentPage + 1; }); }, []);
21
+ var loadPrevious = (0, react_1.useCallback)(function () { return setPageToLoad(function (currentPage) { return (hasPrevious ? currentPage - 1 : currentPage); }); }, [hasPrevious]);
22
+ var reload = (0, react_1.useCallback)(function () {
23
+ setPageToLoad(1);
24
+ setReloadsCount(function (c) { return c + 1; });
25
+ }, []);
17
26
  return [
18
27
  resources,
19
28
  {
20
- loadNext: function () { return setPageToLoad(function (currentPage) { return currentPage + 1; }); },
21
- hasNext: (0, remoteData_1.isSuccess)(resources) &&
22
- Boolean(resources.data.link && resources.data.link.some(function (link) { return link.relation === 'next'; })),
23
- reload: function () {
24
- setPageToLoad(1);
25
- setReloadsCount(function (c) { return c + 1; });
26
- },
29
+ loadNext: loadNext,
30
+ loadPrevious: loadPrevious,
31
+ loadPage: setPageToLoad,
32
+ reload: reload,
33
+ hasNext: hasNext,
34
+ hasPrevious: hasPrevious,
35
+ currentPage: pageToLoad,
27
36
  },
28
37
  ];
29
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pager.js","sourceRoot":"","sources":["../../src/hooks/pager.ts"],"names":[],"mappings":";;;;AAAA,+BAAiC;AAGjC,iDAA2D;AAC3D,yCAAoD;AAEpD,qCAAuC;AAQvC,SAAgB,QAAQ,CACpB,YAA+B,EAC/B,eAA4B,EAC5B,YAA+B;IAD/B,gCAAA,EAAA,oBAA4B;IAC5B,6BAAA,EAAA,iBAA+B;IAEzB,IAAA,KAA8B,IAAA,gBAAQ,EAAC,CAAC,CAAC,EAAxC,UAAU,QAAA,EAAE,aAAa,QAAe,CAAC;IAC1C,IAAA,KAAkC,IAAA,gBAAQ,EAAC,CAAC,CAAC,EAA5C,YAAY,QAAA,EAAE,eAAe,QAAe,CAAC;IAE7C,IAAA,SAAS,GAAI,IAAA,oBAAU,EAC1B;QACI,OAAA,IAAA,uBAAgB,EAAC,YAAY,wCACtB,YAAY,KACf,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,IACnB;IAJF,CAIE,EACN,CAAC,UAAU,EAAE,YAAY,CAAC,CAC7B,GARe,CAQd;IAEF,OAAO;QACH,SAAS;QACT;YACI,QAAQ,EAAE,cAAM,OAAA,aAAa,CAAC,UAAC,WAAW,IAAK,OAAA,WAAW,GAAG,CAAC,EAAf,CAAe,CAAC,EAA/C,CAA+C;YAC/D,OAAO,EACH,IAAA,sBAAS,EAAC,SAAS,CAAC;gBACpB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAxB,CAAwB,CAAC,CAAC;YAChG,MAAM,EAAE;gBACJ,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjB,eAAe,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,CAAC,CAAC;YAClC,CAAC;SACJ;KACJ,CAAC;AACN,CAAC;AA/BD,4BA+BC"}
1
+ {"version":3,"file":"pager.js","sourceRoot":"","sources":["../../src/hooks/pager.ts"],"names":[],"mappings":";;;;AAAA,+BAAuD;AAGvD,iDAA2D;AAC3D,yCAAoD;AAEpD,qCAAuC;AAYvC,SAAgB,QAAQ,CACpB,YAA+B,EAC/B,eAA4B,EAC5B,YAA+B;;IAD/B,gCAAA,EAAA,oBAA4B;IAC5B,6BAAA,EAAA,iBAA+B;IAEzB,IAAA,KAA8B,IAAA,gBAAQ,EAAC,MAAC,YAAY,CAAC,KAAgB,mCAAI,CAAC,CAAC,EAA1E,UAAU,QAAA,EAAE,aAAa,QAAiD,CAAC;IAC5E,IAAA,KAAkC,IAAA,gBAAQ,EAAC,CAAC,CAAC,EAA5C,YAAY,QAAA,EAAE,eAAe,QAAe,CAAC;IAC7C,IAAA,SAAS,GAAI,IAAA,oBAAU,EAC1B;QACI,OAAA,IAAA,uBAAgB,EAAC,YAAY,wCACtB,YAAY,KACf,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,IACnB;IAJF,CAIE,EACN,CAAC,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAC9C,GARe,CAQd;IAEF,IAAM,OAAO,GAAG,IAAA,eAAO,EACnB,sBAAM,OAAA,CAAC,IAAA,sBAAS,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAA,SAAS,CAAC,IAAI,CAAC,IAAI,0CAAE,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAxB,CAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,EAC7G,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,IAAM,WAAW,GAAG,IAAA,eAAO,EACvB,sBACI,OAAA,IAAA,sBAAS,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAA,SAAS,CAAC,IAAI,CAAC,IAAI,0CAAE,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,KAAK,UAAU,EAA5B,CAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA,EAAA,EAC7G,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,cAAM,OAAA,aAAa,CAAC,UAAC,WAAW,IAAK,OAAA,WAAW,GAAG,CAAC,EAAf,CAAe,CAAC,EAA/C,CAA+C,EAAE,EAAE,CAAC,CAAC;IAExF,IAAM,YAAY,GAAG,IAAA,mBAAW,EAC5B,cAAM,OAAA,aAAa,CAAC,UAAC,WAAW,IAAK,OAAA,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAA7C,CAA6C,CAAC,EAA7E,CAA6E,EACnF,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,IAAM,MAAM,GAAG,IAAA,mBAAW,EAAC;QACvB,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,eAAe,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACH,SAAS;QACT;YACI,QAAQ,UAAA;YACR,YAAY,cAAA;YACZ,QAAQ,EAAE,aAAa;YACvB,MAAM,QAAA;YACN,OAAO,SAAA;YACP,WAAW,aAAA;YACX,WAAW,EAAE,UAAU;SAC1B;KACJ,CAAC;AACN,CAAC;AApDD,4BAoDC"}
@@ -1,4 +1,5 @@
1
1
  export interface Token {
2
2
  access_token: string;
3
3
  token_type: string;
4
+ refresh_token?: string;
4
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidbox-react",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
4
4
  "scripts": {
5
5
  "build": "tsc & rollup -c",
6
6
  "prebuild": "rimraf lib/* & rimraf dist/*",
@@ -1,4 +1,4 @@
1
- import { useState } from 'react';
1
+ import { useCallback, useMemo, useState } from 'react';
2
2
  import { AidboxResource, Bundle } from 'shared/src/contrib/aidbox';
3
3
 
4
4
  import { isSuccess, RemoteData } from '../libs/remoteData';
@@ -8,8 +8,12 @@ import { useService } from './service';
8
8
 
9
9
  export interface PagerManager {
10
10
  loadNext: () => void;
11
+ loadPrevious: () => void;
12
+ loadPage: (page: number) => void;
11
13
  reload: () => void;
12
14
  hasNext: boolean;
15
+ hasPrevious: boolean;
16
+ currentPage: number;
13
17
  }
14
18
 
15
19
  export function usePager<T extends AidboxResource>(
@@ -17,9 +21,8 @@ export function usePager<T extends AidboxResource>(
17
21
  resourcesOnPage: number = 15,
18
22
  searchParams: SearchParams = {}
19
23
  ): [RemoteData<Bundle<T>>, PagerManager] {
20
- const [pageToLoad, setPageToLoad] = useState(1);
24
+ const [pageToLoad, setPageToLoad] = useState((searchParams._page as number) ?? 1);
21
25
  const [reloadsCount, setReloadsCount] = useState(0);
22
-
23
26
  const [resources] = useService(
24
27
  () =>
25
28
  getFHIRResources(resourceType, {
@@ -27,20 +30,42 @@ export function usePager<T extends AidboxResource>(
27
30
  _count: resourcesOnPage,
28
31
  _page: pageToLoad,
29
32
  }),
30
- [pageToLoad, reloadsCount]
33
+ [pageToLoad, reloadsCount, resourcesOnPage]
34
+ );
35
+
36
+ const hasNext = useMemo(
37
+ () => (isSuccess(resources) ? Boolean(resources.data.link?.some((link) => link.relation === 'next')) : false),
38
+ [resources]
39
+ );
40
+
41
+ const hasPrevious = useMemo(
42
+ () =>
43
+ isSuccess(resources) ? Boolean(resources.data.link?.some((link) => link.relation === 'previous')) : false,
44
+ [resources]
31
45
  );
32
46
 
47
+ const loadNext = useCallback(() => setPageToLoad((currentPage) => currentPage + 1), []);
48
+
49
+ const loadPrevious = useCallback(
50
+ () => setPageToLoad((currentPage) => (hasPrevious ? currentPage - 1 : currentPage)),
51
+ [hasPrevious]
52
+ );
53
+
54
+ const reload = useCallback(() => {
55
+ setPageToLoad(1);
56
+ setReloadsCount((c) => c + 1);
57
+ }, []);
58
+
33
59
  return [
34
60
  resources,
35
61
  {
36
- loadNext: () => setPageToLoad((currentPage) => currentPage + 1),
37
- hasNext:
38
- isSuccess(resources) &&
39
- Boolean(resources.data.link && resources.data.link.some((link) => link.relation === 'next')),
40
- reload: () => {
41
- setPageToLoad(1);
42
- setReloadsCount((c) => c + 1);
43
- },
62
+ loadNext,
63
+ loadPrevious,
64
+ loadPage: setPageToLoad,
65
+ reload,
66
+ hasNext,
67
+ hasPrevious,
68
+ currentPage: pageToLoad,
44
69
  },
45
70
  ];
46
71
  }
@@ -1,4 +1,5 @@
1
1
  export interface Token {
2
2
  access_token: string;
3
3
  token_type: string;
4
+ refresh_token?: string;
4
5
  }