@elice/material-shared-utils 1.240718.0-trasncript.2 → 1.240718.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.
- package/cjs/components/MaterialIntlProvider.d.ts +14 -0
- package/cjs/components/MaterialIntlProvider.js +27 -0
- package/cjs/components/index.d.ts +2 -0
- package/cjs/hooks/useCallbackProp.js +3 -7
- package/cjs/hooks/useDeepClonedCompareEffect.js +4 -8
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +2 -0
- package/cjs/material-config/MaterialConfigContext.js +2 -2
- package/cjs/material-config/MaterialConfigProvider.js +17 -31
- package/cjs/material-config/useMaterialConfig.js +2 -2
- package/cjs/material-config/useMaterialConfigApiClientUpdate.js +4 -8
- package/cjs/material-fetch/useMaterialFetch.d.ts +1 -1
- package/cjs/material-fetch/useMaterialFetch.js +2 -3
- package/cjs/material-fetch/useMaterialFetchRaw.js +54 -71
- package/cjs/material-hoc/withMaterial.d.ts +13 -2
- package/cjs/material-hoc/withMaterial.js +31 -31
- package/es/components/MaterialIntlProvider.d.ts +14 -0
- package/es/components/MaterialIntlProvider.js +23 -0
- package/es/components/index.d.ts +2 -0
- package/es/hooks/useCallbackProp.js +3 -3
- package/es/hooks/useDeepClonedCompareEffect.js +4 -4
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/material-config/MaterialConfigContext.js +2 -2
- package/es/material-config/MaterialConfigProvider.js +17 -27
- package/es/material-config/useMaterialConfig.js +2 -2
- package/es/material-config/useMaterialConfigApiClientUpdate.js +4 -8
- package/es/material-fetch/useMaterialFetch.d.ts +1 -1
- package/es/material-fetch/useMaterialFetch.js +2 -3
- package/es/material-fetch/useMaterialFetchRaw.js +54 -71
- package/es/material-hoc/withMaterial.d.ts +13 -2
- package/es/material-hoc/withMaterial.js +32 -32
- package/package.json +11 -8
- package/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -414
- package/cjs/hooks/index.js +0 -9
- package/cjs/material-config/index.js +0 -13
- package/cjs/material-fetch/index.js +0 -9
- package/cjs/material-hoc/index.js +0 -8
- package/es/_virtual/_rollupPluginBabelHelpers.js +0 -402
- package/es/hooks/index.js +0 -2
- package/es/material-config/index.js +0 -4
- package/es/material-fetch/index.js +0 -2
- package/es/material-hoc/index.js +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type MaterialIntlProviderPhrases = Record<string, Record<string, string>>;
|
|
3
|
+
export interface MaterialIntlProviderProps {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
/** Locale code. (default: `ko`) */
|
|
6
|
+
locale?: string;
|
|
7
|
+
/** I18n phrases. */
|
|
8
|
+
phrases?: MaterialIntlProviderPhrases;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* IntlProvider for material components.
|
|
12
|
+
*/
|
|
13
|
+
declare const MaterialIntlProvider: React.FC<MaterialIntlProviderProps>;
|
|
14
|
+
export default MaterialIntlProvider;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var reactIntl = require('react-intl');
|
|
7
|
+
|
|
8
|
+
const INTL_DEFAULT_LOCALE = 'ko';
|
|
9
|
+
const INTL_DEFAULT_PHRASES = {};
|
|
10
|
+
/**
|
|
11
|
+
* IntlProvider for material components.
|
|
12
|
+
*/
|
|
13
|
+
const MaterialIntlProvider = ({
|
|
14
|
+
children,
|
|
15
|
+
locale = INTL_DEFAULT_LOCALE,
|
|
16
|
+
phrases = INTL_DEFAULT_PHRASES
|
|
17
|
+
}) => {
|
|
18
|
+
const messages = React.useMemo(() => locale in phrases ? phrases[locale] : phrases[INTL_DEFAULT_LOCALE], [locale, phrases]);
|
|
19
|
+
return React.createElement(reactIntl.IntlProvider, {
|
|
20
|
+
children: children,
|
|
21
|
+
locale: locale,
|
|
22
|
+
defaultLocale: INTL_DEFAULT_LOCALE,
|
|
23
|
+
messages: messages
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
exports.default = MaterialIntlProvider;
|
|
@@ -2,13 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var useCallbackProp = function useCallbackProp(cb) {
|
|
10
|
-
var cbRef = React__default.default.useRef(cb);
|
|
11
|
-
React__default.default.useEffect(function () {
|
|
5
|
+
const useCallbackProp = cb => {
|
|
6
|
+
const cbRef = React.useRef(cb);
|
|
7
|
+
React.useEffect(() => {
|
|
12
8
|
cbRef.current = cb;
|
|
13
9
|
}, [cb]);
|
|
14
10
|
return cbRef;
|
|
@@ -4,14 +4,10 @@ var React = require('react');
|
|
|
4
4
|
var reactUse = require('react-use');
|
|
5
5
|
var lodashEs = require('lodash-es');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var DEBOUNCE_TIME = 10;
|
|
12
|
-
var useDeepClonedCompareEffect = function useDeepClonedCompareEffect(effect, deps) {
|
|
13
|
-
var _ref = React__default.default.useRef();
|
|
14
|
-
reactUse.useDebounce(function () {
|
|
7
|
+
const DEBOUNCE_TIME = 10;
|
|
8
|
+
const useDeepClonedCompareEffect = (effect, deps) => {
|
|
9
|
+
const _ref = React.useRef();
|
|
10
|
+
reactUse.useDebounce(() => {
|
|
15
11
|
if (!_ref.current || !lodashEs.isEqual(deps, _ref.current)) {
|
|
16
12
|
_ref.current = lodashEs.cloneDeep(deps);
|
|
17
13
|
effect();
|
package/cjs/index.d.ts
CHANGED
package/cjs/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var MaterialIntlProvider = require('./components/MaterialIntlProvider.js');
|
|
3
4
|
var useCallbackProp = require('./hooks/useCallbackProp.js');
|
|
4
5
|
var useDeepClonedCompareEffect = require('./hooks/useDeepClonedCompareEffect.js');
|
|
5
6
|
var MaterialConfigProvider = require('./material-config/MaterialConfigProvider.js');
|
|
@@ -12,6 +13,7 @@ var withMaterial = require('./material-hoc/withMaterial.js');
|
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
|
|
16
|
+
exports.MaterialIntlProvider = MaterialIntlProvider.default;
|
|
15
17
|
exports.useCallbackProp = useCallbackProp.useCallbackProp;
|
|
16
18
|
exports.useDeepClonedCompareEffect = useDeepClonedCompareEffect.useDeepClonedCompareEffect;
|
|
17
19
|
exports.MaterialConfigProvider = MaterialConfigProvider.default;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var rxjs = require('rxjs');
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const MaterialConfigContext = React.createContext(null);
|
|
7
|
+
const sessionKeySubject$ = new rxjs.BehaviorSubject(null);
|
|
8
8
|
|
|
9
9
|
exports.MaterialConfigContext = MaterialConfigContext;
|
|
10
10
|
exports.sessionKeySubject$ = sessionKeySubject$;
|
|
@@ -2,54 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
|
|
6
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
7
5
|
var React = require('react');
|
|
8
6
|
var MaterialConfigContext = require('./MaterialConfigContext.js');
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
_ref$orgNameShort = _ref.orgNameShort,
|
|
19
|
-
orgNameShortProp = _ref$orgNameShort === void 0 ? 'academy' : _ref$orgNameShort;
|
|
20
|
-
var _React$useState = React__default.default.useState(orgNameShortProp),
|
|
21
|
-
_React$useState2 = _rollupPluginBabelHelpers.slicedToArray(_React$useState, 2),
|
|
22
|
-
orgNameShort = _React$useState2[0],
|
|
23
|
-
setOrgNameShort = _React$useState2[1];
|
|
24
|
-
var _React$useState3 = React__default.default.useState(null),
|
|
25
|
-
_React$useState4 = _rollupPluginBabelHelpers.slicedToArray(_React$useState3, 2),
|
|
26
|
-
sessionKey = _React$useState4[0],
|
|
27
|
-
setSessionKey = _React$useState4[1];
|
|
8
|
+
const MaterialConfigProvider = ({
|
|
9
|
+
children,
|
|
10
|
+
apiOriginUrl,
|
|
11
|
+
apiWsOriginUrl,
|
|
12
|
+
orgNameShort: orgNameShortProp = 'academy'
|
|
13
|
+
}) => {
|
|
14
|
+
const [orgNameShort, setOrgNameShort] = React.useState(orgNameShortProp);
|
|
15
|
+
const [sessionKey, setSessionKey] = React.useState(null);
|
|
28
16
|
//
|
|
29
17
|
// Update org name short.
|
|
30
18
|
//
|
|
31
|
-
|
|
32
|
-
return setOrgNameShort(orgNameShortProp);
|
|
33
|
-
}, [orgNameShortProp]);
|
|
19
|
+
React.useEffect(() => setOrgNameShort(orgNameShortProp), [orgNameShortProp]);
|
|
34
20
|
//
|
|
35
21
|
// Update session key when session key subject emits.
|
|
36
22
|
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
const sub = MaterialConfigContext.sessionKeySubject$.subscribe(setSessionKey);
|
|
25
|
+
return () => {
|
|
40
26
|
sub.unsubscribe();
|
|
41
27
|
};
|
|
42
28
|
}, []);
|
|
43
29
|
//
|
|
44
30
|
//
|
|
45
31
|
//
|
|
46
|
-
return
|
|
32
|
+
return React.createElement(MaterialConfigContext.MaterialConfigContext.Provider, {
|
|
47
33
|
children: children,
|
|
48
34
|
value: {
|
|
49
|
-
apiOriginUrl
|
|
50
|
-
apiWsOriginUrl
|
|
51
|
-
orgNameShort
|
|
52
|
-
sessionKey
|
|
35
|
+
apiOriginUrl,
|
|
36
|
+
apiWsOriginUrl,
|
|
37
|
+
orgNameShort,
|
|
38
|
+
sessionKey
|
|
53
39
|
}
|
|
54
40
|
});
|
|
55
41
|
};
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var MaterialConfigContext = require('./MaterialConfigContext.js');
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const useMaterialConfig = () => {
|
|
7
|
+
const context = React.useContext(MaterialConfigContext.MaterialConfigContext);
|
|
8
8
|
if (context === undefined) {
|
|
9
9
|
throw new Error('Oops, `useMaterialConfig` must be used within a `MaterialConfigProvider`');
|
|
10
10
|
}
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
|
|
4
3
|
var React = require('react');
|
|
5
4
|
var reactUse = require('react-use');
|
|
6
5
|
var MaterialConfigContext = require('./MaterialConfigContext.js');
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const useMaterialConfigApiClientUpdate = callback => {
|
|
8
|
+
const context = React.useContext(MaterialConfigContext.MaterialConfigContext);
|
|
10
9
|
if (!context) {
|
|
11
10
|
throw new Error('Oops, Elice material component must be used within a `MaterialConfigProvider`');
|
|
12
11
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
isReady = _useState2[0],
|
|
16
|
-
setReady = _useState2[1];
|
|
17
|
-
reactUse.useDeepCompareEffect(function () {
|
|
12
|
+
const [isReady, setReady] = React.useState(false);
|
|
13
|
+
reactUse.useDeepCompareEffect(() => {
|
|
18
14
|
var _a;
|
|
19
15
|
callback({
|
|
20
16
|
apiBaseUrl: context.apiOriginUrl,
|
|
@@ -67,7 +67,7 @@ export declare const useMaterialFetch: <MT extends enums.LectureMaterialType, R
|
|
|
67
67
|
title: string;
|
|
68
68
|
} | null;
|
|
69
69
|
} & {
|
|
70
|
-
status: import("
|
|
70
|
+
status: import("packages/elice-material-shared-types/es").APIStatus;
|
|
71
71
|
refetch: (signal?: AbortSignal | undefined) => Promise<void>;
|
|
72
72
|
};
|
|
73
73
|
export {};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
require('react/jsx-runtime');
|
|
4
3
|
require('react');
|
|
5
4
|
require('../material-config/MaterialConfigContext.js');
|
|
6
5
|
var useMaterialConfigApiClientUpdate = require('../material-config/useMaterialConfigApiClientUpdate.js');
|
|
@@ -27,8 +26,8 @@ var useMaterialFetchRaw = require('./useMaterialFetchRaw.js');
|
|
|
27
26
|
* eliceApiClientConfigs.init
|
|
28
27
|
* );
|
|
29
28
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const useMaterialFetch = (materialType, materialFetchFn, init) => {
|
|
30
|
+
const isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(init);
|
|
32
31
|
return useMaterialFetchRaw.useMaterialFetchRaw(materialType, materialFetchFn, isReady);
|
|
33
32
|
};
|
|
34
33
|
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
|
|
4
3
|
var React = require('react');
|
|
5
4
|
var apiClient = require('@elice/api-client');
|
|
6
5
|
var types = require('@elice/types');
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const MATERIAL_FETCH_KEY_MAP = Object.freeze({
|
|
8
|
+
[types.enums.LectureMaterialType.Nothing]: 'materialNothing',
|
|
9
|
+
[types.enums.LectureMaterialType.Note]: 'materialNote',
|
|
10
|
+
[types.enums.LectureMaterialType.Video]: 'materialVideo',
|
|
11
|
+
[types.enums.LectureMaterialType.PDF]: 'materialPdf',
|
|
12
|
+
[types.enums.LectureMaterialType.Exercise]: 'materialExercise',
|
|
13
|
+
[types.enums.LectureMaterialType.Quiz]: 'materialQuiz',
|
|
14
|
+
[types.enums.LectureMaterialType.LegacyRunbox]: 'materialLegacyRunbox',
|
|
15
|
+
[types.enums.LectureMaterialType.VideoFile]: 'materialVideoFile',
|
|
16
|
+
[types.enums.LectureMaterialType.Live]: 'materialLive',
|
|
17
|
+
[types.enums.LectureMaterialType.Assignment]: 'materialAssignment',
|
|
18
|
+
[types.enums.LectureMaterialType.LMSPublicContent]: 'materialLmsPublicContent',
|
|
19
|
+
[types.enums.LectureMaterialType.External]: 'materialExternal',
|
|
20
|
+
[types.enums.LectureMaterialType.Survey]: 'materialSurvey',
|
|
21
|
+
[types.enums.LectureMaterialType.Runbox]: 'materialRunbox',
|
|
22
|
+
[types.enums.LectureMaterialType.Cloud]: 'materialCloud'
|
|
23
|
+
});
|
|
10
24
|
//
|
|
11
25
|
//
|
|
12
26
|
//
|
|
@@ -28,85 +42,54 @@ var MATERIAL_FETCH_KEY_MAP = Object.freeze((_Object$freeze = {}, _rollupPluginBa
|
|
|
28
42
|
* isReady // boolean
|
|
29
43
|
* );
|
|
30
44
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
_useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
|
|
41
|
-
matFetchRes = _useState2[0],
|
|
42
|
-
setMatFetchRes = _useState2[1];
|
|
43
|
-
var _useState3 = React.useState('idle'),
|
|
44
|
-
_useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
|
|
45
|
-
matFetchStatus = _useState4[0],
|
|
46
|
-
setMatFetchStatus = _useState4[1];
|
|
45
|
+
const useMaterialFetchRaw = (materialType, materialFetchFn, isReady = true) => {
|
|
46
|
+
const _return = React.useRef({});
|
|
47
|
+
const materialKey = MATERIAL_FETCH_KEY_MAP[materialType];
|
|
48
|
+
const _createEmptyFetchRes = () => ({
|
|
49
|
+
[materialKey]: null,
|
|
50
|
+
materialLecturePage: null
|
|
51
|
+
});
|
|
52
|
+
const [matFetchRes, setMatFetchRes] = React.useState(_createEmptyFetchRes);
|
|
53
|
+
const [matFetchStatus, setMatFetchStatus] = React.useState('idle');
|
|
47
54
|
/**
|
|
48
55
|
* fetch material and lecture page
|
|
49
56
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
var _setMatFetchRes;
|
|
75
|
-
var _ref4 = _rollupPluginBabelHelpers.slicedToArray(_ref3, 2),
|
|
76
|
-
material = _ref4[0],
|
|
77
|
-
materialLecturePage = _ref4[1];
|
|
78
|
-
setMatFetchRes((_setMatFetchRes = {}, _rollupPluginBabelHelpers.defineProperty(_setMatFetchRes, materialKey, material), _rollupPluginBabelHelpers.defineProperty(_setMatFetchRes, "materialLecturePage", materialLecturePage), _setMatFetchRes));
|
|
79
|
-
setMatFetchStatus('resolved');
|
|
80
|
-
}).catch(function (err) {
|
|
81
|
-
if (err.name !== 'AbortError') {
|
|
82
|
-
setMatFetchRes(_createEmptyFetchRes);
|
|
83
|
-
setMatFetchStatus('rejected');
|
|
84
|
-
}
|
|
85
|
-
}));
|
|
86
|
-
case 2:
|
|
87
|
-
case "end":
|
|
88
|
-
return _context.stop();
|
|
89
|
-
}
|
|
90
|
-
}, _callee);
|
|
91
|
-
}));
|
|
92
|
-
return function (_x) {
|
|
93
|
-
return _ref2.apply(this, arguments);
|
|
94
|
-
};
|
|
95
|
-
}(),
|
|
57
|
+
const fetch = React.useCallback(async signal => {
|
|
58
|
+
setMatFetchStatus('pending');
|
|
59
|
+
return materialFetchFn(signal).then(resMaterialGet => resMaterialGet[materialKey]).then(material => Promise.all([material, apiClient.getOrgLecturePageResolve({
|
|
60
|
+
materialId: material.id,
|
|
61
|
+
materialType
|
|
62
|
+
}, {
|
|
63
|
+
signal: signal
|
|
64
|
+
}).then(resLecturePageResolve => apiClient.getOrgLecturePageGet({
|
|
65
|
+
lecturePageId: resLecturePageResolve.lecturePageId
|
|
66
|
+
}, {
|
|
67
|
+
signal: signal
|
|
68
|
+
})).then(resLecturePageGet => resLecturePageGet.lecturePage)])).then(([material, materialLecturePage]) => {
|
|
69
|
+
setMatFetchRes({
|
|
70
|
+
[materialKey]: material,
|
|
71
|
+
materialLecturePage
|
|
72
|
+
});
|
|
73
|
+
setMatFetchStatus('resolved');
|
|
74
|
+
}).catch(err => {
|
|
75
|
+
if (err.name !== 'AbortError') {
|
|
76
|
+
setMatFetchRes(_createEmptyFetchRes);
|
|
77
|
+
setMatFetchStatus('rejected');
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
},
|
|
96
81
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
97
82
|
[materialKey, materialFetchFn]);
|
|
98
83
|
//
|
|
99
84
|
// emit `fetch` when `isReady` is changed
|
|
100
85
|
//
|
|
101
|
-
React.useEffect(
|
|
86
|
+
React.useEffect(() => {
|
|
102
87
|
if (!isReady) {
|
|
103
88
|
return;
|
|
104
89
|
}
|
|
105
|
-
|
|
106
|
-
fetch(abortCtrl.signal).catch(
|
|
107
|
-
|
|
108
|
-
});
|
|
109
|
-
return function () {
|
|
90
|
+
const abortCtrl = new AbortController();
|
|
91
|
+
fetch(abortCtrl.signal).catch(() => void 0);
|
|
92
|
+
return () => {
|
|
110
93
|
abortCtrl.abort();
|
|
111
94
|
};
|
|
112
95
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { MaterialIntlProviderPhrases } from '../components/MaterialIntlProvider';
|
|
2
3
|
import type { MaterialConfigApiClientUpdateCallback } from '../material-config';
|
|
3
4
|
type AnyObject = Record<string, any>;
|
|
4
5
|
/**
|
|
@@ -10,6 +11,16 @@ export interface WithMaterialOptions {
|
|
|
10
11
|
* - ref: https://recoiljs.org/docs/api-reference/core/RecoilRoot/#props -> `override`
|
|
11
12
|
*/
|
|
12
13
|
overrideRecoilScope?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Phrases for `IntlProvider`.
|
|
16
|
+
*/
|
|
17
|
+
phrases?: MaterialIntlProviderPhrases;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Common props for material components.
|
|
21
|
+
*/
|
|
22
|
+
export interface MaterialCommponentCommonProps {
|
|
23
|
+
locale?: string;
|
|
13
24
|
}
|
|
14
25
|
/**
|
|
15
26
|
* HOC for material components.
|
|
@@ -18,7 +29,7 @@ export interface WithMaterialOptions {
|
|
|
18
29
|
* - `<RecoilRoot />`
|
|
19
30
|
* - `<IntlProvider />`
|
|
20
31
|
*/
|
|
21
|
-
export declare const withMaterial: <P extends AnyObject>(Component: React.VFC<P>, eliceApiClientConfigInit: MaterialConfigApiClientUpdateCallback, options?: WithMaterialOptions) => React.VFC<P>;
|
|
32
|
+
export declare const withMaterial: <P extends AnyObject>(Component: React.VFC<P & MaterialCommponentCommonProps>, eliceApiClientConfigInit: MaterialConfigApiClientUpdateCallback, options?: WithMaterialOptions) => React.VFC<P & MaterialCommponentCommonProps>;
|
|
22
33
|
/**
|
|
23
34
|
* HOC for material forward ref exotic components.
|
|
24
35
|
*
|
|
@@ -26,5 +37,5 @@ export declare const withMaterial: <P extends AnyObject>(Component: React.VFC<P>
|
|
|
26
37
|
* - `<RecoilRoot />`
|
|
27
38
|
* - `<IntlProvider />`
|
|
28
39
|
*/
|
|
29
|
-
export declare const withForwardRefMaterial: <T, P extends AnyObject>(Component: React.ForwardRefExoticComponent<P & React.RefAttributes<T>>, eliceApiClientConfigInit: MaterialConfigApiClientUpdateCallback, options?: WithMaterialOptions) => React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<T>>;
|
|
40
|
+
export declare const withForwardRefMaterial: <T, P extends AnyObject>(Component: React.ForwardRefExoticComponent<P & MaterialCommponentCommonProps & React.RefAttributes<T>>, eliceApiClientConfigInit: MaterialConfigApiClientUpdateCallback, options?: WithMaterialOptions) => React.ForwardRefExoticComponent<React.PropsWithoutRef<P & MaterialCommponentCommonProps> & React.RefAttributes<T>>;
|
|
30
41
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
3
|
var React = require('react');
|
|
5
4
|
var blocks = require('@elice/blocks');
|
|
6
5
|
var recoil = require('recoil');
|
|
6
|
+
var MaterialIntlProvider = require('../components/MaterialIntlProvider.js');
|
|
7
7
|
require('../material-config/MaterialConfigContext.js');
|
|
8
8
|
var useMaterialConfigApiClientUpdate = require('../material-config/useMaterialConfigApiClientUpdate.js');
|
|
9
9
|
|
|
@@ -17,27 +17,27 @@ var useMaterialConfigApiClientUpdate = require('../material-config/useMaterialCo
|
|
|
17
17
|
* - `<RecoilRoot />`
|
|
18
18
|
* - `<IntlProvider />`
|
|
19
19
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return function (props) {
|
|
20
|
+
const withMaterial = (Component, eliceApiClientConfigInit, options = {}) => {
|
|
21
|
+
return props => {
|
|
23
22
|
var _a;
|
|
24
|
-
|
|
23
|
+
const isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
|
|
25
24
|
// do not render component, if material config is not ready
|
|
26
25
|
if (!isReady) {
|
|
27
|
-
return
|
|
26
|
+
return React.createElement(blocks.Flex, {
|
|
28
27
|
justify: "center",
|
|
29
28
|
align: "center",
|
|
30
29
|
width: "100%",
|
|
31
|
-
height: "100%"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
});
|
|
30
|
+
height: "100%"
|
|
31
|
+
}, React.createElement(blocks.Spinner, {
|
|
32
|
+
size: "small"
|
|
33
|
+
}));
|
|
36
34
|
}
|
|
37
|
-
return
|
|
38
|
-
override: (_a = options.overrideRecoilScope) !== null && _a !== void 0 ? _a : false
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
return React.createElement(recoil.RecoilRoot, {
|
|
36
|
+
override: (_a = options.overrideRecoilScope) !== null && _a !== void 0 ? _a : false
|
|
37
|
+
}, React.createElement(MaterialIntlProvider.default, {
|
|
38
|
+
locale: props.locale,
|
|
39
|
+
phrases: options.phrases
|
|
40
|
+
}, React.createElement(Component, Object.assign({}, props))));
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
43
|
/**
|
|
@@ -47,29 +47,29 @@ var withMaterial = function withMaterial(Component, eliceApiClientConfigInit) {
|
|
|
47
47
|
* - `<RecoilRoot />`
|
|
48
48
|
* - `<IntlProvider />`
|
|
49
49
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return React.forwardRef(function (props, ref) {
|
|
50
|
+
const withForwardRefMaterial = (Component, eliceApiClientConfigInit, options = {}) => {
|
|
51
|
+
return React.forwardRef((props, ref) => {
|
|
53
52
|
var _a;
|
|
54
|
-
|
|
53
|
+
const isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
|
|
55
54
|
// do not render component, if material config is not ready
|
|
56
55
|
if (!isReady) {
|
|
57
|
-
return
|
|
56
|
+
return React.createElement(blocks.Flex, {
|
|
58
57
|
justify: "center",
|
|
59
58
|
align: "center",
|
|
60
59
|
width: "100%",
|
|
61
|
-
height: "100%"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
});
|
|
60
|
+
height: "100%"
|
|
61
|
+
}, React.createElement(blocks.Spinner, {
|
|
62
|
+
size: "small"
|
|
63
|
+
}));
|
|
66
64
|
}
|
|
67
|
-
return
|
|
68
|
-
override: (_a = options.overrideRecoilScope) !== null && _a !== void 0 ? _a : false
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
65
|
+
return React.createElement(recoil.RecoilRoot, {
|
|
66
|
+
override: (_a = options.overrideRecoilScope) !== null && _a !== void 0 ? _a : false
|
|
67
|
+
}, React.createElement(MaterialIntlProvider.default, {
|
|
68
|
+
locale: props.locale,
|
|
69
|
+
phrases: options.phrases
|
|
70
|
+
}, React.createElement(Component, Object.assign({}, props, {
|
|
71
|
+
ref: ref
|
|
72
|
+
}))));
|
|
73
73
|
});
|
|
74
74
|
};
|
|
75
75
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type MaterialIntlProviderPhrases = Record<string, Record<string, string>>;
|
|
3
|
+
export interface MaterialIntlProviderProps {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
/** Locale code. (default: `ko`) */
|
|
6
|
+
locale?: string;
|
|
7
|
+
/** I18n phrases. */
|
|
8
|
+
phrases?: MaterialIntlProviderPhrases;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* IntlProvider for material components.
|
|
12
|
+
*/
|
|
13
|
+
declare const MaterialIntlProvider: React.FC<MaterialIntlProviderProps>;
|
|
14
|
+
export default MaterialIntlProvider;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IntlProvider } from 'react-intl';
|
|
3
|
+
|
|
4
|
+
const INTL_DEFAULT_LOCALE = 'ko';
|
|
5
|
+
const INTL_DEFAULT_PHRASES = {};
|
|
6
|
+
/**
|
|
7
|
+
* IntlProvider for material components.
|
|
8
|
+
*/
|
|
9
|
+
const MaterialIntlProvider = ({
|
|
10
|
+
children,
|
|
11
|
+
locale = INTL_DEFAULT_LOCALE,
|
|
12
|
+
phrases = INTL_DEFAULT_PHRASES
|
|
13
|
+
}) => {
|
|
14
|
+
const messages = React.useMemo(() => locale in phrases ? phrases[locale] : phrases[INTL_DEFAULT_LOCALE], [locale, phrases]);
|
|
15
|
+
return React.createElement(IntlProvider, {
|
|
16
|
+
children: children,
|
|
17
|
+
locale: locale,
|
|
18
|
+
defaultLocale: INTL_DEFAULT_LOCALE,
|
|
19
|
+
messages: messages
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { MaterialIntlProvider as default };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
React.useEffect(
|
|
3
|
+
const useCallbackProp = cb => {
|
|
4
|
+
const cbRef = React.useRef(cb);
|
|
5
|
+
React.useEffect(() => {
|
|
6
6
|
cbRef.current = cb;
|
|
7
7
|
}, [cb]);
|
|
8
8
|
return cbRef;
|
|
@@ -2,10 +2,10 @@ import React from 'react';
|
|
|
2
2
|
import { useDebounce } from 'react-use';
|
|
3
3
|
import { isEqual, cloneDeep } from 'lodash-es';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
useDebounce(
|
|
5
|
+
const DEBOUNCE_TIME = 10;
|
|
6
|
+
const useDeepClonedCompareEffect = (effect, deps) => {
|
|
7
|
+
const _ref = React.useRef();
|
|
8
|
+
useDebounce(() => {
|
|
9
9
|
if (!_ref.current || !isEqual(deps, _ref.current)) {
|
|
10
10
|
_ref.current = cloneDeep(deps);
|
|
11
11
|
effect();
|
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as MaterialIntlProvider } from './components/MaterialIntlProvider.js';
|
|
1
2
|
export { useCallbackProp } from './hooks/useCallbackProp.js';
|
|
2
3
|
export { useDeepClonedCompareEffect } from './hooks/useDeepClonedCompareEffect.js';
|
|
3
4
|
export { default as MaterialConfigProvider } from './material-config/MaterialConfigProvider.js';
|