@elice/material-exercise 1.230821.0 → 1.230829.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/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +3 -21
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.d.ts +1 -1
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +2 -2
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +73 -20
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +3 -21
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.d.ts +1 -1
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +2 -2
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +75 -22
- package/package.json +18 -4
|
@@ -8,6 +8,7 @@ var reactIntl = require('react-intl');
|
|
|
8
8
|
var blocks = require('@elice/blocks');
|
|
9
9
|
var designTokens = require('@elice/design-tokens');
|
|
10
10
|
var icons = require('@elice/icons');
|
|
11
|
+
var muiElements = require('@elice/mui-elements');
|
|
11
12
|
var recoil = require('recoil');
|
|
12
13
|
var ExerciseMenuButton = require('../../shared/exercise-menu-button/ExerciseMenuButton.js');
|
|
13
14
|
var recoil$1 = require('../context/recoil.js');
|
|
@@ -21,7 +22,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
21
22
|
|
|
22
23
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
23
24
|
|
|
24
|
-
var IMAGE_NEW_WIN_IFRAME_STYLE = 'border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;';
|
|
25
25
|
var ExerciseMenuStdioFileBrowser = function ExerciseMenuStdioFileBrowser() {
|
|
26
26
|
var intl = reactIntl.useIntl();
|
|
27
27
|
var _React$useState = React__default["default"].useState(false),
|
|
@@ -30,19 +30,6 @@ var ExerciseMenuStdioFileBrowser = function ExerciseMenuStdioFileBrowser() {
|
|
|
30
30
|
setOpen = _React$useState2[1];
|
|
31
31
|
var anchorRef = React__default["default"].useRef(null);
|
|
32
32
|
var stdioFiles = recoil.useRecoilValue(recoil$1.exerciseRunnerStdioFilesState);
|
|
33
|
-
/**
|
|
34
|
-
* Open image as new window.
|
|
35
|
-
*/
|
|
36
|
-
var handleImageFileClick = function handleImageFileClick(e) {
|
|
37
|
-
e.preventDefault();
|
|
38
|
-
var win = window.open('about:blank', e.currentTarget.target);
|
|
39
|
-
if (win) {
|
|
40
|
-
// since `Not allowed to navigate top frame to data URL:` error thrown by browser,
|
|
41
|
-
// use iframe to display image at new window.
|
|
42
|
-
win.document.write("<iframe src=\"".concat(e.currentTarget.href, "\" frameborder=\"0\" style=\"").concat(IMAGE_NEW_WIN_IFRAME_STYLE, "\" allowfullscreen></iframe>"));
|
|
43
|
-
win.focus();
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
33
|
//
|
|
47
34
|
// Open stdio file browser, on file changes.
|
|
48
35
|
//
|
|
@@ -62,15 +49,10 @@ var ExerciseMenuStdioFileBrowser = function ExerciseMenuStdioFileBrowser() {
|
|
|
62
49
|
var filename = ext ? "image_output.".concat(ext) : 'image_output';
|
|
63
50
|
return React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItem, {
|
|
64
51
|
key: key
|
|
65
|
-
}, React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItemContentImageWrap, {
|
|
66
|
-
href: f.data,
|
|
67
|
-
target: "_blank",
|
|
68
|
-
rel: "noopener noreferrer",
|
|
69
|
-
onClick: handleImageFileClick
|
|
70
|
-
}, React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItemContentImage, {
|
|
52
|
+
}, React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItemContentImageWrap, null, React__default["default"].createElement(muiElements.ImageViewer, null, React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItemContentImage, {
|
|
71
53
|
src: f.data,
|
|
72
54
|
alt: filename
|
|
73
|
-
})), React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItemDownloadButton, {
|
|
55
|
+
}))), React__default["default"].createElement(ExerciseMenuStdioFileBrowser_styled.StyledFilePopoverBodyListItemDownloadButton, {
|
|
74
56
|
href: f.data,
|
|
75
57
|
download: filename
|
|
76
58
|
}, React__default["default"].createElement(blocks.Icon, {
|
package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare const StyledFilePopoverBodyList: import("styled-components").Styl
|
|
|
7
7
|
export declare const StyledFilePopoverBodyListItem: import("styled-components").StyledComponent<"li", any, {}, never>;
|
|
8
8
|
export declare const StyledFilePopoverBodyListItemDownloadButton: import("styled-components").StyledComponent<"a", any, {}, never>;
|
|
9
9
|
export declare const StyledFilePopoverBodyListItemContentFile: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
10
|
-
export declare const StyledFilePopoverBodyListItemContentImageWrap: import("styled-components").StyledComponent<"
|
|
10
|
+
export declare const StyledFilePopoverBodyListItemContentImageWrap: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
11
11
|
export declare const StyledFilePopoverBodyListItemContentImage: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
12
12
|
export declare const StyledPreferenceBodyItem: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
13
13
|
export declare const StyledSelect: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("@elice/blocks").SelectProps & import("react").RefAttributes<HTMLSelectElement>>, any, {}, never>;
|
package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js
CHANGED
|
@@ -34,12 +34,12 @@ var StyledFilePopoverBodyListItemDownloadButton = styled__default["default"].a.w
|
|
|
34
34
|
var StyledFilePopoverBodyListItemContentFile = styled__default["default"].div.withConfig({
|
|
35
35
|
componentId: "sc-9mtuee-7"
|
|
36
36
|
})(["flex:1;display:flex;align-items:center;justify-content:space-between;padding:0 0.5rem;"]);
|
|
37
|
-
var StyledFilePopoverBodyListItemContentImageWrap = styled__default["default"].
|
|
37
|
+
var StyledFilePopoverBodyListItemContentImageWrap = styled__default["default"].div.withConfig({
|
|
38
38
|
componentId: "sc-9mtuee-8"
|
|
39
39
|
})(["display:flex;padding:0.5rem;flex:1 1 0;background:", ";"], designTokens.base.color.white);
|
|
40
40
|
var StyledFilePopoverBodyListItemContentImage = styled__default["default"].img.withConfig({
|
|
41
41
|
componentId: "sc-9mtuee-9"
|
|
42
|
-
})(["width:100%;max-height:128px;object-fit:contain;"]);
|
|
42
|
+
})(["width:100%;max-height:128px;object-fit:contain;cursor:zoom-in;"]);
|
|
43
43
|
var StyledPreferenceBodyItem = styled__default["default"].div.withConfig({
|
|
44
44
|
componentId: "sc-9mtuee-10"
|
|
45
45
|
})(["display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;min-height:2rem;color:white;&:last-child{margin-bottom:0;}"]);
|
package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js
CHANGED
|
@@ -23,6 +23,9 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
23
23
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
24
24
|
var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
|
|
25
25
|
|
|
26
|
+
//
|
|
27
|
+
//
|
|
28
|
+
//
|
|
26
29
|
var StyledHr = styled__default["default"](blocks.Hr).withConfig({
|
|
27
30
|
componentId: "sc-30ywzi-0"
|
|
28
31
|
})(["height:2rem;"]);
|
|
@@ -32,6 +35,9 @@ var StyledRunnerInfoTitle = styled__default["default"].span.withConfig({
|
|
|
32
35
|
var StyledRunnerInfoContent = styled__default["default"].span.withConfig({
|
|
33
36
|
componentId: "sc-30ywzi-2"
|
|
34
37
|
})(["display:block;color:", ";font-size:12px;line-height:1.25;"], designTokens.base.color.navy1);
|
|
38
|
+
//
|
|
39
|
+
//
|
|
40
|
+
//
|
|
35
41
|
var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunningInfo() {
|
|
36
42
|
var intl = reactIntl.useIntl();
|
|
37
43
|
var _React$useContext = React__default["default"].useContext(context.ExerciseContext),
|
|
@@ -53,6 +59,10 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
53
59
|
_React$useState4 = _rollupPluginBabelHelpers.slicedToArray(_React$useState3, 2),
|
|
54
60
|
exerciseLastRunning = _React$useState4[0],
|
|
55
61
|
setExerciseLastRunning = _React$useState4[1];
|
|
62
|
+
var _React$useState5 = React__default["default"].useState(null),
|
|
63
|
+
_React$useState6 = _rollupPluginBabelHelpers.slicedToArray(_React$useState5, 2),
|
|
64
|
+
exerciseLastSubmit = _React$useState6[0],
|
|
65
|
+
setExerciseLastSubmit = _React$useState6[1];
|
|
56
66
|
//
|
|
57
67
|
// Get exercise running list.
|
|
58
68
|
//
|
|
@@ -68,21 +78,52 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
68
78
|
return;
|
|
69
79
|
}
|
|
70
80
|
var abortCtrl = new AbortController();
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
var _fetch = /*#__PURE__*/function () {
|
|
82
|
+
var _ref = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee(runType) {
|
|
83
|
+
return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee$(_context) {
|
|
84
|
+
while (1) switch (_context.prev = _context.next) {
|
|
85
|
+
case 0:
|
|
86
|
+
return _context.abrupt("return", apiClient.getOrgMaterialExerciseExerciseRunningList({
|
|
87
|
+
exerciseRoomId: exerciseRoomId,
|
|
88
|
+
filterRunType: runType,
|
|
89
|
+
offset: 0,
|
|
90
|
+
count: 1,
|
|
91
|
+
userId: userId
|
|
92
|
+
}, {
|
|
93
|
+
signal: abortCtrl.signal
|
|
94
|
+
}).then(function (res) {
|
|
95
|
+
return res.exerciseRunnings;
|
|
96
|
+
}).then(function (exerciseRunnings) {
|
|
97
|
+
var _a;
|
|
98
|
+
return (_a = exerciseRunnings[0]) !== null && _a !== void 0 ? _a : null;
|
|
99
|
+
}));
|
|
100
|
+
case 1:
|
|
101
|
+
case "end":
|
|
102
|
+
return _context.stop();
|
|
103
|
+
}
|
|
104
|
+
}, _callee);
|
|
105
|
+
}));
|
|
106
|
+
return function _fetch(_x) {
|
|
107
|
+
return _ref.apply(this, arguments);
|
|
108
|
+
};
|
|
109
|
+
}();
|
|
110
|
+
Promise.all([
|
|
111
|
+
// running
|
|
112
|
+
// - if exercise is no submit grade, fetch only running
|
|
113
|
+
// - else, fetch both running and submit
|
|
114
|
+
exercise.isNoSubmitGrade ? _fetch(types.enums.ExerciseRunType.Run) : _fetch(undefined),
|
|
115
|
+
// submit
|
|
116
|
+
// - if exercise is no submit grade, fetch nothing
|
|
117
|
+
// - else, fetch submit
|
|
118
|
+
exercise.isNoSubmitGrade ? Promise.resolve(null) : _fetch(types.enums.ExerciseRunType.Grade)]).then(function (_ref2) {
|
|
119
|
+
var _ref3 = _rollupPluginBabelHelpers.slicedToArray(_ref2, 2),
|
|
120
|
+
exerciseLastRunning = _ref3[0],
|
|
121
|
+
exerciseLastSubmit = _ref3[1];
|
|
122
|
+
setExerciseLastRunning(exerciseLastRunning);
|
|
123
|
+
setExerciseLastSubmit(exerciseLastSubmit);
|
|
124
|
+
// callback on running done (last running which includes submit)
|
|
84
125
|
if (isRunningDone && typeof onExerciseRunningDone === 'function') {
|
|
85
|
-
onExerciseRunningDone(
|
|
126
|
+
onExerciseRunningDone(exerciseLastRunning);
|
|
86
127
|
}
|
|
87
128
|
}).catch(function (err) {
|
|
88
129
|
if (err.name === 'AbortError') {
|
|
@@ -123,7 +164,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
123
164
|
/**
|
|
124
165
|
* Last running score.
|
|
125
166
|
*/
|
|
126
|
-
var
|
|
167
|
+
var renderRunningInfoLastSubmitScore = function renderRunningInfoLastSubmitScore() {
|
|
127
168
|
if (exercise === null || exercise === void 0 ? void 0 : exercise.isNoSubmitGrade) {
|
|
128
169
|
return null;
|
|
129
170
|
}
|
|
@@ -135,10 +176,10 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
135
176
|
justify: "center"
|
|
136
177
|
}, React__default["default"].createElement(StyledRunnerInfoTitle, null, React__default["default"].createElement(reactIntl.FormattedMessage, {
|
|
137
178
|
id: "exerciseRunner.controller.runningInfo.lastSubmitScore"
|
|
138
|
-
})), React__default["default"].createElement(StyledRunnerInfoContent, null, typeof (
|
|
179
|
+
})), React__default["default"].createElement(StyledRunnerInfoContent, null, typeof (exerciseLastSubmit === null || exerciseLastSubmit === void 0 ? void 0 : exerciseLastSubmit.score) === 'string' ? React__default["default"].createElement(reactIntl.FormattedMessage, {
|
|
139
180
|
id: "exerciseRunner.controller.runningInfo.score",
|
|
140
181
|
values: {
|
|
141
|
-
score:
|
|
182
|
+
score: exerciseLastSubmit.score
|
|
142
183
|
}
|
|
143
184
|
}) : '--')), React__default["default"].createElement(StyledHr, {
|
|
144
185
|
color: designTokens.base.color.navy6,
|
|
@@ -148,7 +189,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
148
189
|
}));
|
|
149
190
|
};
|
|
150
191
|
/**
|
|
151
|
-
* Last
|
|
192
|
+
* Last submit time.
|
|
152
193
|
*/
|
|
153
194
|
var renderRunningInfoLastRunningTime = function renderRunningInfoLastRunningTime() {
|
|
154
195
|
if (!course || (course === null || course === void 0 ? void 0 : course.courseType) === types.enums.CourseType.Challenge) {
|
|
@@ -161,7 +202,9 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
161
202
|
id: "exerciseRunner.controller.runningInfo.lastRunningDatetime"
|
|
162
203
|
}) : React__default["default"].createElement(reactIntl.FormattedMessage, {
|
|
163
204
|
id: "exerciseRunner.controller.runningInfo.lastSubmitDatetime"
|
|
164
|
-
})), React__default["default"].createElement(StyledRunnerInfoContent, null, (
|
|
205
|
+
})), React__default["default"].createElement(StyledRunnerInfoContent, null, (exercise === null || exercise === void 0 ? void 0 : exercise.isNoSubmitGrade) ?
|
|
206
|
+
// last running
|
|
207
|
+
(exerciseLastRunning === null || exerciseLastRunning === void 0 ? void 0 : exerciseLastRunning.createdDatetime) ? React__default["default"].createElement(reactIntl.FormattedDate, {
|
|
165
208
|
value: exerciseLastRunning.createdDatetime,
|
|
166
209
|
year: "numeric",
|
|
167
210
|
month: "2-digit",
|
|
@@ -169,6 +212,16 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
169
212
|
hour: "2-digit",
|
|
170
213
|
minute: "2-digit",
|
|
171
214
|
second: "2-digit"
|
|
215
|
+
}) : '--' :
|
|
216
|
+
// last submit
|
|
217
|
+
(exerciseLastSubmit === null || exerciseLastSubmit === void 0 ? void 0 : exerciseLastSubmit.createdDatetime) ? React__default["default"].createElement(reactIntl.FormattedDate, {
|
|
218
|
+
value: exerciseLastSubmit.createdDatetime,
|
|
219
|
+
year: "numeric",
|
|
220
|
+
month: "2-digit",
|
|
221
|
+
day: "2-digit",
|
|
222
|
+
hour: "2-digit",
|
|
223
|
+
minute: "2-digit",
|
|
224
|
+
second: "2-digit"
|
|
172
225
|
}) : '--'));
|
|
173
226
|
};
|
|
174
227
|
//
|
|
@@ -178,7 +231,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
178
231
|
if (isRunning) {
|
|
179
232
|
return null;
|
|
180
233
|
}
|
|
181
|
-
return React__default["default"].createElement(blocks.Flex, null,
|
|
234
|
+
return React__default["default"].createElement(blocks.Flex, null, renderRunningInfoLastSubmitScore(), renderRunningInfoLastRunningTime());
|
|
182
235
|
};
|
|
183
236
|
|
|
184
237
|
exports["default"] = ExerciseRunnerControllerRunningInfo;
|
|
@@ -4,6 +4,7 @@ import { useIntl, FormattedMessage } from 'react-intl';
|
|
|
4
4
|
import { Popover, Flex, Text, Hspace, NotificationCount, IconButton, Icon, Vspace } from '@elice/blocks';
|
|
5
5
|
import { base } from '@elice/design-tokens';
|
|
6
6
|
import { eilAttachment, eilMathsignMultiplyBasic, eilDownload, eilFolder } from '@elice/icons';
|
|
7
|
+
import { ImageViewer } from '@elice/mui-elements';
|
|
7
8
|
import { useRecoilValue } from 'recoil';
|
|
8
9
|
import ExerciseMenuButton from '../../shared/exercise-menu-button/ExerciseMenuButton.js';
|
|
9
10
|
import { exerciseRunnerStdioFilesState } from '../context/recoil.js';
|
|
@@ -13,7 +14,6 @@ import '../context/subjects.js';
|
|
|
13
14
|
import '../context/ExerciseProvider.js';
|
|
14
15
|
import { StyledFilePopoverContent, StyledMenuButtonFileCount, StyledFilePopoverHeader, StyledFilePopoverBody, StyledFilePopoverBodyList, StyledFilePopoverBodyListItem, StyledFilePopoverBodyListItemContentImageWrap, StyledFilePopoverBodyListItemContentImage, StyledFilePopoverBodyListItemDownloadButton, StyledFilePopoverBodyListItemContentFile } from './ExerciseMenuStdioFileBrowser.styled.js';
|
|
15
16
|
|
|
16
|
-
var IMAGE_NEW_WIN_IFRAME_STYLE = 'border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;';
|
|
17
17
|
var ExerciseMenuStdioFileBrowser = function ExerciseMenuStdioFileBrowser() {
|
|
18
18
|
var intl = useIntl();
|
|
19
19
|
var _React$useState = React.useState(false),
|
|
@@ -22,19 +22,6 @@ var ExerciseMenuStdioFileBrowser = function ExerciseMenuStdioFileBrowser() {
|
|
|
22
22
|
setOpen = _React$useState2[1];
|
|
23
23
|
var anchorRef = React.useRef(null);
|
|
24
24
|
var stdioFiles = useRecoilValue(exerciseRunnerStdioFilesState);
|
|
25
|
-
/**
|
|
26
|
-
* Open image as new window.
|
|
27
|
-
*/
|
|
28
|
-
var handleImageFileClick = function handleImageFileClick(e) {
|
|
29
|
-
e.preventDefault();
|
|
30
|
-
var win = window.open('about:blank', e.currentTarget.target);
|
|
31
|
-
if (win) {
|
|
32
|
-
// since `Not allowed to navigate top frame to data URL:` error thrown by browser,
|
|
33
|
-
// use iframe to display image at new window.
|
|
34
|
-
win.document.write("<iframe src=\"".concat(e.currentTarget.href, "\" frameborder=\"0\" style=\"").concat(IMAGE_NEW_WIN_IFRAME_STYLE, "\" allowfullscreen></iframe>"));
|
|
35
|
-
win.focus();
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
25
|
//
|
|
39
26
|
// Open stdio file browser, on file changes.
|
|
40
27
|
//
|
|
@@ -54,15 +41,10 @@ var ExerciseMenuStdioFileBrowser = function ExerciseMenuStdioFileBrowser() {
|
|
|
54
41
|
var filename = ext ? "image_output.".concat(ext) : 'image_output';
|
|
55
42
|
return React.createElement(StyledFilePopoverBodyListItem, {
|
|
56
43
|
key: key
|
|
57
|
-
}, React.createElement(StyledFilePopoverBodyListItemContentImageWrap, {
|
|
58
|
-
href: f.data,
|
|
59
|
-
target: "_blank",
|
|
60
|
-
rel: "noopener noreferrer",
|
|
61
|
-
onClick: handleImageFileClick
|
|
62
|
-
}, React.createElement(StyledFilePopoverBodyListItemContentImage, {
|
|
44
|
+
}, React.createElement(StyledFilePopoverBodyListItemContentImageWrap, null, React.createElement(ImageViewer, null, React.createElement(StyledFilePopoverBodyListItemContentImage, {
|
|
63
45
|
src: f.data,
|
|
64
46
|
alt: filename
|
|
65
|
-
})), React.createElement(StyledFilePopoverBodyListItemDownloadButton, {
|
|
47
|
+
}))), React.createElement(StyledFilePopoverBodyListItemDownloadButton, {
|
|
66
48
|
href: f.data,
|
|
67
49
|
download: filename
|
|
68
50
|
}, React.createElement(Icon, {
|
package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare const StyledFilePopoverBodyList: import("styled-components").Styl
|
|
|
7
7
|
export declare const StyledFilePopoverBodyListItem: import("styled-components").StyledComponent<"li", any, {}, never>;
|
|
8
8
|
export declare const StyledFilePopoverBodyListItemDownloadButton: import("styled-components").StyledComponent<"a", any, {}, never>;
|
|
9
9
|
export declare const StyledFilePopoverBodyListItemContentFile: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
10
|
-
export declare const StyledFilePopoverBodyListItemContentImageWrap: import("styled-components").StyledComponent<"
|
|
10
|
+
export declare const StyledFilePopoverBodyListItemContentImageWrap: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
11
11
|
export declare const StyledFilePopoverBodyListItemContentImage: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
12
12
|
export declare const StyledPreferenceBodyItem: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
13
13
|
export declare const StyledSelect: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("@elice/blocks").SelectProps & import("react").RefAttributes<HTMLSelectElement>>, any, {}, never>;
|
package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js
CHANGED
|
@@ -26,12 +26,12 @@ var StyledFilePopoverBodyListItemDownloadButton = styled.a.withConfig({
|
|
|
26
26
|
var StyledFilePopoverBodyListItemContentFile = styled.div.withConfig({
|
|
27
27
|
componentId: "sc-9mtuee-7"
|
|
28
28
|
})(["flex:1;display:flex;align-items:center;justify-content:space-between;padding:0 0.5rem;"]);
|
|
29
|
-
var StyledFilePopoverBodyListItemContentImageWrap = styled.
|
|
29
|
+
var StyledFilePopoverBodyListItemContentImageWrap = styled.div.withConfig({
|
|
30
30
|
componentId: "sc-9mtuee-8"
|
|
31
31
|
})(["display:flex;padding:0.5rem;flex:1 1 0;background:", ";"], base.color.white);
|
|
32
32
|
var StyledFilePopoverBodyListItemContentImage = styled.img.withConfig({
|
|
33
33
|
componentId: "sc-9mtuee-9"
|
|
34
|
-
})(["width:100%;max-height:128px;object-fit:contain;"]);
|
|
34
|
+
})(["width:100%;max-height:128px;object-fit:contain;cursor:zoom-in;"]);
|
|
35
35
|
var StyledPreferenceBodyItem = styled.div.withConfig({
|
|
36
36
|
componentId: "sc-9mtuee-10"
|
|
37
37
|
})(["display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;min-height:2rem;color:white;&:last-child{margin-bottom:0;}"]);
|
package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
1
|
+
import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useIntl, FormattedMessage, FormattedDate } from 'react-intl';
|
|
4
4
|
import { usePrevious } from 'react-use';
|
|
5
|
-
import {
|
|
5
|
+
import { getOrgCourseGet, getOrgMaterialExerciseExerciseRunningList } from '@elice/api-client';
|
|
6
6
|
import { Hr, Notification, Flex } from '@elice/blocks';
|
|
7
7
|
import { base } from '@elice/design-tokens';
|
|
8
8
|
import { enums } from '@elice/types';
|
|
@@ -14,6 +14,9 @@ import '../context/recoilTypes.js';
|
|
|
14
14
|
import '../context/subjects.js';
|
|
15
15
|
import '../context/ExerciseProvider.js';
|
|
16
16
|
|
|
17
|
+
//
|
|
18
|
+
//
|
|
19
|
+
//
|
|
17
20
|
var StyledHr = styled(Hr).withConfig({
|
|
18
21
|
componentId: "sc-30ywzi-0"
|
|
19
22
|
})(["height:2rem;"]);
|
|
@@ -23,6 +26,9 @@ var StyledRunnerInfoTitle = styled.span.withConfig({
|
|
|
23
26
|
var StyledRunnerInfoContent = styled.span.withConfig({
|
|
24
27
|
componentId: "sc-30ywzi-2"
|
|
25
28
|
})(["display:block;color:", ";font-size:12px;line-height:1.25;"], base.color.navy1);
|
|
29
|
+
//
|
|
30
|
+
//
|
|
31
|
+
//
|
|
26
32
|
var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunningInfo() {
|
|
27
33
|
var intl = useIntl();
|
|
28
34
|
var _React$useContext = React.useContext(ExerciseContext),
|
|
@@ -44,6 +50,10 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
44
50
|
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
45
51
|
exerciseLastRunning = _React$useState4[0],
|
|
46
52
|
setExerciseLastRunning = _React$useState4[1];
|
|
53
|
+
var _React$useState5 = React.useState(null),
|
|
54
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
55
|
+
exerciseLastSubmit = _React$useState6[0],
|
|
56
|
+
setExerciseLastSubmit = _React$useState6[1];
|
|
47
57
|
//
|
|
48
58
|
// Get exercise running list.
|
|
49
59
|
//
|
|
@@ -59,21 +69,52 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
59
69
|
return;
|
|
60
70
|
}
|
|
61
71
|
var abortCtrl = new AbortController();
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
var _fetch = /*#__PURE__*/function () {
|
|
73
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(runType) {
|
|
74
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
75
|
+
while (1) switch (_context.prev = _context.next) {
|
|
76
|
+
case 0:
|
|
77
|
+
return _context.abrupt("return", getOrgMaterialExerciseExerciseRunningList({
|
|
78
|
+
exerciseRoomId: exerciseRoomId,
|
|
79
|
+
filterRunType: runType,
|
|
80
|
+
offset: 0,
|
|
81
|
+
count: 1,
|
|
82
|
+
userId: userId
|
|
83
|
+
}, {
|
|
84
|
+
signal: abortCtrl.signal
|
|
85
|
+
}).then(function (res) {
|
|
86
|
+
return res.exerciseRunnings;
|
|
87
|
+
}).then(function (exerciseRunnings) {
|
|
88
|
+
var _a;
|
|
89
|
+
return (_a = exerciseRunnings[0]) !== null && _a !== void 0 ? _a : null;
|
|
90
|
+
}));
|
|
91
|
+
case 1:
|
|
92
|
+
case "end":
|
|
93
|
+
return _context.stop();
|
|
94
|
+
}
|
|
95
|
+
}, _callee);
|
|
96
|
+
}));
|
|
97
|
+
return function _fetch(_x) {
|
|
98
|
+
return _ref.apply(this, arguments);
|
|
99
|
+
};
|
|
100
|
+
}();
|
|
101
|
+
Promise.all([
|
|
102
|
+
// running
|
|
103
|
+
// - if exercise is no submit grade, fetch only running
|
|
104
|
+
// - else, fetch both running and submit
|
|
105
|
+
exercise.isNoSubmitGrade ? _fetch(enums.ExerciseRunType.Run) : _fetch(undefined),
|
|
106
|
+
// submit
|
|
107
|
+
// - if exercise is no submit grade, fetch nothing
|
|
108
|
+
// - else, fetch submit
|
|
109
|
+
exercise.isNoSubmitGrade ? Promise.resolve(null) : _fetch(enums.ExerciseRunType.Grade)]).then(function (_ref2) {
|
|
110
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
111
|
+
exerciseLastRunning = _ref3[0],
|
|
112
|
+
exerciseLastSubmit = _ref3[1];
|
|
113
|
+
setExerciseLastRunning(exerciseLastRunning);
|
|
114
|
+
setExerciseLastSubmit(exerciseLastSubmit);
|
|
115
|
+
// callback on running done (last running which includes submit)
|
|
75
116
|
if (isRunningDone && typeof onExerciseRunningDone === 'function') {
|
|
76
|
-
onExerciseRunningDone(
|
|
117
|
+
onExerciseRunningDone(exerciseLastRunning);
|
|
77
118
|
}
|
|
78
119
|
}).catch(function (err) {
|
|
79
120
|
if (err.name === 'AbortError') {
|
|
@@ -114,7 +155,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
114
155
|
/**
|
|
115
156
|
* Last running score.
|
|
116
157
|
*/
|
|
117
|
-
var
|
|
158
|
+
var renderRunningInfoLastSubmitScore = function renderRunningInfoLastSubmitScore() {
|
|
118
159
|
if (exercise === null || exercise === void 0 ? void 0 : exercise.isNoSubmitGrade) {
|
|
119
160
|
return null;
|
|
120
161
|
}
|
|
@@ -126,10 +167,10 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
126
167
|
justify: "center"
|
|
127
168
|
}, React.createElement(StyledRunnerInfoTitle, null, React.createElement(FormattedMessage, {
|
|
128
169
|
id: "exerciseRunner.controller.runningInfo.lastSubmitScore"
|
|
129
|
-
})), React.createElement(StyledRunnerInfoContent, null, typeof (
|
|
170
|
+
})), React.createElement(StyledRunnerInfoContent, null, typeof (exerciseLastSubmit === null || exerciseLastSubmit === void 0 ? void 0 : exerciseLastSubmit.score) === 'string' ? React.createElement(FormattedMessage, {
|
|
130
171
|
id: "exerciseRunner.controller.runningInfo.score",
|
|
131
172
|
values: {
|
|
132
|
-
score:
|
|
173
|
+
score: exerciseLastSubmit.score
|
|
133
174
|
}
|
|
134
175
|
}) : '--')), React.createElement(StyledHr, {
|
|
135
176
|
color: base.color.navy6,
|
|
@@ -139,7 +180,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
139
180
|
}));
|
|
140
181
|
};
|
|
141
182
|
/**
|
|
142
|
-
* Last
|
|
183
|
+
* Last submit time.
|
|
143
184
|
*/
|
|
144
185
|
var renderRunningInfoLastRunningTime = function renderRunningInfoLastRunningTime() {
|
|
145
186
|
if (!course || (course === null || course === void 0 ? void 0 : course.courseType) === enums.CourseType.Challenge) {
|
|
@@ -152,7 +193,9 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
152
193
|
id: "exerciseRunner.controller.runningInfo.lastRunningDatetime"
|
|
153
194
|
}) : React.createElement(FormattedMessage, {
|
|
154
195
|
id: "exerciseRunner.controller.runningInfo.lastSubmitDatetime"
|
|
155
|
-
})), React.createElement(StyledRunnerInfoContent, null, (
|
|
196
|
+
})), React.createElement(StyledRunnerInfoContent, null, (exercise === null || exercise === void 0 ? void 0 : exercise.isNoSubmitGrade) ?
|
|
197
|
+
// last running
|
|
198
|
+
(exerciseLastRunning === null || exerciseLastRunning === void 0 ? void 0 : exerciseLastRunning.createdDatetime) ? React.createElement(FormattedDate, {
|
|
156
199
|
value: exerciseLastRunning.createdDatetime,
|
|
157
200
|
year: "numeric",
|
|
158
201
|
month: "2-digit",
|
|
@@ -160,6 +203,16 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
160
203
|
hour: "2-digit",
|
|
161
204
|
minute: "2-digit",
|
|
162
205
|
second: "2-digit"
|
|
206
|
+
}) : '--' :
|
|
207
|
+
// last submit
|
|
208
|
+
(exerciseLastSubmit === null || exerciseLastSubmit === void 0 ? void 0 : exerciseLastSubmit.createdDatetime) ? React.createElement(FormattedDate, {
|
|
209
|
+
value: exerciseLastSubmit.createdDatetime,
|
|
210
|
+
year: "numeric",
|
|
211
|
+
month: "2-digit",
|
|
212
|
+
day: "2-digit",
|
|
213
|
+
hour: "2-digit",
|
|
214
|
+
minute: "2-digit",
|
|
215
|
+
second: "2-digit"
|
|
163
216
|
}) : '--'));
|
|
164
217
|
};
|
|
165
218
|
//
|
|
@@ -169,7 +222,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
169
222
|
if (isRunning) {
|
|
170
223
|
return null;
|
|
171
224
|
}
|
|
172
|
-
return React.createElement(Flex, null,
|
|
225
|
+
return React.createElement(Flex, null, renderRunningInfoLastSubmitScore(), renderRunningInfoLastRunningTime());
|
|
173
226
|
};
|
|
174
227
|
|
|
175
228
|
export { ExerciseRunnerControllerRunningInfo as default };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elice/material-exercise",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.230829.0",
|
|
4
4
|
"description": "User view and editing components of Elice material exercise",
|
|
5
5
|
"repository": "https://git.elicer.io/elice/frontend/library/elice-material",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -32,8 +32,15 @@
|
|
|
32
32
|
"@elice/markdown": "^1",
|
|
33
33
|
"@elice/material-shared-types": "*",
|
|
34
34
|
"@elice/material-shared-utils": "*",
|
|
35
|
+
"@elice/mui-elements": "^5",
|
|
36
|
+
"@elice/mui-system": "^5",
|
|
35
37
|
"@elice/types": "^1",
|
|
36
38
|
"@elice/websocket": "^1",
|
|
39
|
+
"@emotion/react": "^11.10.5",
|
|
40
|
+
"@emotion/styled": "^11.10.5",
|
|
41
|
+
"@mui/icons-material": "^5.10.16",
|
|
42
|
+
"@mui/lab": "^5.0.0-alpha.112",
|
|
43
|
+
"@mui/material": "^5.10.16",
|
|
37
44
|
"humps": "^2.0.1",
|
|
38
45
|
"lodash": "^4.17.21",
|
|
39
46
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
@@ -75,10 +82,17 @@
|
|
|
75
82
|
"@elice/design-tokens": "^1.220803.0",
|
|
76
83
|
"@elice/icons": "^1.230814.0",
|
|
77
84
|
"@elice/markdown": "^1.220815.0",
|
|
78
|
-
"@elice/material-shared-types": "1.
|
|
79
|
-
"@elice/material-shared-utils": "1.
|
|
85
|
+
"@elice/material-shared-types": "1.230829.0",
|
|
86
|
+
"@elice/material-shared-utils": "1.230829.0",
|
|
87
|
+
"@elice/mui-elements": "^5.230825.0",
|
|
88
|
+
"@elice/mui-system": "^5.230825.0",
|
|
80
89
|
"@elice/types": "^1.230815.0",
|
|
81
90
|
"@elice/websocket": "^1.220815.0",
|
|
91
|
+
"@emotion/react": "^11.10.5",
|
|
92
|
+
"@emotion/styled": "^11.10.5",
|
|
93
|
+
"@mui/icons-material": "^5.10.16",
|
|
94
|
+
"@mui/lab": "^5.0.0-alpha.112",
|
|
95
|
+
"@mui/material": "^5.10.16",
|
|
82
96
|
"@types/classnames": "^2.3.1",
|
|
83
97
|
"@types/color": "^3.0.3",
|
|
84
98
|
"@types/file-saver": "^2.0.5",
|
|
@@ -98,5 +112,5 @@
|
|
|
98
112
|
"recoil": "^0.6.1",
|
|
99
113
|
"styled-components": "^5.2.0"
|
|
100
114
|
},
|
|
101
|
-
"gitHead": "
|
|
115
|
+
"gitHead": "c597945b42edbca94b28022db6ed1b8fa495b879"
|
|
102
116
|
}
|