@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.
@@ -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, {
@@ -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<"a", any, {}, never>;
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>;
@@ -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"].a.withConfig({
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;}"]);
@@ -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
- apiClient.getOrgMaterialExerciseExerciseRunningList({
72
- exerciseRoomId: exerciseRoomId,
73
- filterRunType: exercise.isNoSubmitGrade ? types.enums.ExerciseRunType.Run : undefined,
74
- offset: 0,
75
- count: 1,
76
- userId: userId
77
- }, {
78
- signal: abortCtrl.signal
79
- }).then(function (res) {
80
- var _a;
81
- return (_a = res.exerciseRunnings[0]) !== null && _a !== void 0 ? _a : null;
82
- }).then(function (running) {
83
- setExerciseLastRunning(running);
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(running);
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 renderRunningInfoLastRunningScore = function renderRunningInfoLastRunningScore() {
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 (exerciseLastRunning === null || exerciseLastRunning === void 0 ? void 0 : exerciseLastRunning.score) === 'string' ? React__default["default"].createElement(reactIntl.FormattedMessage, {
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: exerciseLastRunning.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 running time.
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, (exerciseLastRunning === null || exerciseLastRunning === void 0 ? void 0 : exerciseLastRunning.createdDatetime) ? React__default["default"].createElement(reactIntl.FormattedDate, {
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, renderRunningInfoLastRunningScore(), renderRunningInfoLastRunningTime());
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, {
@@ -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<"a", any, {}, never>;
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>;
@@ -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.a.withConfig({
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;}"]);
@@ -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 { getOrgMaterialExerciseExerciseRunningList, getOrgCourseGet } from '@elice/api-client';
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
- getOrgMaterialExerciseExerciseRunningList({
63
- exerciseRoomId: exerciseRoomId,
64
- filterRunType: exercise.isNoSubmitGrade ? enums.ExerciseRunType.Run : undefined,
65
- offset: 0,
66
- count: 1,
67
- userId: userId
68
- }, {
69
- signal: abortCtrl.signal
70
- }).then(function (res) {
71
- var _a;
72
- return (_a = res.exerciseRunnings[0]) !== null && _a !== void 0 ? _a : null;
73
- }).then(function (running) {
74
- setExerciseLastRunning(running);
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(running);
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 renderRunningInfoLastRunningScore = function renderRunningInfoLastRunningScore() {
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 (exerciseLastRunning === null || exerciseLastRunning === void 0 ? void 0 : exerciseLastRunning.score) === 'string' ? React.createElement(FormattedMessage, {
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: exerciseLastRunning.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 running time.
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, (exerciseLastRunning === null || exerciseLastRunning === void 0 ? void 0 : exerciseLastRunning.createdDatetime) ? React.createElement(FormattedDate, {
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, renderRunningInfoLastRunningScore(), renderRunningInfoLastRunningTime());
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.230821.0",
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.230821.0",
79
- "@elice/material-shared-utils": "1.230821.0",
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": "4f85930b4b7eb23121650c5c95b14620ea2fb198"
115
+ "gitHead": "c597945b42edbca94b28022db6ed1b8fa495b879"
102
116
  }