@elice/material-exercise 1.250602.0 → 1.250602.1

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.
@@ -16,13 +16,7 @@ var styled = require('styled-components');
16
16
  var XtermLazy = require('../../shared/xterm/XtermLazy.js');
17
17
  var stylesheets = require('../../../constants/stylesheets.js');
18
18
  var useArduino = require('../../../hooks/useArduino.js');
19
- var recoil$1 = require('../context/recoil.js');
20
- var context = require('../context/context.js');
21
- var recoilTypes = require('../context/recoilTypes.js');
22
- var subjects = require('../context/subjects.js');
23
- require('../context/ExerciseProvider.js');
24
- var async = require('../../../utils/async.js');
25
- var runner = require('../../../utils/runner.js');
19
+ var useExerciseFile = require('../../../hooks/useExerciseFile.js');
26
20
  var useRunnerRoomWebSocket = require('../../../hooks/useRunnerRoomWebSocket.js');
27
21
  var useStdioWebSocket = require('../../../hooks/useStdioWebSocket.js');
28
22
  require('ot-text-unicode');
@@ -33,6 +27,13 @@ require('lodash/debounce');
33
27
  require('random-words');
34
28
  require('unicount');
35
29
  var useStdioTextConcator = require('../../../hooks/useStdioTextConcator.js');
30
+ var async = require('../../../utils/async.js');
31
+ var runner = require('../../../utils/runner.js');
32
+ var recoil$1 = require('../context/recoil.js');
33
+ var context = require('../context/context.js');
34
+ var recoilTypes = require('../context/recoilTypes.js');
35
+ var subjects = require('../context/subjects.js');
36
+ require('../context/ExerciseProvider.js');
36
37
  var ExerciseRunnerContext = require('./ExerciseRunnerContext.js');
37
38
  var ExerciseRunnerController = require('./ExerciseRunnerController.js');
38
39
  var en = require('./locales/en.json.js');
@@ -69,6 +70,9 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
69
70
  var exercise = recoil.useRecoilValue(recoil$1.exerciseState(materialExerciseId));
70
71
  var _useRecoilValue = recoil.useRecoilValue(recoil$1.exerciseEditorPreferenceState),
71
72
  editorPreferenceFontSize = _useRecoilValue.fontSize;
73
+ // file states
74
+ var activeFilename = recoil.useRecoilValue(recoil$1.exerciseActiveFilenameState);
75
+ var isFileEditable = useExerciseFile.useExerciseFileEditable(activeFilename);
72
76
  // runner states
73
77
  var setRunnerSubmitting = recoil.useSetRecoilState(recoil$1.exerciseRunnerSubmittingState);
74
78
  var setRunnerRunning = recoil.useSetRecoilState(recoil$1.exerciseRunnerRunningState);
@@ -297,32 +301,51 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
297
301
  break;
298
302
  }
299
303
  };
300
- var requestUsercodeSync = function requestUsercodeSync() {
301
- return new Promise(function (resolve, reject) {
302
- subjects.exerciseFileEditorSyncRequestAction$.next({
303
- onSucceed: resolve,
304
- onFailed: reject
305
- });
306
- });
307
- };
304
+ var requestUsercodeSync = /*#__PURE__*/function () {
305
+ var _ref2 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee() {
306
+ return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee$(_context) {
307
+ while (1) switch (_context.prev = _context.next) {
308
+ case 0:
309
+ if (isFileEditable) {
310
+ _context.next = 2;
311
+ break;
312
+ }
313
+ return _context.abrupt("return");
314
+ case 2:
315
+ return _context.abrupt("return", new Promise(function (resolve, reject) {
316
+ subjects.exerciseFileEditorSyncRequestAction$.next({
317
+ onSucceed: resolve,
318
+ onFailed: reject
319
+ });
320
+ }));
321
+ case 3:
322
+ case "end":
323
+ return _context.stop();
324
+ }
325
+ }, _callee);
326
+ }));
327
+ return function requestUsercodeSync() {
328
+ return _ref2.apply(this, arguments);
329
+ };
330
+ }();
308
331
  /**
309
332
  * Handle submit code to runner and run / grade.
310
333
  */
311
334
  var handleRunnerSubmit = /*#__PURE__*/function () {
312
- var _ref2 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee(runType) {
335
+ var _ref3 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee2(runType) {
313
336
  var _a, _b, _c, readyExerciseImage, roomToken;
314
- return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee$(_context) {
315
- while (1) switch (_context.prev = _context.next) {
337
+ return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee2$(_context2) {
338
+ while (1) switch (_context2.prev = _context2.next) {
316
339
  case 0:
317
- _context.prev = 0;
318
- _context.next = 3;
340
+ _context2.prev = 0;
341
+ _context2.next = 3;
319
342
  return async.withTimeout(requestUsercodeSync(), 2000);
320
343
  case 3:
321
- _context.next = 9;
344
+ _context2.next = 9;
322
345
  break;
323
346
  case 5:
324
- _context.prev = 5;
325
- _context.t0 = _context["catch"](0);
347
+ _context2.prev = 5;
348
+ _context2.t0 = _context2["catch"](0);
326
349
  setRunnerSubmitErrorDialog({
327
350
  code: 'try_again',
328
351
  message: __intl.formatMessage({
@@ -335,20 +358,20 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
335
358
  return window.location.reload();
336
359
  }
337
360
  });
338
- return _context.abrupt("return");
361
+ return _context2.abrupt("return");
339
362
  case 9:
340
363
  readyExerciseImage = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage;
341
364
  roomToken = (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.roomToken;
342
365
  if (!(!readyExerciseImage || !roomToken)) {
343
- _context.next = 13;
366
+ _context2.next = 13;
344
367
  break;
345
368
  }
346
- return _context.abrupt("return");
369
+ return _context2.abrupt("return");
347
370
  case 13:
348
371
  setRunnerStdioFilesState([]);
349
372
  setRunnerRunTypeState(runType);
350
373
  setRunnerSubmitting(true);
351
- return _context.abrupt("return", apiClient.postOrgMaterialExerciseExerciseRunningSubmit({
374
+ return _context2.abrupt("return", apiClient.postOrgMaterialExerciseExerciseRunningSubmit({
352
375
  roomToken: roomToken,
353
376
  runType: runType,
354
377
  exerciseImageId: readyExerciseImage.id,
@@ -367,22 +390,22 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
367
390
  }));
368
391
  case 17:
369
392
  case "end":
370
- return _context.stop();
393
+ return _context2.stop();
371
394
  }
372
- }, _callee, null, [[0, 5]]);
395
+ }, _callee2, null, [[0, 5]]);
373
396
  }));
374
397
  return function handleRunnerSubmit(_x) {
375
- return _ref2.apply(this, arguments);
398
+ return _ref3.apply(this, arguments);
376
399
  };
377
400
  }();
378
401
  /**
379
402
  * Handle runner to cancel running.
380
403
  */
381
404
  var handleRunnerCancel = /*#__PURE__*/function () {
382
- var _ref3 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee2() {
405
+ var _ref4 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee3() {
383
406
  var _a, roomToken;
384
- return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee2$(_context2) {
385
- while (1) switch (_context2.prev = _context2.next) {
407
+ return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee3$(_context3) {
408
+ while (1) switch (_context3.prev = _context3.next) {
386
409
  case 0:
387
410
  roomToken = (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.roomToken;
388
411
  if (roomToken) {
@@ -392,12 +415,12 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
392
415
  }
393
416
  case 2:
394
417
  case "end":
395
- return _context2.stop();
418
+ return _context3.stop();
396
419
  }
397
- }, _callee2);
420
+ }, _callee3);
398
421
  }));
399
422
  return function handleRunnerCancel() {
400
- return _ref3.apply(this, arguments);
423
+ return _ref4.apply(this, arguments);
401
424
  };
402
425
  }();
403
426
  /**
@@ -12,13 +12,7 @@ import styled from 'styled-components';
12
12
  import XtermLazy from '../../shared/xterm/XtermLazy.js';
13
13
  import { MATERIAL_RESIZABLE_COMMON_PROPS } from '../../../constants/stylesheets.js';
14
14
  import { useArduino } from '../../../hooks/useArduino.js';
15
- import { exerciseState, exerciseEditorPreferenceState, exerciseRunnerSubmittingState, exerciseRunnerRunningState, exerciseRunnerRunTypeState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerStdioFilesState, exercisePreviewTypeState, exercisePreviewDisplayModeState, exerciseMonacoEditorApisState, exerciseWebsocketQuery, exerciseContainerSizeState } from '../context/recoil.js';
16
- import { ExerciseContext } from '../context/context.js';
17
- import { ExercisePreviewType, ExercisePreviewDisplayMode } from '../context/recoilTypes.js';
18
- import { exerciseRunnerTextSend$, exerciseFileEditorSyncRequestAction$ } from '../context/subjects.js';
19
- import '../context/ExerciseProvider.js';
20
- import { withTimeout } from '../../../utils/async.js';
21
- import { getProgrammingErrorResult } from '../../../utils/runner.js';
15
+ import { useExerciseFileEditable } from '../../../hooks/useExerciseFile.js';
22
16
  import { useRunnerRoomWebSocket } from '../../../hooks/useRunnerRoomWebSocket.js';
23
17
  import { useStdioWebSocket } from '../../../hooks/useStdioWebSocket.js';
24
18
  import 'ot-text-unicode';
@@ -29,6 +23,13 @@ import 'lodash/debounce';
29
23
  import 'random-words';
30
24
  import 'unicount';
31
25
  import { useStdioTextConcator } from '../../../hooks/useStdioTextConcator.js';
26
+ import { withTimeout } from '../../../utils/async.js';
27
+ import { getProgrammingErrorResult } from '../../../utils/runner.js';
28
+ import { exerciseState, exerciseEditorPreferenceState, exerciseActiveFilenameState, exerciseRunnerSubmittingState, exerciseRunnerRunningState, exerciseRunnerRunTypeState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerStdioFilesState, exercisePreviewTypeState, exercisePreviewDisplayModeState, exerciseMonacoEditorApisState, exerciseWebsocketQuery, exerciseContainerSizeState } from '../context/recoil.js';
29
+ import { ExerciseContext } from '../context/context.js';
30
+ import { ExercisePreviewType, ExercisePreviewDisplayMode } from '../context/recoilTypes.js';
31
+ import { exerciseRunnerTextSend$, exerciseFileEditorSyncRequestAction$ } from '../context/subjects.js';
32
+ import '../context/ExerciseProvider.js';
32
33
  import { ExerciseRunnerContext } from './ExerciseRunnerContext.js';
33
34
  import ExerciseRunnerController from './ExerciseRunnerController.js';
34
35
  import messageEn from './locales/en.json.js';
@@ -60,6 +61,9 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
60
61
  var exercise = useRecoilValue(exerciseState(materialExerciseId));
61
62
  var _useRecoilValue = useRecoilValue(exerciseEditorPreferenceState),
62
63
  editorPreferenceFontSize = _useRecoilValue.fontSize;
64
+ // file states
65
+ var activeFilename = useRecoilValue(exerciseActiveFilenameState);
66
+ var isFileEditable = useExerciseFileEditable(activeFilename);
63
67
  // runner states
64
68
  var setRunnerSubmitting = useSetRecoilState(exerciseRunnerSubmittingState);
65
69
  var setRunnerRunning = useSetRecoilState(exerciseRunnerRunningState);
@@ -288,32 +292,51 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
288
292
  break;
289
293
  }
290
294
  };
291
- var requestUsercodeSync = function requestUsercodeSync() {
292
- return new Promise(function (resolve, reject) {
293
- exerciseFileEditorSyncRequestAction$.next({
294
- onSucceed: resolve,
295
- onFailed: reject
296
- });
297
- });
298
- };
295
+ var requestUsercodeSync = /*#__PURE__*/function () {
296
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
297
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
298
+ while (1) switch (_context.prev = _context.next) {
299
+ case 0:
300
+ if (isFileEditable) {
301
+ _context.next = 2;
302
+ break;
303
+ }
304
+ return _context.abrupt("return");
305
+ case 2:
306
+ return _context.abrupt("return", new Promise(function (resolve, reject) {
307
+ exerciseFileEditorSyncRequestAction$.next({
308
+ onSucceed: resolve,
309
+ onFailed: reject
310
+ });
311
+ }));
312
+ case 3:
313
+ case "end":
314
+ return _context.stop();
315
+ }
316
+ }, _callee);
317
+ }));
318
+ return function requestUsercodeSync() {
319
+ return _ref2.apply(this, arguments);
320
+ };
321
+ }();
299
322
  /**
300
323
  * Handle submit code to runner and run / grade.
301
324
  */
302
325
  var handleRunnerSubmit = /*#__PURE__*/function () {
303
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(runType) {
326
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(runType) {
304
327
  var _a, _b, _c, readyExerciseImage, roomToken;
305
- return _regeneratorRuntime().wrap(function _callee$(_context) {
306
- while (1) switch (_context.prev = _context.next) {
328
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
329
+ while (1) switch (_context2.prev = _context2.next) {
307
330
  case 0:
308
- _context.prev = 0;
309
- _context.next = 3;
331
+ _context2.prev = 0;
332
+ _context2.next = 3;
310
333
  return withTimeout(requestUsercodeSync(), 2000);
311
334
  case 3:
312
- _context.next = 9;
335
+ _context2.next = 9;
313
336
  break;
314
337
  case 5:
315
- _context.prev = 5;
316
- _context.t0 = _context["catch"](0);
338
+ _context2.prev = 5;
339
+ _context2.t0 = _context2["catch"](0);
317
340
  setRunnerSubmitErrorDialog({
318
341
  code: 'try_again',
319
342
  message: __intl.formatMessage({
@@ -326,20 +349,20 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
326
349
  return window.location.reload();
327
350
  }
328
351
  });
329
- return _context.abrupt("return");
352
+ return _context2.abrupt("return");
330
353
  case 9:
331
354
  readyExerciseImage = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage;
332
355
  roomToken = (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.roomToken;
333
356
  if (!(!readyExerciseImage || !roomToken)) {
334
- _context.next = 13;
357
+ _context2.next = 13;
335
358
  break;
336
359
  }
337
- return _context.abrupt("return");
360
+ return _context2.abrupt("return");
338
361
  case 13:
339
362
  setRunnerStdioFilesState([]);
340
363
  setRunnerRunTypeState(runType);
341
364
  setRunnerSubmitting(true);
342
- return _context.abrupt("return", postOrgMaterialExerciseExerciseRunningSubmit({
365
+ return _context2.abrupt("return", postOrgMaterialExerciseExerciseRunningSubmit({
343
366
  roomToken: roomToken,
344
367
  runType: runType,
345
368
  exerciseImageId: readyExerciseImage.id,
@@ -358,22 +381,22 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
358
381
  }));
359
382
  case 17:
360
383
  case "end":
361
- return _context.stop();
384
+ return _context2.stop();
362
385
  }
363
- }, _callee, null, [[0, 5]]);
386
+ }, _callee2, null, [[0, 5]]);
364
387
  }));
365
388
  return function handleRunnerSubmit(_x) {
366
- return _ref2.apply(this, arguments);
389
+ return _ref3.apply(this, arguments);
367
390
  };
368
391
  }();
369
392
  /**
370
393
  * Handle runner to cancel running.
371
394
  */
372
395
  var handleRunnerCancel = /*#__PURE__*/function () {
373
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
396
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
374
397
  var _a, roomToken;
375
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
376
- while (1) switch (_context2.prev = _context2.next) {
398
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
399
+ while (1) switch (_context3.prev = _context3.next) {
377
400
  case 0:
378
401
  roomToken = (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.roomToken;
379
402
  if (roomToken) {
@@ -383,12 +406,12 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
383
406
  }
384
407
  case 2:
385
408
  case "end":
386
- return _context2.stop();
409
+ return _context3.stop();
387
410
  }
388
- }, _callee2);
411
+ }, _callee3);
389
412
  }));
390
413
  return function handleRunnerCancel() {
391
- return _ref3.apply(this, arguments);
414
+ return _ref4.apply(this, arguments);
392
415
  };
393
416
  }();
394
417
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elice/material-exercise",
3
- "version": "1.250602.0",
3
+ "version": "1.250602.1",
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",
@@ -83,8 +83,8 @@
83
83
  "@elice/icons": "^1.230814.0",
84
84
  "@elice/intl": "0.241127.0",
85
85
  "@elice/markdown": "1.241015.0",
86
- "@elice/material-shared-types": "1.250602.0",
87
- "@elice/material-shared-utils": "1.250602.0",
86
+ "@elice/material-shared-types": "1.250602.1",
87
+ "@elice/material-shared-utils": "1.250602.1",
88
88
  "@elice/mui-elements": "^5.250108.0-controllabel.0",
89
89
  "@elice/mui-system": "^5.250108.0-controllabel.0",
90
90
  "@elice/types": "1.241220.0",