jordy 0.13.0 → 0.14.2

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.
Files changed (36) hide show
  1. package/esm5/adaptive-render/DeviceDetectContext.js +3 -2
  2. package/esm5/hooks/index.js +1 -0
  3. package/esm5/hooks/useNavigate.js +49 -0
  4. package/esm5/http-api/BasicHttpApi.js +72 -36
  5. package/esm5/http-api/BasicHttpUploadApi.js +24 -12
  6. package/esm5/http-api/ErrorParser.decorator.js +7 -7
  7. package/esm5/http-api/network.util.js +2 -1
  8. package/esm5/index.js +2 -2
  9. package/esm5/proxies/cache.proxy.js +2 -2
  10. package/esm5/queries/buildMutationCreator.js +4 -4
  11. package/esm5/queries/buildQueryCreator.js +5 -5
  12. package/esm5/route-system/index.js +2 -3
  13. package/esm5/route-system/useRouteSystem.fixture.js +73 -0
  14. package/esm5/route-system/useRouteSystem.js +51 -0
  15. package/esm5/route-system/{moduleRoute.model.js → useRouteSystem.model.js} +0 -0
  16. package/esm5/util/collection.js +5 -5
  17. package/esm5/util/queryString.js +3 -2
  18. package/libs/adaptive-render/AdaptiveRender.d.ts +4 -3
  19. package/libs/adaptive-render/DeviceDetectContext.d.ts +6 -2
  20. package/libs/hooks/index.d.ts +1 -0
  21. package/libs/hooks/useNavigate.d.ts +46 -0
  22. package/libs/index.d.ts +2 -2
  23. package/libs/queries/buildMutationCreator.d.ts +2 -2
  24. package/libs/queries/buildQueryCreator.d.ts +2 -2
  25. package/libs/route-system/index.d.ts +2 -3
  26. package/libs/route-system/useRouteSystem.d.ts +35 -0
  27. package/libs/route-system/useRouteSystem.fixture.d.ts +4 -0
  28. package/libs/route-system/useRouteSystem.model.d.ts +41 -0
  29. package/package.json +11 -8
  30. package/esm5/route-system/AsyncGuard.js +0 -37
  31. package/esm5/route-system/renderRouteSystem.js +0 -64
  32. package/esm5/route-system/routeSystem.util.js +0 -23
  33. package/libs/route-system/AsyncGuard.d.ts +0 -8
  34. package/libs/route-system/moduleRoute.model.d.ts +0 -49
  35. package/libs/route-system/renderRouteSystem.d.ts +0 -5
  36. package/libs/route-system/routeSystem.util.d.ts +0 -4
@@ -1,3 +1,4 @@
1
+ import { __read } from "tslib";
1
2
  import React, { createContext, useContext, useEffect, useMemo, useState, } from 'react';
2
3
  import { isMobile as isMobileCheck, isNativeApp as isNativeAppCheck, isServer, isTablet as isTabletCheck, } from '../util/envCheck';
3
4
  import { DeviceSizeEnum } from './device.type';
@@ -33,8 +34,8 @@ export var DeviceDetectContext = createContext([
33
34
  var DeviceDetectContextProvider = DeviceDetectContext.Provider;
34
35
  export var DeviceDetectProvider = function (_a) {
35
36
  var children = _a.children;
36
- var _b = useState(getIsMobile()), isMobile = _b[0], setIsMobile = _b[1];
37
- var _c = useState(getIsTablet()), isTablet = _c[0], setIsTablet = _c[1];
37
+ var _b = __read(useState(getIsMobile()), 2), isMobile = _b[0], setIsMobile = _b[1];
38
+ var _c = __read(useState(getIsTablet()), 2), isTablet = _c[0], setIsTablet = _c[1];
38
39
  var isNative = useMemo(isNativeAppCheck, []);
39
40
  useEffect(function () {
40
41
  if (isServer() || !window || typeof window.matchMedia !== 'function') {
@@ -1,3 +1,4 @@
1
1
  export * from './useDebounce';
2
2
  export * from './useQueryParams';
3
3
  export * from './useThrottle';
4
+ export * from './useNavigate';
@@ -0,0 +1,49 @@
1
+ import { __assign, __read, __spreadArray } from "tslib";
2
+ import { useCallback } from 'react';
3
+ import { useNavigate as useRcNavigate, useSearchParams, } from 'react-router-dom';
4
+ import { isNullable, isObject, isUndefined } from '../util';
5
+ function instanceOfTo(to) {
6
+ return isObject(to) && ('pathname' in to || 'search' in to || 'hash' in to);
7
+ }
8
+ function instanceOfSearchParams(to) {
9
+ return !instanceOfTo(to) && isObject(to);
10
+ }
11
+ function isMergeQueries(option) {
12
+ return isUndefined(option) || (option && option['merge'] === true);
13
+ }
14
+ export function useNavigate() {
15
+ var _a = __read(useSearchParams(), 2), currentSearchParams = _a[0], setSearchParams = _a[1];
16
+ var navigate = useRcNavigate();
17
+ var navigation = useCallback(function (to, option) {
18
+ var _a;
19
+ if (typeof to === 'number') {
20
+ return navigate(to);
21
+ }
22
+ if (typeof to === 'string') {
23
+ return navigate(to, option);
24
+ }
25
+ if (instanceOfTo(to)) {
26
+ return navigate(to, option);
27
+ }
28
+ if (instanceOfSearchParams(to)) {
29
+ var newQueries = {};
30
+ for (var key in to) {
31
+ if (isNullable(to[key]) || to[key] === '') {
32
+ continue;
33
+ }
34
+ newQueries = __assign(__assign({}, newQueries), (_a = {}, _a[key] = to[key], _a));
35
+ }
36
+ if (isMergeQueries(option)) {
37
+ var currentQueries = __spreadArray([], __read(currentSearchParams), false).reduce(function (acc, _a) {
38
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
39
+ acc[key] = value;
40
+ return acc;
41
+ }, {});
42
+ return setSearchParams(__assign(__assign({}, currentQueries), newQueries), option);
43
+ }
44
+ return setSearchParams(newQueries, option);
45
+ }
46
+ return navigate(to, option);
47
+ }, [currentSearchParams, navigate, setSearchParams]);
48
+ return navigation;
49
+ }
@@ -14,110 +14,140 @@ var BasicHttpApi = (function (_super) {
14
14
  }
15
15
  BasicHttpApi.prototype.get = function (url, params, timeout) {
16
16
  return __awaiter(this, void 0, void 0, function () {
17
- var headers;
17
+ var headers, error_1;
18
18
  return __generator(this, function (_a) {
19
19
  switch (_a.label) {
20
- case 0: return [4, this.headersCreator()];
20
+ case 0:
21
+ _a.trys.push([0, 3, , 4]);
22
+ return [4, this.headersCreator()];
21
23
  case 1:
22
24
  headers = _a.sent();
23
- return [2, this.provider
24
- .get({
25
+ return [4, this.provider.get({
25
26
  url: "".concat(this.baseUrl).concat(url),
26
27
  headers: headers,
27
28
  withCredentials: this.withCredentials,
28
29
  paramsSerializer: this.paramsSerializer,
29
30
  params: this.mergeParams('get', url, params),
30
31
  timeout: timeout,
31
- })
32
- .catch(this.throwWithInterceptor)];
32
+ })];
33
+ case 2: return [2, _a.sent()];
34
+ case 3:
35
+ error_1 = _a.sent();
36
+ this.throwWithInterceptor(error_1);
37
+ return [3, 4];
38
+ case 4: return [2];
33
39
  }
34
40
  });
35
41
  });
36
42
  };
37
43
  BasicHttpApi.prototype.post = function (url, body, timeout) {
38
44
  return __awaiter(this, void 0, void 0, function () {
39
- var headers;
45
+ var headers, error_2;
40
46
  return __generator(this, function (_a) {
41
47
  switch (_a.label) {
42
- case 0: return [4, this.headersCreator()];
48
+ case 0:
49
+ _a.trys.push([0, 3, , 4]);
50
+ return [4, this.headersCreator()];
43
51
  case 1:
44
52
  headers = _a.sent();
45
- return [2, this.provider
46
- .post({
53
+ return [4, this.provider.post({
47
54
  url: "".concat(this.baseUrl).concat(this.mergeQueries('post', url, body)),
48
55
  headers: headers,
49
56
  withCredentials: this.withCredentials,
50
57
  paramsSerializer: this.paramsSerializer,
51
58
  params: body,
52
59
  timeout: timeout,
53
- })
54
- .catch(this.throwWithInterceptor)];
60
+ })];
61
+ case 2: return [2, _a.sent()];
62
+ case 3:
63
+ error_2 = _a.sent();
64
+ this.throwWithInterceptor(error_2);
65
+ return [3, 4];
66
+ case 4: return [2];
55
67
  }
56
68
  });
57
69
  });
58
70
  };
59
71
  BasicHttpApi.prototype.put = function (url, body, timeout) {
60
72
  return __awaiter(this, void 0, void 0, function () {
61
- var headers;
73
+ var headers, error_3;
62
74
  return __generator(this, function (_a) {
63
75
  switch (_a.label) {
64
- case 0: return [4, this.headersCreator()];
76
+ case 0:
77
+ _a.trys.push([0, 3, , 4]);
78
+ return [4, this.headersCreator()];
65
79
  case 1:
66
80
  headers = _a.sent();
67
- return [2, this.provider
68
- .put({
81
+ return [4, this.provider.put({
69
82
  url: "".concat(this.baseUrl).concat(this.mergeQueries('put', url, body)),
70
83
  headers: headers,
71
84
  withCredentials: this.withCredentials,
72
85
  paramsSerializer: this.paramsSerializer,
73
86
  params: body,
74
87
  timeout: timeout,
75
- })
76
- .catch(this.throwWithInterceptor)];
88
+ })];
89
+ case 2: return [2, _a.sent()];
90
+ case 3:
91
+ error_3 = _a.sent();
92
+ this.throwWithInterceptor(error_3);
93
+ return [3, 4];
94
+ case 4: return [2];
77
95
  }
78
96
  });
79
97
  });
80
98
  };
81
99
  BasicHttpApi.prototype.patch = function (url, body, timeout) {
82
100
  return __awaiter(this, void 0, void 0, function () {
83
- var headers;
101
+ var headers, error_4;
84
102
  return __generator(this, function (_a) {
85
103
  switch (_a.label) {
86
- case 0: return [4, this.headersCreator()];
104
+ case 0:
105
+ _a.trys.push([0, 3, , 4]);
106
+ return [4, this.headersCreator()];
87
107
  case 1:
88
108
  headers = _a.sent();
89
- return [2, this.provider
90
- .patch({
109
+ return [4, this.provider.patch({
91
110
  url: "".concat(this.baseUrl).concat(this.mergeQueries('patch', url, body)),
92
111
  headers: headers,
93
112
  withCredentials: this.withCredentials,
94
113
  paramsSerializer: this.paramsSerializer,
95
114
  params: body,
96
115
  timeout: timeout,
97
- })
98
- .catch(this.throwWithInterceptor)];
116
+ })];
117
+ case 2: return [2, _a.sent()];
118
+ case 3:
119
+ error_4 = _a.sent();
120
+ this.throwWithInterceptor(error_4);
121
+ return [3, 4];
122
+ case 4: return [2];
99
123
  }
100
124
  });
101
125
  });
102
126
  };
103
127
  BasicHttpApi.prototype.delete = function (url, body, timeout) {
104
128
  return __awaiter(this, void 0, void 0, function () {
105
- var headers;
129
+ var headers, error_5;
106
130
  return __generator(this, function (_a) {
107
131
  switch (_a.label) {
108
- case 0: return [4, this.headersCreator()];
132
+ case 0:
133
+ _a.trys.push([0, 3, , 4]);
134
+ return [4, this.headersCreator()];
109
135
  case 1:
110
136
  headers = _a.sent();
111
- return [2, this.provider
112
- .delete({
137
+ return [4, this.provider.delete({
113
138
  url: "".concat(this.baseUrl).concat(this.mergeQueries('delete', url, body)),
114
139
  headers: headers,
115
140
  withCredentials: this.withCredentials,
116
141
  paramsSerializer: this.paramsSerializer,
117
142
  params: body,
118
143
  timeout: timeout,
119
- })
120
- .catch(this.throwWithInterceptor)];
144
+ })];
145
+ case 2: return [2, _a.sent()];
146
+ case 3:
147
+ error_5 = _a.sent();
148
+ this.throwWithInterceptor(error_5);
149
+ return [3, 4];
150
+ case 4: return [2];
121
151
  }
122
152
  });
123
153
  });
@@ -131,21 +161,27 @@ var BasicHttpApi = (function (_super) {
131
161
  };
132
162
  BasicHttpApi.prototype.getBlob = function (url, params) {
133
163
  return __awaiter(this, void 0, void 0, function () {
134
- var headers;
164
+ var headers, error_6;
135
165
  return __generator(this, function (_a) {
136
166
  switch (_a.label) {
137
- case 0: return [4, this.headersCreator()];
167
+ case 0:
168
+ _a.trys.push([0, 3, , 4]);
169
+ return [4, this.headersCreator()];
138
170
  case 1:
139
171
  headers = _a.sent();
140
- return [2, this.provider
141
- .getBlob({
172
+ return [4, this.provider.getBlob({
142
173
  url: "".concat(this.baseUrl).concat(url),
143
174
  headers: headers,
144
175
  withCredentials: this.withCredentials,
145
176
  paramsSerializer: this.paramsSerializer,
146
177
  params: this.mergeParams('get', url, params),
147
- })
148
- .catch(this.throwWithInterceptor)];
178
+ })];
179
+ case 2: return [2, _a.sent()];
180
+ case 3:
181
+ error_6 = _a.sent();
182
+ this.throwWithInterceptor(error_6);
183
+ return [3, 4];
184
+ case 4: return [2];
149
185
  }
150
186
  });
151
187
  });
@@ -13,44 +13,56 @@ var BasicHttpUploadApi = (function (_super) {
13
13
  }
14
14
  BasicHttpUploadApi.prototype.postUpload = function (url, data, progressCallback, timeout) {
15
15
  return __awaiter(this, void 0, void 0, function () {
16
- var headers;
16
+ var headers, error_1;
17
17
  return __generator(this, function (_a) {
18
18
  switch (_a.label) {
19
- case 0: return [4, this.headersCreator()];
19
+ case 0:
20
+ _a.trys.push([0, 3, , 4]);
21
+ return [4, this.headersCreator()];
20
22
  case 1:
21
23
  headers = _a.sent();
22
- return [2, this.provider
23
- .post({
24
+ return [4, this.provider.post({
24
25
  url: "".concat(this.baseUrl).concat(this.mergeQueries('post', url, data)),
25
26
  headers: headers,
26
27
  withCredentials: this.withCredentials,
27
28
  data: data,
28
29
  timeout: timeout,
29
30
  onProgress: progressCallback,
30
- })
31
- .catch(this.throwWithInterceptor)];
31
+ })];
32
+ case 2: return [2, _a.sent()];
33
+ case 3:
34
+ error_1 = _a.sent();
35
+ this.throwWithInterceptor(error_1);
36
+ return [3, 4];
37
+ case 4: return [2];
32
38
  }
33
39
  });
34
40
  });
35
41
  };
36
42
  BasicHttpUploadApi.prototype.putUpload = function (url, data, progressCallback, timeout) {
37
43
  return __awaiter(this, void 0, void 0, function () {
38
- var headers;
44
+ var headers, error_2;
39
45
  return __generator(this, function (_a) {
40
46
  switch (_a.label) {
41
- case 0: return [4, this.headersCreator()];
47
+ case 0:
48
+ _a.trys.push([0, 3, , 4]);
49
+ return [4, this.headersCreator()];
42
50
  case 1:
43
51
  headers = _a.sent();
44
- return [2, this.provider
45
- .put({
52
+ return [4, this.provider.put({
46
53
  url: "".concat(this.baseUrl).concat(this.mergeQueries('put', url, data)),
47
54
  headers: headers,
48
55
  withCredentials: this.withCredentials,
49
56
  data: data,
50
57
  timeout: timeout,
51
58
  onProgress: progressCallback,
52
- })
53
- .catch(this.throwWithInterceptor)];
59
+ })];
60
+ case 2: return [2, _a.sent()];
61
+ case 3:
62
+ error_2 = _a.sent();
63
+ this.throwWithInterceptor(error_2);
64
+ return [3, 4];
65
+ case 4: return [2];
54
66
  }
55
67
  });
56
68
  });
@@ -1,4 +1,4 @@
1
- import { __spreadArray } from "tslib";
1
+ import { __read, __spreadArray } from "tslib";
2
2
  import { throwHttpRestError } from './network.util';
3
3
  function isConstructor(val) {
4
4
  return typeof val === 'function';
@@ -29,7 +29,7 @@ export function ErrorParser(throwableParser) {
29
29
  args[_i] = arguments[_i];
30
30
  }
31
31
  return this.network.get
32
- .apply(this.network, __spreadArray([], args, true))
32
+ .apply(this.network, __spreadArray([], __read(args), false))
33
33
  .catch(this.parse);
34
34
  };
35
35
  ErrorParserDecoratedUnionHttpNetworkProvider.prototype.post = function () {
@@ -38,7 +38,7 @@ export function ErrorParser(throwableParser) {
38
38
  args[_i] = arguments[_i];
39
39
  }
40
40
  return this.network.post
41
- .apply(this.network, __spreadArray([], args, true))
41
+ .apply(this.network, __spreadArray([], __read(args), false))
42
42
  .catch(this.parse);
43
43
  };
44
44
  ErrorParserDecoratedUnionHttpNetworkProvider.prototype.put = function () {
@@ -47,7 +47,7 @@ export function ErrorParser(throwableParser) {
47
47
  args[_i] = arguments[_i];
48
48
  }
49
49
  return this.network.put
50
- .apply(this.network, __spreadArray([], args, true))
50
+ .apply(this.network, __spreadArray([], __read(args), false))
51
51
  .catch(this.parse);
52
52
  };
53
53
  ErrorParserDecoratedUnionHttpNetworkProvider.prototype.patch = function () {
@@ -56,7 +56,7 @@ export function ErrorParser(throwableParser) {
56
56
  args[_i] = arguments[_i];
57
57
  }
58
58
  return this.network.patch
59
- .apply(this.network, __spreadArray([], args, true))
59
+ .apply(this.network, __spreadArray([], __read(args), false))
60
60
  .catch(this.parse);
61
61
  };
62
62
  ErrorParserDecoratedUnionHttpNetworkProvider.prototype.delete = function () {
@@ -65,7 +65,7 @@ export function ErrorParser(throwableParser) {
65
65
  args[_i] = arguments[_i];
66
66
  }
67
67
  return this.network.delete
68
- .apply(this.network, __spreadArray([], args, true))
68
+ .apply(this.network, __spreadArray([], __read(args), false))
69
69
  .catch(this.parse);
70
70
  };
71
71
  ErrorParserDecoratedUnionHttpNetworkProvider.prototype.getBlob = function () {
@@ -74,7 +74,7 @@ export function ErrorParser(throwableParser) {
74
74
  args[_i] = arguments[_i];
75
75
  }
76
76
  return this.network.getBlob
77
- .apply(this.network, __spreadArray([], args, true))
77
+ .apply(this.network, __spreadArray([], __read(args), false))
78
78
  .catch(this.parse);
79
79
  };
80
80
  return ErrorParserDecoratedUnionHttpNetworkProvider;
@@ -1,3 +1,4 @@
1
+ import { __read } from "tslib";
1
2
  import { HttpRestError } from '../types';
2
3
  import { isNumber, isObject, isString, isUndefined } from '../util/typeCheck';
3
4
  function isOptionalBoolean(value) {
@@ -52,7 +53,7 @@ export function throwHttpRestError(error) {
52
53
  }
53
54
  export function convertToFormData(data) {
54
55
  return Object.entries(data).reduce(function (formData, _a) {
55
- var key = _a[0], value = _a[1];
56
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
56
57
  if (Array.isArray(value)) {
57
58
  return value.reduce(function (innerFormData, file) {
58
59
  innerFormData.append(key, file, file.name);
package/esm5/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { DeviceDetectProvider, withAdaptiveRender } from './adaptive-render';
2
2
  import { createHttpApi, createHttpUploadApi, createHttpHeaderPipe, httpHeaderOperator, } from './http-api';
3
3
  import { cache } from './proxies';
4
- import { createGuardDispatch, createGuardSelector, renderRouteSystem, } from './route-system';
4
+ import { useRouteSystem } from './route-system';
5
5
  import validate, { mergeValidates, } from './validate';
6
6
  export * from './hooks';
7
7
  export * from './queries';
8
8
  export * from './storage';
9
9
  export * from './types';
10
10
  export * from './util';
11
- export { DeviceDetectProvider, withAdaptiveRender, createHttpApi, createHttpUploadApi, createHttpHeaderPipe, httpHeaderOperator, cache, renderRouteSystem, createGuardDispatch, createGuardSelector, validate, mergeValidates, };
11
+ export { DeviceDetectProvider, withAdaptiveRender, createHttpApi, createHttpUploadApi, createHttpHeaderPipe, httpHeaderOperator, cache, useRouteSystem, validate, mergeValidates, };
@@ -1,4 +1,4 @@
1
- import { __spreadArray } from "tslib";
1
+ import { __read, __spreadArray } from "tslib";
2
2
  import { createStorage } from '../storage';
3
3
  import { isServer } from '../util/envCheck';
4
4
  var FORCE_NOT_CACHE = false;
@@ -34,7 +34,7 @@ export function cache(type, expiredTime) {
34
34
  for (var _i = 0; _i < arguments.length; _i++) {
35
35
  args[_i] = arguments[_i];
36
36
  }
37
- return baseApi.get.apply(baseApi, __spreadArray([], args, true));
37
+ return baseApi.get.apply(baseApi, __spreadArray([], __read(args), false));
38
38
  });
39
39
  };
40
40
  }
@@ -1,4 +1,4 @@
1
- import { __awaiter, __generator } from "tslib";
1
+ import { __awaiter, __generator, __read } from "tslib";
2
2
  import { useCallback, useRef, useState } from 'react';
3
3
  function defineConverter(args) {
4
4
  return args;
@@ -16,9 +16,9 @@ export function buildMutationCreator(store) {
16
16
  }
17
17
  var resultHooks = function () {
18
18
  var refFetching = useRef(false);
19
- var _a = useState(null), data = _a[0], setData = _a[1];
20
- var _b = useState(undefined), error = _b[0], setError = _b[1];
21
- var _c = useState(false), loading = _c[0], setLoading = _c[1];
19
+ var _a = __read(useState(null), 2), data = _a[0], setData = _a[1];
20
+ var _b = __read(useState(undefined), 2), error = _b[0], setError = _b[1];
21
+ var _c = __read(useState(false), 2), loading = _c[0], setLoading = _c[1];
22
22
  var mutate = useCallback(function (params, throwable) {
23
23
  if (throwable === void 0) { throwable = false; }
24
24
  return __awaiter(_this, void 0, void 0, function () {
@@ -1,4 +1,4 @@
1
- import { __awaiter, __generator, __spreadArray } from "tslib";
1
+ import { __awaiter, __generator, __read, __spreadArray } from "tslib";
2
2
  import { useCallback, useLayoutEffect, useRef, useState } from 'react';
3
3
  import { createStorage } from '../storage';
4
4
  import { useMakeDeps } from './useMakeDeps';
@@ -19,9 +19,9 @@ export function buildQueryCreator(store) {
19
19
  }
20
20
  var resultHooks = function (requestParams) {
21
21
  var refFetching = useRef(false);
22
- var _a = useState(defaultData), data = _a[0], setData = _a[1];
23
- var _b = useState(undefined), error = _b[0], setError = _b[1];
24
- var _c = useState(defaultLoading), loading = _c[0], setLoading = _c[1];
22
+ var _a = __read(useState(defaultData), 2), data = _a[0], setData = _a[1];
23
+ var _b = __read(useState(undefined), 2), error = _b[0], setError = _b[1];
24
+ var _c = __read(useState(defaultLoading), 2), loading = _c[0], setLoading = _c[1];
25
25
  var deps = useMakeDeps(requestParams, subKeysFromParams);
26
26
  var loader = useCallback(function (params) { return __awaiter(_this, void 0, void 0, function () {
27
27
  var sto, cachedValue, prm;
@@ -110,7 +110,7 @@ export function buildQueryCreator(store) {
110
110
  return;
111
111
  }
112
112
  loader(requestParams);
113
- }, __spreadArray(__spreadArray([], deps, true), [lazy], false));
113
+ }, __spreadArray(__spreadArray([], __read(deps), false), [lazy], false));
114
114
  return {
115
115
  data: data,
116
116
  error: error,
@@ -1,3 +1,2 @@
1
- export * from './renderRouteSystem';
2
- export * from './moduleRoute.model';
3
- export * from './routeSystem.util';
1
+ export * from './useRouteSystem';
2
+ export * from './useRouteSystem.model';
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import { useParams } from 'react-router-dom';
3
+ import { useRouteSystem } from './useRouteSystem';
4
+ var createTestWrapper = function (text) {
5
+ return function Wrap(_a) {
6
+ var children = _a.children;
7
+ return (React.createElement("section", null,
8
+ React.createElement("h1", null, text),
9
+ children));
10
+ };
11
+ };
12
+ var createTestComp = function (text) {
13
+ return function Test() {
14
+ return React.createElement("div", null, text);
15
+ };
16
+ };
17
+ var createTestPathComp = function () {
18
+ return function Test() {
19
+ var params = useParams();
20
+ return React.createElement("div", null, params.id);
21
+ };
22
+ };
23
+ export var routes = [
24
+ {
25
+ path: '/',
26
+ wrap: createTestWrapper('indexWrapper'),
27
+ element: createTestComp('index'),
28
+ },
29
+ {
30
+ path: '/main',
31
+ wrap: createTestWrapper('mainWrapper'),
32
+ element: createTestComp('main'),
33
+ children: [
34
+ {
35
+ path: 'order',
36
+ element: createTestComp('mainOrder'),
37
+ children: [
38
+ {
39
+ path: 'news',
40
+ element: createTestComp('mainOrderNews'),
41
+ children: [
42
+ {
43
+ path: ':id',
44
+ element: createTestPathComp(),
45
+ },
46
+ ],
47
+ },
48
+ { path: ':id', element: createTestPathComp() },
49
+ ],
50
+ },
51
+ {
52
+ path: '*',
53
+ element: createTestComp('mainFallback'),
54
+ },
55
+ ],
56
+ },
57
+ {
58
+ path: '/hello',
59
+ children: [
60
+ {
61
+ path: '',
62
+ element: createTestComp('hello world'),
63
+ },
64
+ ],
65
+ },
66
+ {
67
+ path: '*',
68
+ element: createTestComp('fallback'),
69
+ },
70
+ ];
71
+ export default function App() {
72
+ return useRouteSystem(routes);
73
+ }
@@ -0,0 +1,51 @@
1
+ import { __read, __spreadArray } from "tslib";
2
+ import React from 'react';
3
+ import { Outlet, useRoutes } from 'react-router-dom';
4
+ function toJSXElement(Wrapper, Element) {
5
+ if (!Wrapper && !Element) {
6
+ return;
7
+ }
8
+ if (Wrapper) {
9
+ return (React.createElement(Wrapper, null,
10
+ React.createElement(Outlet, null)));
11
+ }
12
+ if (Element) {
13
+ return React.createElement(Element, null);
14
+ }
15
+ }
16
+ function recursionChildren(_a) {
17
+ var path = _a.path, element = _a.element, _b = _a.children, children = _b === void 0 ? [] : _b;
18
+ if (element && children.length > 0) {
19
+ return {
20
+ path: path,
21
+ children: __spreadArray([
22
+ { index: true, element: toJSXElement(undefined, element) }
23
+ ], __read(children.map(recursionChildren)), false),
24
+ };
25
+ }
26
+ return {
27
+ path: path,
28
+ element: toJSXElement(undefined, element),
29
+ children: children.map(recursionChildren),
30
+ };
31
+ }
32
+ export var useRouteSystem = function (moduleRoutes) {
33
+ var routeObject = moduleRoutes.map(function (_a) {
34
+ var path = _a.path, wrap = _a.wrap, element = _a.element, _b = _a.children, children = _b === void 0 ? [] : _b;
35
+ if (wrap && element) {
36
+ return {
37
+ path: path,
38
+ element: toJSXElement(wrap),
39
+ children: __spreadArray([
40
+ { index: true, element: toJSXElement(undefined, element) }
41
+ ], __read(children.map(recursionChildren)), false),
42
+ };
43
+ }
44
+ return {
45
+ path: path,
46
+ element: toJSXElement(wrap, element),
47
+ children: children === null || children === void 0 ? void 0 : children.map(recursionChildren),
48
+ };
49
+ });
50
+ return useRoutes(routeObject);
51
+ };
@@ -1,17 +1,17 @@
1
- import { __spreadArray } from "tslib";
1
+ import { __read, __spreadArray } from "tslib";
2
2
  export function reorder(list, startIndex, endIndex) {
3
- var result = __spreadArray([], list, true);
4
- var removed = result.splice(startIndex, 1)[0];
3
+ var result = __spreadArray([], __read(list), false);
4
+ var _a = __read(result.splice(startIndex, 1), 1), removed = _a[0];
5
5
  result.splice(endIndex, 0, removed);
6
6
  return result;
7
7
  }
8
8
  export function update(list, index, item) {
9
- var copied = __spreadArray([], list, true);
9
+ var copied = __spreadArray([], __read(list), false);
10
10
  copied[index] = item;
11
11
  return copied;
12
12
  }
13
13
  export function remove(list, index) {
14
- var copied = __spreadArray([], list, true);
14
+ var copied = __spreadArray([], __read(list), false);
15
15
  copied.splice(index, 1);
16
16
  return copied;
17
17
  }
@@ -1,8 +1,9 @@
1
+ import { __read } from "tslib";
1
2
  import { isNullable, isObject } from './typeCheck';
2
3
  function _serialize(params, parentKey) {
3
4
  if (parentKey === void 0) { parentKey = ''; }
4
5
  return Object.entries(params).reduce(function (acc, _a) {
5
- var oriKey = _a[0], value = _a[1];
6
+ var _b = __read(_a, 2), oriKey = _b[0], value = _b[1];
6
7
  var key = parentKey ? "".concat(parentKey, "%5B").concat(oriKey, "%5D") : oriKey;
7
8
  var ret = acc + (acc.length > 1 ? '&' : '');
8
9
  if (isObject(value)) {
@@ -34,7 +35,7 @@ export var qs = {
34
35
  var key = '';
35
36
  var value = '';
36
37
  for (var i = 0; i < len; i++) {
37
- _a = splittedQueries[i].split('='), key = _a[0], value = _a[1];
38
+ _a = __read(splittedQueries[i].split('='), 2), key = _a[0], value = _a[1];
38
39
  result[key] = decodeURIComponent(value);
39
40
  }
40
41
  }
@@ -1,5 +1,5 @@
1
- import React, { ReactElement, ReactNode } from 'react';
2
- interface Props {
1
+ import { ReactElement, ReactNode } from 'react';
2
+ interface AdaptiveRenderProps {
3
3
  /**
4
4
  * 데스크탑에서만 보여질 컴포넌트
5
5
  */
@@ -12,6 +12,7 @@ interface Props {
12
12
  * 태블릿일 때는 보이지 않음 여부. 기본 false
13
13
  */
14
14
  notTablet?: boolean;
15
+ children?: ReactNode;
15
16
  }
16
17
  /**
17
18
  * 적응형으로 렌더링 할 때 쓰인다.
@@ -21,5 +22,5 @@ interface Props {
21
22
  * 모바일일 경우에만 보이게 할 때는 mobile 프로퍼티를 적용 시키면 된다.
22
23
  * @param props
23
24
  */
24
- export declare const AdaptiveRender: React.FC<Props>;
25
+ export declare const AdaptiveRender: ({ mobile, notTablet, children, }: AdaptiveRenderProps) => JSX.Element;
25
26
  export {};
@@ -1,5 +1,8 @@
1
- import React, { FC } from 'react';
1
+ import React from 'react';
2
2
  export declare const DeviceDetectContext: React.Context<boolean[]>;
3
+ interface DeviceDetectProviderProps {
4
+ children: React.ReactNode;
5
+ }
3
6
  /**
4
7
  * 컨텍스트: UserAgent 및 Resizing 여부에 따른 태블릿/모바일 여부를 판별 해 준다.
5
8
  *
@@ -10,7 +13,8 @@ export declare const DeviceDetectContext: React.Context<boolean[]>;
10
13
  * @see https://stackoverflow.com/questions/29046324/whats-the-most-reliable-way-to-integrate-javascript-with-media-queries
11
14
  * @see https://jsperf.com/matchmedia-vs-resize/3
12
15
  */
13
- export declare const DeviceDetectProvider: FC;
16
+ export declare const DeviceDetectProvider: ({ children, }: DeviceDetectProviderProps) => JSX.Element;
14
17
  export declare const useIsMobile: () => boolean;
15
18
  export declare const useIsTablet: () => boolean;
16
19
  export declare const useIsNative: () => boolean;
20
+ export {};
@@ -1,3 +1,4 @@
1
1
  export * from './useDebounce';
2
2
  export * from './useQueryParams';
3
3
  export * from './useThrottle';
4
+ export * from './useNavigate';
@@ -0,0 +1,46 @@
1
+ import { NavigateOptions, To } from 'react-router-dom';
2
+ export declare type SearchParams = Record<string, any>;
3
+ export declare type SearchParamsOptions = NavigateOptions & {
4
+ merge?: boolean;
5
+ };
6
+ interface NavigationCommander {
7
+ (to: To, option?: NavigateOptions): void;
8
+ (delta: number): void;
9
+ (searchParams: SearchParams, option?: SearchParamsOptions): void;
10
+ }
11
+ /**
12
+ * react-router-dom v6의 useNavigate 기반으로 기능을 확장한 hooks.
13
+ *
14
+ * navigate 동작 방식을 똑같이 사용할 수 있으며, 필요에 따라 query 조작이 가능하다.
15
+ *
16
+ * 일반 navigate 함수 활용
17
+ * @example
18
+ * ```ts
19
+ * const navigate = useNavigate();
20
+ *
21
+ * navigate(-1);
22
+ * navigate("/page", option);
23
+ * navigate({ pathname: "/page", search : "size=10" }, option);
24
+ * ```
25
+ *
26
+ * 현재 페이지의 query에 원하는 query를 덮어씌워 이동
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const navigate = useNavigate();
31
+ *
32
+ * navigate({ page: 10, size: 20 });
33
+ *
34
+ * ```
35
+ *
36
+ * 현재 페이지의 query는 제거하고, 원하는 query로만 이동
37
+ * @example
38
+ * ```ts
39
+ * const navigate = useNavigate();
40
+ *
41
+ * navigate({ page: 10, size: 20 }, { merge: false });
42
+ *
43
+ * ```
44
+ */
45
+ export declare function useNavigate(): NavigationCommander;
46
+ export {};
package/libs/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { DeviceDetectProvider, withAdaptiveRender } from './adaptive-render';
2
2
  import { createHttpApi, createHttpUploadApi, createHttpHeaderPipe, httpHeaderOperator, HttpApi, HttpUploadApi, HttpInterceptorHandler, HttpInterceptorConfig, UploadStateArgs, XhrUploadStateArgs } from './http-api';
3
3
  import { cache } from './proxies';
4
- import { createGuardDispatch, createGuardSelector, ModuleRouteModel, renderRouteSystem } from './route-system';
4
+ import { ModuleRouteModel, useRouteSystem } from './route-system';
5
5
  import validate, { mergeValidates, ValidateBulkOptionType, ValidateBulkResultModel, ValidateCheckModel, ValidateResultModel } from './validate';
6
6
  export * from './hooks';
7
7
  export * from './queries';
8
8
  export * from './storage';
9
9
  export * from './types';
10
10
  export * from './util';
11
- export { ModuleRouteModel, DeviceDetectProvider, withAdaptiveRender, createHttpApi, createHttpUploadApi, createHttpHeaderPipe, httpHeaderOperator, HttpApi, HttpUploadApi, HttpInterceptorHandler, HttpInterceptorConfig, UploadStateArgs, XhrUploadStateArgs, cache, renderRouteSystem, createGuardDispatch, createGuardSelector, validate, mergeValidates, ValidateResultModel, ValidateBulkResultModel, ValidateCheckModel, ValidateBulkOptionType, };
11
+ export { ModuleRouteModel, DeviceDetectProvider, withAdaptiveRender, createHttpApi, createHttpUploadApi, createHttpHeaderPipe, httpHeaderOperator, HttpApi, HttpUploadApi, HttpInterceptorHandler, HttpInterceptorConfig, UploadStateArgs, XhrUploadStateArgs, cache, useRouteSystem, validate, mergeValidates, ValidateResultModel, ValidateBulkResultModel, ValidateCheckModel, ValidateBulkOptionType, };
@@ -1,4 +1,4 @@
1
- import { EnhancedStore } from '@reduxjs/toolkit';
1
+ import { AnyAction, EnhancedStore, MiddlewareArray } from '@reduxjs/toolkit';
2
2
  interface MutationHooksCreatorSettingOptionDto<SR, SP, R, P, ReduxRootState> {
3
3
  /**
4
4
  * Mutation hooks의 고유키이다. auto dispatch 사용 시 반드시 필요하다.
@@ -33,5 +33,5 @@ interface MutationResultType<R = void, P = void, E extends Error = Error> {
33
33
  interface MutationHooks<R = void, P = void, E extends Error = Error> {
34
34
  (params?: R): MutationResultType<R, P, E>;
35
35
  }
36
- export declare function buildMutationCreator<S>(store: EnhancedStore<S>): <SR, SP, R, P, E extends Error>({ key, mutator, parameterConverter, resultConverter, }: MutationHooksCreatorSettingOptionDto<SR, SP, R, P, S>) => MutationHooks<R, P, E>;
36
+ export declare function buildMutationCreator<S>(store: EnhancedStore<S, AnyAction, MiddlewareArray<any[]>>): <SR, SP, R, P, E extends Error>({ key, mutator, parameterConverter, resultConverter, }: MutationHooksCreatorSettingOptionDto<SR, SP, R, P, S>) => MutationHooks<R, P, E>;
37
37
  export {};
@@ -1,4 +1,4 @@
1
- import { EnhancedStore } from '@reduxjs/toolkit';
1
+ import { AnyAction, EnhancedStore, MiddlewareArray } from '@reduxjs/toolkit';
2
2
  import { StorageType } from '../storage';
3
3
  /**
4
4
  * query hooks가 리턴하는 객체
@@ -111,5 +111,5 @@ interface CreateRepositoryQuery<S> {
111
111
  <SR, SP, R, P, E extends Error = Error>(config: QueryHooksCreatorSettingOptionDto<SR, SP, R, P, S>): QueryHooks<R, P, E>;
112
112
  <R, P, E extends Error = Error>(config: QueryHooksCreatorSettingOptionDto<R, P, R, P, S>): QueryHooks<R, P, E>;
113
113
  }
114
- export declare function buildQueryCreator<S>(store: EnhancedStore<S>): CreateRepositoryQuery<S>;
114
+ export declare function buildQueryCreator<S>(store: EnhancedStore<S, AnyAction, MiddlewareArray<any[]>>): CreateRepositoryQuery<S>;
115
115
  export {};
@@ -1,3 +1,2 @@
1
- export * from './renderRouteSystem';
2
- export * from './moduleRoute.model';
3
- export * from './routeSystem.util';
1
+ export * from './useRouteSystem';
2
+ export * from './useRouteSystem.model';
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { ModuleRouteModel } from './useRouteSystem.model';
3
+ /**
4
+ * react-router-dom V6의 route system을 적용하는 hooks
5
+ *
6
+ * 내부적으로 useRoutes()를 사용한다.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const routes = [
11
+ * {
12
+ * path: "/",
13
+ * wrap: Wrapper,
14
+ * element: Element,
15
+ * children: [{
16
+ * path: "main", // '/main'
17
+ * element: Element,
18
+ * children: [{
19
+ * path: ":id", // '/main/:id'
20
+ * element: Element
21
+ * }]
22
+ * }]
23
+ * }
24
+ * ]
25
+ * ```
26
+ *
27
+ * renderRouteSystem을 사용하기 위해선 `BrowserRouter`로 감싸주어야 한다.
28
+ * ```ts
29
+ * <BrowserRouter>{renderRouteSystem(routes)}</BrowserRouter>
30
+ * ```
31
+ *
32
+ * @param moduleRoutes
33
+ * @returns
34
+ */
35
+ export declare const useRouteSystem: (moduleRoutes: ModuleRouteModel[]) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { ModuleRouteModel } from './useRouteSystem.model';
3
+ export declare const routes: ModuleRouteModel[];
4
+ export default function App(): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -0,0 +1,41 @@
1
+ import { ComponentType } from 'react';
2
+ export interface ModuleRouteChildModel {
3
+ /**
4
+ * routing 하기 위한 경로 설정
5
+ */
6
+ path?: string;
7
+ /**
8
+ * 설정된 경로에 렌더링 할 React Component
9
+ *
10
+ * @example
11
+ * () => JSX.Element
12
+ */
13
+ element?: ComponentType<any>;
14
+ /**
15
+ * 설정된 경로의 하위 경로 설정
16
+ *
17
+ * `children`에서의 경로(`path`) 설정은 **상대적**이다.
18
+ *
19
+ * @example
20
+ * {
21
+ * path: "/main",
22
+ * elemet: MainElement,
23
+ * children: [
24
+ * { path: "order", element: Element } // `/main/order`
25
+ * ]
26
+ * }
27
+ */
28
+ children?: ModuleRouteChildModel[];
29
+ }
30
+ export interface ModuleRouteModel extends ModuleRouteChildModel {
31
+ /**
32
+ * 설정된 경로에 본인 포함, 모든 하위 경로에 Wrapper 설정
33
+ *
34
+ * **`children`을 `props`로 받아야만 한다.**
35
+ *
36
+ * @example
37
+ *
38
+ * ({children}) => <div>{children}</div>
39
+ */
40
+ wrap?: ComponentType<any>;
41
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jordy",
3
- "version": "0.13.0",
3
+ "version": "0.14.2",
4
4
  "description": "typescript based frontend toolkit",
5
5
  "main": "./esm5/index.js",
6
6
  "module": "./esm5/index.js",
@@ -25,10 +25,13 @@
25
25
  "devDependencies": {
26
26
  "@babel/preset-env": "^7.15.8",
27
27
  "@babel/preset-typescript": "^7.15.0",
28
- "@reduxjs/toolkit": "^1.6.1",
28
+ "@reduxjs/toolkit": "^1.8.5",
29
+ "@testing-library/jest-dom": "^5.16.5",
30
+ "@testing-library/react": "^13.3.0",
29
31
  "@types/lodash-es": "^4.17.6",
30
- "@types/react": "^17.0.24",
31
- "@types/react-router-dom": "^5.3.0",
32
+ "@types/react": "^18.0.17",
33
+ "@types/react-dom": "^18.0.6",
34
+ "@types/react-router-dom": "^5.3.3",
32
35
  "@typescript-eslint/eslint-plugin": "^4.32.0",
33
36
  "@typescript-eslint/parser": "^4.32.0",
34
37
  "@vitejs/plugin-legacy": "^2.0.0",
@@ -40,10 +43,10 @@
40
43
  "lodash-es": "^4.17.21",
41
44
  "npm-run-all": "^4.1.5",
42
45
  "prettier": "^2.4.1",
43
- "react": "^17.0.2",
44
- "react-dom": "^17.0.2",
45
- "react-router-dom": "^5.3.0",
46
- "redux": "^4.1.1",
46
+ "react": "^18.2.0",
47
+ "react-dom": "^18.2.0",
48
+ "react-router-dom": "^6.3.0",
49
+ "redux": "^4.2.0",
47
50
  "rimraf": "^3.0.2",
48
51
  "ts-node": "^10.3.0",
49
52
  "tslib": "^2.3.1",
@@ -1,37 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { useHistory } from 'react-router';
3
- import { noop } from '../util';
4
- export var AsyncGuard = function (_a) {
5
- var _b = _a.redirect, redirect = _b === void 0 ? '/' : _b, FailComp = _a.failComponent, guard = _a.guard, children = _a.children;
6
- var history = useHistory();
7
- var _c = useState(guard ? null : true), end = _c[0], setEnd = _c[1];
8
- useEffect(function () {
9
- if (end || !guard) {
10
- return noop;
11
- }
12
- var handleAsync = function (res) {
13
- if (res) {
14
- setEnd(true);
15
- return;
16
- }
17
- if (FailComp) {
18
- setEnd(false);
19
- }
20
- else {
21
- history.replace(redirect);
22
- }
23
- };
24
- Promise.resolve(0)
25
- .then(guard)
26
- .then(handleAsync)
27
- .catch(function () { return handleAsync(false); });
28
- return noop;
29
- }, [end, FailComp, history, redirect, guard]);
30
- if (end === false && FailComp) {
31
- return React.createElement(FailComp, null);
32
- }
33
- if (!end) {
34
- return null;
35
- }
36
- return React.createElement(React.Fragment, null, children);
37
- };
@@ -1,64 +0,0 @@
1
- import { __spreadArray } from "tslib";
2
- import React, { Suspense } from 'react';
3
- import { Redirect, Route, Switch } from 'react-router-dom';
4
- import { AsyncGuard } from './AsyncGuard';
5
- function toPromiseList(guardList) {
6
- return guardList.map(function (fn) {
7
- var ret = fn();
8
- if (ret instanceof Promise) {
9
- return ret;
10
- }
11
- return Promise.resolve(ret);
12
- });
13
- }
14
- function renderSubRoute(route, notFound, guardList) {
15
- if (guardList === void 0) { guardList = []; }
16
- var Comp = route.component;
17
- var Wrap = route.wrap || React.Fragment;
18
- if (route.guard) {
19
- guardList.push(route.guard);
20
- if (route.child) {
21
- return (React.createElement(Wrap, null, renderRouteSystem(route.child, true, notFound, __spreadArray([], guardList, true))));
22
- }
23
- var guardResults = function () {
24
- return Promise.all(toPromiseList(guardList)).then(function (items) {
25
- return items.every(Boolean);
26
- });
27
- };
28
- return (React.createElement(Wrap, null,
29
- React.createElement(Suspense, { fallback: React.createElement(React.Fragment, null) },
30
- React.createElement(AsyncGuard, { guard: guardResults, redirect: route.redirect, failComponent: route.failComponent }, Comp && React.createElement(Comp, null)))));
31
- }
32
- if (route.redirect) {
33
- return React.createElement(Redirect, { to: route.redirect });
34
- }
35
- if (route.child) {
36
- return (React.createElement(Wrap, null, renderRouteSystem(route.child, true, notFound, __spreadArray([], guardList, true))));
37
- }
38
- if (guardList.length > 0) {
39
- var guardResults = function () {
40
- return Promise.all(toPromiseList(guardList)).then(function (items) {
41
- return items.every(Boolean);
42
- });
43
- };
44
- return (React.createElement(Wrap, null,
45
- React.createElement(Suspense, { fallback: React.createElement(React.Fragment, null) },
46
- React.createElement(AsyncGuard, { guard: guardResults, redirect: route.redirect, failComponent: route.failComponent }, Comp && React.createElement(Comp, null)))));
47
- }
48
- return (React.createElement(Wrap, null,
49
- React.createElement(Suspense, { fallback: React.createElement(React.Fragment, null) }, Comp && React.createElement(Comp, null))));
50
- }
51
- export var renderRouteSystem = function (routes, withSwitch, notFound, guardList) {
52
- if (guardList === void 0) { guardList = []; }
53
- var NotFound = notFound;
54
- if (withSwitch) {
55
- return (React.createElement(Switch, null,
56
- routes.map(function (route) { return (React.createElement(Route, { key: route.path, path: route.path, exact: route.exact }, renderSubRoute(route, notFound, __spreadArray([], guardList, true)))); }),
57
- NotFound && React.createElement(NotFound, null)));
58
- }
59
- var renders = routes.map(function (route) { return (React.createElement(Route, { key: route.path, path: route.path, exact: route.exact }, renderSubRoute(route, notFound, __spreadArray([], guardList, true)))); });
60
- if (NotFound) {
61
- renders.push(React.createElement(NotFound, { key: "%%not-found%%" }));
62
- }
63
- return renders;
64
- };
@@ -1,23 +0,0 @@
1
- import { __awaiter, __generator } from "tslib";
2
- export function createGuardDispatch(store) {
3
- return function guardDispatch(effectResult) {
4
- return __awaiter(this, void 0, void 0, function () {
5
- var dispatch, action;
6
- return __generator(this, function (_a) {
7
- switch (_a.label) {
8
- case 0:
9
- dispatch = store.dispatch;
10
- return [4, dispatch(effectResult)];
11
- case 1:
12
- action = _a.sent();
13
- return [2, action.meta.requestStatus === 'fulfilled'];
14
- }
15
- });
16
- });
17
- };
18
- }
19
- export function createGuardSelector(store) {
20
- return function guardSelector(selector) {
21
- return selector(store.getState());
22
- };
23
- }
@@ -1,8 +0,0 @@
1
- import { ComponentType, FC } from 'react';
2
- interface AsyncGuardProps {
3
- redirect?: string;
4
- failComponent?: ComponentType<any>;
5
- guard?: () => boolean | Promise<boolean>;
6
- }
7
- export declare const AsyncGuard: FC<AsyncGuardProps>;
8
- export {};
@@ -1,49 +0,0 @@
1
- import { ComponentType } from 'react';
2
- /**
3
- * 모듈에서 쓰이는 각종 페이지 컴포넌트의 라우팅 정보를 담은 객체
4
- */
5
- export interface ModuleRouteModel {
6
- /**
7
- * 수행 경로
8
- */
9
- path: string;
10
- /**
11
- * 정확성 여부. 지정된 path 가 정확히 맞아야만 컴포넌트가 렌더링 된다.
12
- */
13
- exact?: boolean;
14
- /**
15
- * 현재 경로로 왔을 때 곧바로 이동될 다른 경로.
16
- *
17
- * 만약 guard 옵션에 설정이 되어있고 그 결과가 true 가 아니라면 설정된 주소를 사용하여 이동될 것이다.
18
- */
19
- redirect?: string;
20
- /**
21
- * 해당 페이지에 접근 시 별도 권한이 필요하다면 쓰이는 기능.
22
- *
23
- * 동기 혹은 비동기로 true 가 되면 페이지 렌더링이 된다.
24
- *
25
- * 만약 설정 되었음에도 true 가 안된다면,
26
- * 1. failComponent 에 설정된 컴포넌트를 렌더링 한다.
27
- * 2. failComponent 가 설정 안되어 있다면, redirect 에 설정된 주소로 이동된다.
28
- * 3. 아무것도 설정되어 있지 않다면 루트(/) 경로로 이동한다.
29
- *
30
- * 설정하지 않을 경우 무조건 렌더링 한다.
31
- */
32
- guard?: () => boolean | Promise<boolean>;
33
- /**
34
- * 설정된 페이지 컴포넌트를 감싸서 함께 렌더링될 상위 컴포넌트
35
- */
36
- wrap?: ComponentType<any>;
37
- /**
38
- * 렌더링에 사용될 페이지 컴포넌트.
39
- */
40
- component?: ComponentType<any>;
41
- /**
42
- * guard 설정 결과가 false 일 때 렌더링 될 컴포넌트.
43
- */
44
- failComponent?: ComponentType<any>;
45
- /**
46
- * 하위 라우팅 설정
47
- */
48
- child?: ModuleRouteModel[];
49
- }
@@ -1,5 +0,0 @@
1
- import { ComponentType } from 'react';
2
- import { ModuleRouteModel } from './moduleRoute.model';
3
- declare type GuardFunctionType = () => boolean | Promise<boolean>;
4
- export declare const renderRouteSystem: (routes: ModuleRouteModel[], withSwitch?: boolean, notFound?: ComponentType<any>, guardList?: GuardFunctionType[]) => JSX.Element | JSX.Element[];
5
- export {};
@@ -1,4 +0,0 @@
1
- import { EnhancedStore, AsyncThunkAction } from '@reduxjs/toolkit';
2
- import { CombinedState } from 'redux';
3
- export declare function createGuardDispatch<T>(store: EnhancedStore<CombinedState<T>>): <R>(effectResult: AsyncThunkAction<R, any, any>) => Promise<boolean>;
4
- export declare function createGuardSelector<T>(store: EnhancedStore<CombinedState<T>>): <R>(selector: (state: CombinedState<T>) => R) => R;