@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.
Files changed (43) hide show
  1. package/cjs/components/MaterialIntlProvider.d.ts +14 -0
  2. package/cjs/components/MaterialIntlProvider.js +27 -0
  3. package/cjs/components/index.d.ts +2 -0
  4. package/cjs/hooks/useCallbackProp.js +3 -7
  5. package/cjs/hooks/useDeepClonedCompareEffect.js +4 -8
  6. package/cjs/index.d.ts +1 -0
  7. package/cjs/index.js +2 -0
  8. package/cjs/material-config/MaterialConfigContext.js +2 -2
  9. package/cjs/material-config/MaterialConfigProvider.js +17 -31
  10. package/cjs/material-config/useMaterialConfig.js +2 -2
  11. package/cjs/material-config/useMaterialConfigApiClientUpdate.js +4 -8
  12. package/cjs/material-fetch/useMaterialFetch.d.ts +1 -1
  13. package/cjs/material-fetch/useMaterialFetch.js +2 -3
  14. package/cjs/material-fetch/useMaterialFetchRaw.js +54 -71
  15. package/cjs/material-hoc/withMaterial.d.ts +13 -2
  16. package/cjs/material-hoc/withMaterial.js +31 -31
  17. package/es/components/MaterialIntlProvider.d.ts +14 -0
  18. package/es/components/MaterialIntlProvider.js +23 -0
  19. package/es/components/index.d.ts +2 -0
  20. package/es/hooks/useCallbackProp.js +3 -3
  21. package/es/hooks/useDeepClonedCompareEffect.js +4 -4
  22. package/es/index.d.ts +1 -0
  23. package/es/index.js +1 -0
  24. package/es/material-config/MaterialConfigContext.js +2 -2
  25. package/es/material-config/MaterialConfigProvider.js +17 -27
  26. package/es/material-config/useMaterialConfig.js +2 -2
  27. package/es/material-config/useMaterialConfigApiClientUpdate.js +4 -8
  28. package/es/material-fetch/useMaterialFetch.d.ts +1 -1
  29. package/es/material-fetch/useMaterialFetch.js +2 -3
  30. package/es/material-fetch/useMaterialFetchRaw.js +54 -71
  31. package/es/material-hoc/withMaterial.d.ts +13 -2
  32. package/es/material-hoc/withMaterial.js +32 -32
  33. package/package.json +11 -8
  34. package/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -414
  35. package/cjs/hooks/index.js +0 -9
  36. package/cjs/material-config/index.js +0 -13
  37. package/cjs/material-fetch/index.js +0 -9
  38. package/cjs/material-hoc/index.js +0 -8
  39. package/es/_virtual/_rollupPluginBabelHelpers.js +0 -402
  40. package/es/hooks/index.js +0 -2
  41. package/es/material-config/index.js +0 -4
  42. package/es/material-fetch/index.js +0 -2
  43. 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;
@@ -0,0 +1,2 @@
1
+ export { default as MaterialIntlProvider } from './MaterialIntlProvider';
2
+ export type { MaterialIntlProviderProps, MaterialIntlProviderPhrases, } from './MaterialIntlProvider';
@@ -2,13 +2,9 @@
2
2
 
3
3
  var React = require('react');
4
4
 
5
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
6
-
7
- var React__default = /*#__PURE__*/_interopDefaultCompat(React);
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
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
-
9
- var React__default = /*#__PURE__*/_interopDefaultCompat(React);
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
@@ -1,3 +1,4 @@
1
+ export * from './components';
1
2
  export * from './hooks';
2
3
  export * from './material-config';
3
4
  export * from './material-fetch';
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
- var MaterialConfigContext = React.createContext(null);
7
- var sessionKeySubject$ = new rxjs.BehaviorSubject(null);
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
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
11
-
12
- var React__default = /*#__PURE__*/_interopDefaultCompat(React);
13
-
14
- var MaterialConfigProvider = function MaterialConfigProvider(_ref) {
15
- var children = _ref.children,
16
- apiOriginUrl = _ref.apiOriginUrl,
17
- apiWsOriginUrl = _ref.apiWsOriginUrl,
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
- React__default.default.useEffect(function () {
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
- React__default.default.useEffect(function () {
38
- var sub = MaterialConfigContext.sessionKeySubject$.subscribe(setSessionKey);
39
- return function () {
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 jsxRuntime.jsx(MaterialConfigContext.MaterialConfigContext.Provider, {
32
+ return React.createElement(MaterialConfigContext.MaterialConfigContext.Provider, {
47
33
  children: children,
48
34
  value: {
49
- apiOriginUrl: apiOriginUrl,
50
- apiWsOriginUrl: apiWsOriginUrl,
51
- orgNameShort: orgNameShort,
52
- sessionKey: 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
- var useMaterialConfig = function useMaterialConfig() {
7
- var context = React.useContext(MaterialConfigContext.MaterialConfigContext);
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
- var useMaterialConfigApiClientUpdate = function useMaterialConfigApiClientUpdate(callback) {
9
- var context = React.useContext(MaterialConfigContext.MaterialConfigContext);
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
- var _useState = React.useState(false),
14
- _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
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("@elice/material-shared-types").APIStatus;
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
- var useMaterialFetch = function useMaterialFetch(materialType, materialFetchFn, init) {
31
- var isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(init);
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
- var _Object$freeze;
9
- var MATERIAL_FETCH_KEY_MAP = Object.freeze((_Object$freeze = {}, _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Nothing, 'materialNothing'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Note, 'materialNote'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Video, 'materialVideo'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.PDF, 'materialPdf'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Exercise, 'materialExercise'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Quiz, 'materialQuiz'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.LegacyRunbox, 'materialLegacyRunbox'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.VideoFile, 'materialVideoFile'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Live, 'materialLive'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Assignment, 'materialAssignment'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.LMSPublicContent, 'materialLmsPublicContent'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.External, 'materialExternal'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Survey, 'materialSurvey'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Runbox, 'materialRunbox'), _rollupPluginBabelHelpers.defineProperty(_Object$freeze, types.enums.LectureMaterialType.Cloud, 'materialCloud'), _Object$freeze));
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
- var useMaterialFetchRaw = function useMaterialFetchRaw(materialType, materialFetchFn) {
32
- var isReady = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
33
- var _return = React.useRef({});
34
- var materialKey = MATERIAL_FETCH_KEY_MAP[materialType];
35
- var _createEmptyFetchRes = function _createEmptyFetchRes() {
36
- var _ref;
37
- return _ref = {}, _rollupPluginBabelHelpers.defineProperty(_ref, materialKey, null), _rollupPluginBabelHelpers.defineProperty(_ref, "materialLecturePage", null), _ref;
38
- };
39
- var _useState = React.useState(_createEmptyFetchRes),
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
- var fetch = React.useCallback( /*#__PURE__*/function () {
51
- var _ref2 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee(signal) {
52
- return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee$(_context) {
53
- while (1) switch (_context.prev = _context.next) {
54
- case 0:
55
- setMatFetchStatus('pending');
56
- return _context.abrupt("return", materialFetchFn(signal).then(function (resMaterialGet) {
57
- return resMaterialGet[materialKey];
58
- }).then(function (material) {
59
- return Promise.all([material, apiClient.getOrgLecturePageResolve({
60
- materialId: material.id,
61
- materialType: materialType
62
- }, {
63
- signal: signal
64
- }).then(function (resLecturePageResolve) {
65
- return apiClient.getOrgLecturePageGet({
66
- lecturePageId: resLecturePageResolve.lecturePageId
67
- }, {
68
- signal: signal
69
- });
70
- }).then(function (resLecturePageGet) {
71
- return resLecturePageGet.lecturePage;
72
- })]);
73
- }).then(function (_ref3) {
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(function () {
86
+ React.useEffect(() => {
102
87
  if (!isReady) {
103
88
  return;
104
89
  }
105
- var abortCtrl = new AbortController();
106
- fetch(abortCtrl.signal).catch(function () {
107
- return void 0;
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
- var withMaterial = function withMaterial(Component, eliceApiClientConfigInit) {
21
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22
- return function (props) {
20
+ const withMaterial = (Component, eliceApiClientConfigInit, options = {}) => {
21
+ return props => {
23
22
  var _a;
24
- var isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
23
+ const isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
25
24
  // do not render component, if material config is not ready
26
25
  if (!isReady) {
27
- return jsxRuntime.jsx(blocks.Flex, {
26
+ return React.createElement(blocks.Flex, {
28
27
  justify: "center",
29
28
  align: "center",
30
29
  width: "100%",
31
- height: "100%",
32
- children: jsxRuntime.jsx(blocks.Spinner, {
33
- size: "small"
34
- })
35
- });
30
+ height: "100%"
31
+ }, React.createElement(blocks.Spinner, {
32
+ size: "small"
33
+ }));
36
34
  }
37
- return jsxRuntime.jsx(recoil.RecoilRoot, {
38
- override: (_a = options.overrideRecoilScope) !== null && _a !== void 0 ? _a : false,
39
- children: jsxRuntime.jsx(Component, Object.assign({}, props))
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
- var withForwardRefMaterial = function withForwardRefMaterial(Component, eliceApiClientConfigInit) {
51
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
52
- return React.forwardRef(function (props, ref) {
50
+ const withForwardRefMaterial = (Component, eliceApiClientConfigInit, options = {}) => {
51
+ return React.forwardRef((props, ref) => {
53
52
  var _a;
54
- var isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
53
+ const isReady = useMaterialConfigApiClientUpdate.useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
55
54
  // do not render component, if material config is not ready
56
55
  if (!isReady) {
57
- return jsxRuntime.jsx(blocks.Flex, {
56
+ return React.createElement(blocks.Flex, {
58
57
  justify: "center",
59
58
  align: "center",
60
59
  width: "100%",
61
- height: "100%",
62
- children: jsxRuntime.jsx(blocks.Spinner, {
63
- size: "small"
64
- })
65
- });
60
+ height: "100%"
61
+ }, React.createElement(blocks.Spinner, {
62
+ size: "small"
63
+ }));
66
64
  }
67
- return jsxRuntime.jsx(recoil.RecoilRoot, {
68
- override: (_a = options.overrideRecoilScope) !== null && _a !== void 0 ? _a : false,
69
- children: jsxRuntime.jsx(Component, Object.assign({}, props, {
70
- ref: ref
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 };
@@ -0,0 +1,2 @@
1
+ export { default as MaterialIntlProvider } from './MaterialIntlProvider';
2
+ export type { MaterialIntlProviderProps, MaterialIntlProviderPhrases, } from './MaterialIntlProvider';
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
 
3
- var useCallbackProp = function useCallbackProp(cb) {
4
- var cbRef = React.useRef(cb);
5
- React.useEffect(function () {
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
- var DEBOUNCE_TIME = 10;
6
- var useDeepClonedCompareEffect = function useDeepClonedCompareEffect(effect, deps) {
7
- var _ref = React.useRef();
8
- useDebounce(function () {
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
@@ -1,3 +1,4 @@
1
+ export * from './components';
1
2
  export * from './hooks';
2
3
  export * from './material-config';
3
4
  export * from './material-fetch';
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';