aidbox-react 1.3.3 → 1.4.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.
@@ -1,6 +1,8 @@
1
1
  import { RemoteData, RemoteDataResult } from '../libs/remoteData';
2
- export interface ServiceManager<S> {
2
+ export interface ServiceManager<S, F> {
3
3
  reload: () => void;
4
+ reloadAsync: () => Promise<RemoteDataResult<S, F>>;
5
+ softReloadAsync: () => Promise<RemoteDataResult<S, F>>;
4
6
  set: (dataOrFn: S | ((data: S) => S)) => void;
5
7
  }
6
- export declare function useService<S = any, F = any>(asyncFunction: () => Promise<RemoteDataResult<S, F>>, deps?: ReadonlyArray<any>): [RemoteData<S, F>, ServiceManager<S>];
8
+ export declare function useService<S = any, F = any>(asyncFunction: () => Promise<RemoteDataResult<S, F>>, deps?: ReadonlyArray<any>): [RemoteData<S, F>, ServiceManager<S, F>];
@@ -8,37 +8,72 @@ function useService(asyncFunction, deps) {
8
8
  var _this = this;
9
9
  if (deps === void 0) { deps = []; }
10
10
  var _a = react_1.useState(remoteData_1.notAsked), remoteData = _a[0], setRemoteData = _a[1];
11
- // Use another state variable to trigger effect on demand
12
11
  var _b = react_1.useState(0), reloadsCount = _b[0], setReloadsCount = _b[1];
12
+ var reload = react_1.useCallback(function () { return setReloadsCount(function (x) { return x + 1; }); }, []);
13
+ var load = react_1.useCallback(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
14
+ var err_1;
15
+ return tslib_1.__generator(this, function (_a) {
16
+ switch (_a.label) {
17
+ case 0:
18
+ _a.trys.push([0, 2, , 3]);
19
+ return [4 /*yield*/, asyncFunction()];
20
+ case 1: return [2 /*return*/, _a.sent()];
21
+ case 2:
22
+ err_1 = _a.sent();
23
+ return [2 /*return*/, remoteData_1.failure(err_1.response ? err_1.response.data : err_1.message)];
24
+ case 3: return [2 /*return*/];
25
+ }
26
+ });
27
+ }); }, deps);
28
+ var softReloadAsync = react_1.useCallback(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
29
+ var response;
30
+ return tslib_1.__generator(this, function (_a) {
31
+ switch (_a.label) {
32
+ case 0: return [4 /*yield*/, load()];
33
+ case 1:
34
+ response = _a.sent();
35
+ setRemoteData(response);
36
+ return [2 /*return*/, response];
37
+ }
38
+ });
39
+ }); }, tslib_1.__spreadArrays(deps, [load]));
40
+ var reloadAsync = react_1.useCallback(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
41
+ var response;
42
+ return tslib_1.__generator(this, function (_a) {
43
+ switch (_a.label) {
44
+ case 0:
45
+ setRemoteData(remoteData_1.loading);
46
+ return [4 /*yield*/, load()];
47
+ case 1:
48
+ response = _a.sent();
49
+ setRemoteData(response);
50
+ return [2 /*return*/, response];
51
+ }
52
+ });
53
+ }); }, tslib_1.__spreadArrays(deps, [load]));
13
54
  react_1.useEffect(function () {
14
55
  (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
15
- var response, err_1;
16
- return tslib_1.__generator(this, function (_a) {
17
- switch (_a.label) {
56
+ var _a;
57
+ return tslib_1.__generator(this, function (_b) {
58
+ switch (_b.label) {
18
59
  case 0:
19
60
  setRemoteData(remoteData_1.loading);
20
- _a.label = 1;
61
+ _a = setRemoteData;
62
+ return [4 /*yield*/, load()];
21
63
  case 1:
22
- _a.trys.push([1, 3, , 4]);
23
- return [4 /*yield*/, asyncFunction()];
24
- case 2:
25
- response = _a.sent();
26
- setRemoteData(response);
27
- return [3 /*break*/, 4];
28
- case 3:
29
- err_1 = _a.sent();
30
- setRemoteData(remoteData_1.failure(err_1.response ? err_1.response.data : err_1.message));
31
- return [3 /*break*/, 4];
32
- case 4: return [2 /*return*/];
64
+ _a.apply(void 0, [_b.sent()]);
65
+ return [2 /*return*/];
33
66
  }
34
67
  });
35
68
  }); })();
36
- // eslint-disable-next-line
37
- }, deps.concat(reloadsCount));
69
+ // eslint-disable-next-line react-hooks/exhaustive-deps
70
+ }, tslib_1.__spreadArrays(deps, [reloadsCount, load]));
38
71
  return [
39
72
  remoteData,
40
73
  {
41
- reload: function () { return setReloadsCount(function (count) { return count + 1; }); },
74
+ reload: reload,
75
+ reloadAsync: reloadAsync,
76
+ softReloadAsync: softReloadAsync,
42
77
  set: function (dataOrFn) {
43
78
  if (typeof dataOrFn === 'function') {
44
79
  setRemoteData(function (rd) { return (remoteData_1.isSuccess(rd) ? remoteData_1.success(dataOrFn(rd.data)) : rd); });
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/hooks/service.ts"],"names":[],"mappings":";;;;AAAA,+BAA4C;AAE5C,iDAAkH;AAOlH,SAAgB,UAAU,CACtB,aAAoD,EACpD,IAA6B;IAFjC,iBAmCC;IAjCG,qBAAA,EAAA,SAA6B;IAEvB,IAAA,KAA8B,gBAAQ,CAAmB,qBAAQ,CAAC,EAAjE,UAAU,QAAA,EAAE,aAAa,QAAwC,CAAC;IAEzE,yDAAyD;IACnD,IAAA,KAAkC,gBAAQ,CAAC,CAAC,CAAC,EAA5C,YAAY,QAAA,EAAE,eAAe,QAAe,CAAC;IAEpD,iBAAS,CAAC;QACN,CAAC;;;;;wBACG,aAAa,CAAC,oBAAO,CAAC,CAAC;;;;wBAEsB,qBAAM,aAAa,EAAE,EAAA;;wBAAxD,QAAQ,GAA2B,SAAqB;wBAC9D,aAAa,CAAC,QAAQ,CAAC,CAAC;;;;wBAExB,aAAa,CAAC,oBAAO,CAAC,KAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAG,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;aAE9E,CAAC,EAAE,CAAC;QACL,2BAA2B;IAC/B,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9B,OAAO;QACH,UAAU;QACV;YACI,MAAM,EAAE,cAAM,OAAA,eAAe,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,GAAG,CAAC,EAAT,CAAS,CAAC,EAArC,CAAqC;YACnD,GAAG,EAAE,UAAC,QAA8B;gBAChC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAChC,aAAa,CAAC,UAAC,EAAE,IAAK,OAAA,CAAC,sBAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAO,CAAE,QAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAArE,CAAqE,CAAC,CAAC;iBAChG;qBAAM;oBACH,aAAa,CAAC,oBAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;iBACpC;YACL,CAAC;SACJ;KACJ,CAAC;AACN,CAAC;AAnCD,gCAmCC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/hooks/service.ts"],"names":[],"mappings":";;;;AAAA,+BAAyD;AAEzD,iDAAkH;AAalH,SAAgB,UAAU,CACtB,aAAoD,EACpD,IAA6B;IAFjC,iBAyDC;IAvDG,qBAAA,EAAA,SAA6B;IAEvB,IAAA,KAA8B,gBAAQ,CAAmB,qBAAQ,CAAC,EAAjE,UAAU,QAAA,EAAE,aAAa,QAAwC,CAAC;IACnE,IAAA,KAAkC,gBAAQ,CAAC,CAAC,CAAC,EAA5C,YAAY,QAAA,EAAE,eAAe,QAAe,CAAC;IACpD,IAAM,MAAM,GAAG,mBAAW,CAAC,cAAM,OAAA,eAAe,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,CAAC,EAA7B,CAA6B,EAAE,EAAE,CAAC,CAAC;IAEpE,IAAM,IAAI,GAAG,mBAAW,CAAC;;;;;;oBAEV,qBAAM,aAAa,EAAE,EAAA;wBAA5B,sBAAO,SAAqB,EAAC;;;oBAE7B,sBAAO,oBAAO,CAAC,KAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAG,CAAC,OAAO,CAAC,EAAC;;;;SAGtE,EAAE,IAAI,CAAC,CAAC;IAET,IAAM,eAAe,GAAG,mBAAW,CAAC;;;;wBACf,qBAAM,IAAI,EAAE,EAAA;;oBAAvB,QAAQ,GAAG,SAAY;oBAC7B,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAExB,sBAAO,QAAQ,EAAC;;;SAEnB,yBAAM,IAAI,GAAE,IAAI,GAAE,CAAC;IAEpB,IAAM,WAAW,GAAG,mBAAW,CAAC;;;;;oBAC5B,aAAa,CAAC,oBAAO,CAAC,CAAC;oBACN,qBAAM,IAAI,EAAE,EAAA;;oBAAvB,QAAQ,GAAG,SAAY;oBAC7B,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAExB,sBAAO,QAAQ,EAAC;;;SAEnB,yBAAM,IAAI,GAAE,IAAI,GAAE,CAAC;IAEpB,iBAAS,CAAC;QACN,CAAC;;;;;wBACG,aAAa,CAAC,oBAAO,CAAC,CAAC;wBACvB,KAAA,aAAa,CAAA;wBAAC,qBAAM,IAAI,EAAE,EAAA;;wBAA1B,kBAAc,SAAY,EAAC,CAAC;;;;aAC/B,CAAC,EAAE,CAAC;QACL,uDAAuD;IAC3D,CAAC,yBAAM,IAAI,GAAE,YAAY,EAAE,IAAI,GAAE,CAAC;IAElC,OAAO;QACH,UAAU;QACV;YACI,MAAM,QAAA;YACN,WAAW,aAAA;YACX,eAAe,iBAAA;YACf,GAAG,EAAE,UAAC,QAA8B;gBAChC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAChC,aAAa,CAAC,UAAC,EAAE,IAAK,OAAA,CAAC,sBAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAO,CAAE,QAA2B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAArE,CAAqE,CAAC,CAAC;iBAChG;qBAAM;oBACH,aAAa,CAAC,oBAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;iBACpC;YACL,CAAC;SACJ;KACJ,CAAC;AACN,CAAC;AAzDD,gCAyDC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidbox-react",
3
- "version": "1.3.3",
3
+ "version": "1.4.0",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "coverage": "jest --config=./jest.config.json --coverage --coverageReporters=text-lcov | coveralls",
@@ -9,7 +9,7 @@
9
9
  "prepare": "npm run build"
10
10
  },
11
11
  "dependencies": {
12
- "axios": "^0.21.1",
12
+ "axios": "^0.21.2",
13
13
  "moment": "^2.29.1"
14
14
  },
15
15
  "devDependencies": {
@@ -1,38 +1,66 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useEffect, useState, useCallback } from 'react';
2
2
 
3
3
  import { loading, notAsked, RemoteData, RemoteDataResult, success, failure, isSuccess } from '../libs/remoteData';
4
4
 
5
- export interface ServiceManager<S> {
5
+ export interface ServiceManager<S, F> {
6
+ // `reload` just sends signal to reload
6
7
  reload: () => void;
8
+ // `reloadAsync` returns Promise and intialize loading from the loading state
9
+ reloadAsync: () => Promise<RemoteDataResult<S, F>>;
10
+ // `softReloadAsync` returns Promise and intialize just updates
11
+ // remoteData with success/failure state without preloading
12
+ softReloadAsync: () => Promise<RemoteDataResult<S, F>>;
7
13
  set: (dataOrFn: S | ((data: S) => S)) => void;
8
14
  }
9
15
 
10
16
  export function useService<S = any, F = any>(
11
17
  asyncFunction: () => Promise<RemoteDataResult<S, F>>,
12
18
  deps: ReadonlyArray<any> = []
13
- ): [RemoteData<S, F>, ServiceManager<S>] {
19
+ ): [RemoteData<S, F>, ServiceManager<S, F>] {
14
20
  const [remoteData, setRemoteData] = useState<RemoteData<S, F>>(notAsked);
15
-
16
- // Use another state variable to trigger effect on demand
17
21
  const [reloadsCount, setReloadsCount] = useState(0);
22
+ const reload = useCallback(() => setReloadsCount((x) => x + 1), []);
23
+
24
+ const load = useCallback(async () => {
25
+ try {
26
+ return await asyncFunction();
27
+ } catch (err: any) {
28
+ return failure(err.response ? err.response.data : err.message);
29
+ }
30
+ // eslint-disable-next-line react-hooks/exhaustive-deps
31
+ }, deps);
32
+
33
+ const softReloadAsync = useCallback(async () => {
34
+ const response = await load();
35
+ setRemoteData(response);
36
+
37
+ return response;
38
+ // eslint-disable-next-line react-hooks/exhaustive-deps
39
+ }, [...deps, load]);
40
+
41
+ const reloadAsync = useCallback(async () => {
42
+ setRemoteData(loading);
43
+ const response = await load();
44
+ setRemoteData(response);
45
+
46
+ return response;
47
+ // eslint-disable-next-line react-hooks/exhaustive-deps
48
+ }, [...deps, load]);
18
49
 
19
50
  useEffect(() => {
20
51
  (async () => {
21
52
  setRemoteData(loading);
22
- try {
23
- const response: RemoteDataResult<S, F> = await asyncFunction();
24
- setRemoteData(response);
25
- } catch (err: any) {
26
- setRemoteData(failure(err.response ? err.response.data : err.message));
27
- }
53
+ setRemoteData(await load());
28
54
  })();
29
- // eslint-disable-next-line
30
- }, deps.concat(reloadsCount));
55
+ // eslint-disable-next-line react-hooks/exhaustive-deps
56
+ }, [...deps, reloadsCount, load]);
31
57
 
32
58
  return [
33
59
  remoteData,
34
60
  {
35
- reload: () => setReloadsCount((count) => count + 1),
61
+ reload,
62
+ reloadAsync,
63
+ softReloadAsync,
36
64
  set: (dataOrFn: S | ((data: S) => S)) => {
37
65
  if (typeof dataOrFn === 'function') {
38
66
  setRemoteData((rd) => (isSuccess(rd) ? success((dataOrFn as (data: S) => S)(rd.data)) : rd));
package/CHANGELOG.md DELETED
@@ -1,20 +0,0 @@
1
- ## 1.3.3
2
-
3
- - Adjust the code for new ts
4
-
5
- ## 1.3.2
6
-
7
- - Fix build
8
-
9
- ## 1.3.0
10
-
11
- - findFHIRResources uses getFHIRResources under the hood
12
- - formatError respects OperationOutcome.issue.diagnostics in addition to OperationOutcome.issue.details.text
13
-
14
- ## 1.2.0
15
-
16
- - All requests helpers from FHIR module returns Resources wrapped with WithId type-wrapper.
17
-
18
- ## 1.1.1
19
-
20
- - Stable release