@elice/material-shared-utils 1.231227.0 → 1.231228.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/MaterialIntlProvider.js +10 -17
- package/cjs/hooks/useCallbackProp.js +3 -9
- package/cjs/hooks/useDeepClonedCompareEffect.js +4 -10
- package/cjs/index.js +2 -4
- package/cjs/material-config/MaterialConfigContext.js +2 -4
- package/cjs/material-config/MaterialConfigProvider.js +18 -31
- package/cjs/material-config/useMaterialConfig.js +2 -4
- package/cjs/material-config/useMaterialConfigApiClientUpdate.js +4 -10
- package/cjs/material-config/utils.js +0 -2
- package/cjs/material-fetch/useMaterialFetch.js +2 -4
- package/cjs/material-fetch/useMaterialFetchRaw.js +53 -73
- package/cjs/material-hoc/withMaterial.js +16 -24
- package/es/components/MaterialIntlProvider.js +8 -11
- package/es/hooks/useCallbackProp.js +3 -3
- package/es/hooks/useDeepClonedCompareEffect.js +4 -4
- package/es/material-config/MaterialConfigContext.js +2 -2
- package/es/material-config/MaterialConfigProvider.js +16 -25
- package/es/material-config/useMaterialConfig.js +2 -2
- package/es/material-config/useMaterialConfigApiClientUpdate.js +4 -8
- package/es/material-fetch/useMaterialFetch.js +2 -2
- package/es/material-fetch/useMaterialFetchRaw.js +53 -71
- package/es/material-hoc/withMaterial.js +6 -8
- package/package.json +6 -6
- package/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -419
- package/es/_virtual/_rollupPluginBabelHelpers.js +0 -405
|
@@ -1,33 +1,24 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { sessionKeySubject$, MaterialConfigContext } from './MaterialConfigContext.js';
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
orgNameShort = _React$useState2[0],
|
|
14
|
-
setOrgNameShort = _React$useState2[1];
|
|
15
|
-
var _React$useState3 = React.useState(null),
|
|
16
|
-
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
17
|
-
sessionKey = _React$useState4[0],
|
|
18
|
-
setSessionKey = _React$useState4[1];
|
|
4
|
+
const MaterialConfigProvider = ({
|
|
5
|
+
children,
|
|
6
|
+
apiOriginUrl,
|
|
7
|
+
apiWsOriginUrl,
|
|
8
|
+
orgNameShort: orgNameShortProp = 'academy'
|
|
9
|
+
}) => {
|
|
10
|
+
const [orgNameShort, setOrgNameShort] = React.useState(orgNameShortProp);
|
|
11
|
+
const [sessionKey, setSessionKey] = React.useState(null);
|
|
19
12
|
//
|
|
20
13
|
// Update org name short.
|
|
21
14
|
//
|
|
22
|
-
React.useEffect(
|
|
23
|
-
return setOrgNameShort(orgNameShortProp);
|
|
24
|
-
}, [orgNameShortProp]);
|
|
15
|
+
React.useEffect(() => setOrgNameShort(orgNameShortProp), [orgNameShortProp]);
|
|
25
16
|
//
|
|
26
17
|
// Update session key when session key subject emits.
|
|
27
18
|
//
|
|
28
|
-
React.useEffect(
|
|
29
|
-
|
|
30
|
-
return
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
const sub = sessionKeySubject$.subscribe(setSessionKey);
|
|
21
|
+
return () => {
|
|
31
22
|
sub.unsubscribe();
|
|
32
23
|
};
|
|
33
24
|
}, []);
|
|
@@ -37,10 +28,10 @@ var MaterialConfigProvider = function MaterialConfigProvider(_ref) {
|
|
|
37
28
|
return React.createElement(MaterialConfigContext.Provider, {
|
|
38
29
|
children: children,
|
|
39
30
|
value: {
|
|
40
|
-
apiOriginUrl
|
|
41
|
-
apiWsOriginUrl
|
|
42
|
-
orgNameShort
|
|
43
|
-
sessionKey
|
|
31
|
+
apiOriginUrl,
|
|
32
|
+
apiWsOriginUrl,
|
|
33
|
+
orgNameShort,
|
|
34
|
+
sessionKey
|
|
44
35
|
}
|
|
45
36
|
});
|
|
46
37
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useContext } from 'react';
|
|
2
2
|
import { MaterialConfigContext } from './MaterialConfigContext.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const useMaterialConfig = () => {
|
|
5
|
+
const context = useContext(MaterialConfigContext);
|
|
6
6
|
if (context === undefined) {
|
|
7
7
|
throw new Error('Oops, `useMaterialConfig` must be used within a `MaterialConfigProvider`');
|
|
8
8
|
}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import { useContext, useState } from 'react';
|
|
3
2
|
import { useDeepCompareEffect } from 'react-use';
|
|
4
3
|
import { MaterialConfigContext } from './MaterialConfigContext.js';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const useMaterialConfigApiClientUpdate = callback => {
|
|
6
|
+
const context = useContext(MaterialConfigContext);
|
|
8
7
|
if (!context) {
|
|
9
8
|
throw new Error('Oops, Elice material component must be used within a `MaterialConfigProvider`');
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
isReady = _useState2[0],
|
|
14
|
-
setReady = _useState2[1];
|
|
15
|
-
useDeepCompareEffect(function () {
|
|
10
|
+
const [isReady, setReady] = useState(false);
|
|
11
|
+
useDeepCompareEffect(() => {
|
|
16
12
|
var _a;
|
|
17
13
|
callback({
|
|
18
14
|
apiBaseUrl: context.apiOriginUrl,
|
|
@@ -24,8 +24,8 @@ import { useMaterialFetchRaw } from './useMaterialFetchRaw.js';
|
|
|
24
24
|
* eliceApiClientConfigs.init
|
|
25
25
|
* );
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const useMaterialFetch = (materialType, materialFetchFn, init) => {
|
|
28
|
+
const isReady = useMaterialConfigApiClientUpdate(init);
|
|
29
29
|
return useMaterialFetchRaw(materialType, materialFetchFn, isReady);
|
|
30
30
|
};
|
|
31
31
|
|
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
import { defineProperty as _defineProperty, slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import { useRef, useState, useCallback, useEffect } from 'react';
|
|
3
2
|
import { getOrgLecturePageResolve, getOrgLecturePageGet } from '@elice/api-client';
|
|
4
3
|
import { enums } from '@elice/types';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const MATERIAL_FETCH_KEY_MAP = Object.freeze({
|
|
6
|
+
[enums.LectureMaterialType.Nothing]: 'materialNothing',
|
|
7
|
+
[enums.LectureMaterialType.Note]: 'materialNote',
|
|
8
|
+
[enums.LectureMaterialType.Video]: 'materialVideo',
|
|
9
|
+
[enums.LectureMaterialType.PDF]: 'materialPdf',
|
|
10
|
+
[enums.LectureMaterialType.Exercise]: 'materialExercise',
|
|
11
|
+
[enums.LectureMaterialType.Quiz]: 'materialQuiz',
|
|
12
|
+
[enums.LectureMaterialType.LegacyRunbox]: 'materialLegacyRunbox',
|
|
13
|
+
[enums.LectureMaterialType.VideoFile]: 'materialVideoFile',
|
|
14
|
+
[enums.LectureMaterialType.Live]: 'materialLive',
|
|
15
|
+
[enums.LectureMaterialType.Assignment]: 'materialAssignment',
|
|
16
|
+
[enums.LectureMaterialType.LMSPublicContent]: 'materialLmsPublicContent',
|
|
17
|
+
[enums.LectureMaterialType.External]: 'materialExternal',
|
|
18
|
+
[enums.LectureMaterialType.Survey]: 'materialSurvey',
|
|
19
|
+
[enums.LectureMaterialType.Runbox]: 'materialRunbox'
|
|
20
|
+
});
|
|
8
21
|
//
|
|
9
22
|
//
|
|
10
23
|
//
|
|
@@ -26,85 +39,54 @@ var MATERIAL_FETCH_KEY_MAP = Object.freeze((_Object$freeze = {}, _defineProperty
|
|
|
26
39
|
* isReady // boolean
|
|
27
40
|
* );
|
|
28
41
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
-
matFetchRes = _useState2[0],
|
|
40
|
-
setMatFetchRes = _useState2[1];
|
|
41
|
-
var _useState3 = useState('idle'),
|
|
42
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
43
|
-
matFetchStatus = _useState4[0],
|
|
44
|
-
setMatFetchStatus = _useState4[1];
|
|
42
|
+
const useMaterialFetchRaw = (materialType, materialFetchFn, isReady = true) => {
|
|
43
|
+
const _return = useRef({});
|
|
44
|
+
const materialKey = MATERIAL_FETCH_KEY_MAP[materialType];
|
|
45
|
+
const _createEmptyFetchRes = () => ({
|
|
46
|
+
[materialKey]: null,
|
|
47
|
+
materialLecturePage: null
|
|
48
|
+
});
|
|
49
|
+
const [matFetchRes, setMatFetchRes] = useState(_createEmptyFetchRes);
|
|
50
|
+
const [matFetchStatus, setMatFetchStatus] = useState('idle');
|
|
45
51
|
/**
|
|
46
52
|
* fetch material and lecture page
|
|
47
53
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
var _setMatFetchRes;
|
|
73
|
-
var _ref4 = _slicedToArray(_ref3, 2),
|
|
74
|
-
material = _ref4[0],
|
|
75
|
-
materialLecturePage = _ref4[1];
|
|
76
|
-
setMatFetchRes((_setMatFetchRes = {}, _defineProperty(_setMatFetchRes, materialKey, material), _defineProperty(_setMatFetchRes, "materialLecturePage", materialLecturePage), _setMatFetchRes));
|
|
77
|
-
setMatFetchStatus('resolved');
|
|
78
|
-
}).catch(function (err) {
|
|
79
|
-
if (err.name !== 'AbortError') {
|
|
80
|
-
setMatFetchRes(_createEmptyFetchRes);
|
|
81
|
-
setMatFetchStatus('rejected');
|
|
82
|
-
}
|
|
83
|
-
}));
|
|
84
|
-
case 2:
|
|
85
|
-
case "end":
|
|
86
|
-
return _context.stop();
|
|
87
|
-
}
|
|
88
|
-
}, _callee);
|
|
89
|
-
}));
|
|
90
|
-
return function (_x) {
|
|
91
|
-
return _ref2.apply(this, arguments);
|
|
92
|
-
};
|
|
93
|
-
}(),
|
|
54
|
+
const fetch = useCallback(async signal => {
|
|
55
|
+
setMatFetchStatus('pending');
|
|
56
|
+
return materialFetchFn(signal).then(resMaterialGet => resMaterialGet[materialKey]).then(material => Promise.all([material, getOrgLecturePageResolve({
|
|
57
|
+
materialId: material.id,
|
|
58
|
+
materialType
|
|
59
|
+
}, {
|
|
60
|
+
signal: signal
|
|
61
|
+
}).then(resLecturePageResolve => getOrgLecturePageGet({
|
|
62
|
+
lecturePageId: resLecturePageResolve.lecturePageId
|
|
63
|
+
}, {
|
|
64
|
+
signal: signal
|
|
65
|
+
})).then(resLecturePageGet => resLecturePageGet.lecturePage)])).then(([material, materialLecturePage]) => {
|
|
66
|
+
setMatFetchRes({
|
|
67
|
+
[materialKey]: material,
|
|
68
|
+
materialLecturePage
|
|
69
|
+
});
|
|
70
|
+
setMatFetchStatus('resolved');
|
|
71
|
+
}).catch(err => {
|
|
72
|
+
if (err.name !== 'AbortError') {
|
|
73
|
+
setMatFetchRes(_createEmptyFetchRes);
|
|
74
|
+
setMatFetchStatus('rejected');
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
},
|
|
94
78
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
95
79
|
[materialKey, materialFetchFn]);
|
|
96
80
|
//
|
|
97
81
|
// emit `fetch` when `isReady` is changed
|
|
98
82
|
//
|
|
99
|
-
useEffect(
|
|
83
|
+
useEffect(() => {
|
|
100
84
|
if (!isReady) {
|
|
101
85
|
return;
|
|
102
86
|
}
|
|
103
|
-
|
|
104
|
-
fetch(abortCtrl.signal).catch(
|
|
105
|
-
|
|
106
|
-
});
|
|
107
|
-
return function () {
|
|
87
|
+
const abortCtrl = new AbortController();
|
|
88
|
+
fetch(abortCtrl.signal).catch(() => void 0);
|
|
89
|
+
return () => {
|
|
108
90
|
abortCtrl.abort();
|
|
109
91
|
};
|
|
110
92
|
},
|
|
@@ -15,11 +15,10 @@ import { useMaterialConfigApiClientUpdate } from '../material-config/useMaterial
|
|
|
15
15
|
* - `<RecoilRoot />`
|
|
16
16
|
* - `<IntlProvider />`
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return function (props) {
|
|
18
|
+
const withMaterial = (Component, eliceApiClientConfigInit, options = {}) => {
|
|
19
|
+
return props => {
|
|
21
20
|
var _a;
|
|
22
|
-
|
|
21
|
+
const isReady = useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
|
|
23
22
|
// do not render component, if material config is not ready
|
|
24
23
|
if (!isReady) {
|
|
25
24
|
return React.createElement(Flex, {
|
|
@@ -46,11 +45,10 @@ var withMaterial = function withMaterial(Component, eliceApiClientConfigInit) {
|
|
|
46
45
|
* - `<RecoilRoot />`
|
|
47
46
|
* - `<IntlProvider />`
|
|
48
47
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return forwardRef(function (props, ref) {
|
|
48
|
+
const withForwardRefMaterial = (Component, eliceApiClientConfigInit, options = {}) => {
|
|
49
|
+
return forwardRef((props, ref) => {
|
|
52
50
|
var _a;
|
|
53
|
-
|
|
51
|
+
const isReady = useMaterialConfigApiClientUpdate(eliceApiClientConfigInit);
|
|
54
52
|
// do not render component, if material config is not ready
|
|
55
53
|
if (!isReady) {
|
|
56
54
|
return React.createElement(Flex, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elice/material-shared-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.231228.0",
|
|
4
4
|
"description": "Shared typings for elice material projects",
|
|
5
5
|
"repository": "https://git.elicer.io/elice/frontend/library/elice-material",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"start": "run-s watch",
|
|
19
19
|
"prebuild": "run-s clean",
|
|
20
20
|
"build": "run-p build:es build:cjs",
|
|
21
|
-
"build:es": "rollup -c ../../rollup.config.ts -f es",
|
|
22
|
-
"build:cjs": "rollup -c ../../rollup.config.ts -f cjs",
|
|
23
|
-
"watch": "rollup -c ../../rollup.config.ts -f es -w",
|
|
21
|
+
"build:es": "rollup -c ../../rollup.config.ts --configPlugin typescript -f es",
|
|
22
|
+
"build:cjs": "rollup -c ../../rollup.config.ts --configPlugin typescript -f cjs",
|
|
23
|
+
"watch": "rollup -c ../../rollup.config.ts --configPlugin typescript -f es -w",
|
|
24
24
|
"lint": "eslint --ext .ts,.tsx ./src --max-warnings=0",
|
|
25
25
|
"clean": "del-cli \"es/*\" \"cjs/*\" \"dist/*\""
|
|
26
26
|
},
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@elice/api-client": "^1.230815.0",
|
|
40
|
-
"@elice/material-shared-types": "1.
|
|
40
|
+
"@elice/material-shared-types": "1.231228.0",
|
|
41
41
|
"@elice/types": "^1.230815.0",
|
|
42
42
|
"@types/lodash-es": "^4.17.6",
|
|
43
43
|
"@types/react": "~17.0.9",
|
|
44
44
|
"react-use": "^17.2.4"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "98c3e4d64847cdbe7985f8fd95835bb01f1d53ca"
|
|
47
47
|
}
|