@elice/material-exercise 1.230316.0 → 1.230325.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.
@@ -146,3 +146,7 @@ export declare const exerciseFileEditorCursorState: import("recoil").RecoilState
146
146
  *
147
147
  */
148
148
  export declare const exerciseFileEditorCursorSelectionValueState: import("recoil").RecoilState<string | null>;
149
+ /**
150
+ *
151
+ */
152
+ export declare const exerciseMonacoEditorValueState: import("recoil").RecoilState<string>;
@@ -622,6 +622,14 @@ const exerciseFileEditorCursorSelectionValueState = recoil.atom({
622
622
  key: `${KEY_PREFIX}/FileEditorCursorSelectionValue`,
623
623
  default: null
624
624
  });
625
+ /**
626
+ *
627
+ */
628
+
629
+ const exerciseMonacoEditorValueState = recoil.atom({
630
+ key: `${KEY_PREFIX}/MonacoEditorValueState`,
631
+ default: ''
632
+ });
625
633
 
626
634
  exports.exerciseActiveFilenameState = exerciseActiveFilenameState;
627
635
  exports.exerciseArduinoAgentConnectionState = exerciseArduinoAgentConnectionState;
@@ -638,6 +646,7 @@ exports.exerciseFileEditorCursorState = exerciseFileEditorCursorState;
638
646
  exports.exerciseFileTabsOpenedState = exerciseFileTabsOpenedState;
639
647
  exports.exerciseFileTreeOpenedState = exerciseFileTreeOpenedState;
640
648
  exports.exerciseLectureState = exerciseLectureState;
649
+ exports.exerciseMonacoEditorValueState = exerciseMonacoEditorValueState;
641
650
  exports.exerciseMultilangEnvironmentState = exerciseMultilangEnvironmentState;
642
651
  exports.exerciseMultilangLanguagesState = exerciseMultilangLanguagesState;
643
652
  exports.exercisePreviewDisplayModeState = exercisePreviewDisplayModeState;
@@ -64,7 +64,7 @@ export declare type MaterialExerciseCommonPropExerciseImageEmptyOptions = Exerci
64
64
  /**
65
65
  * On code help button click.
66
66
  */
67
- export declare type MaterialExerciseCommonPropOnCodeHelpRequest = (code: string, error?: CodeHelperError) => void;
67
+ export declare type MaterialExerciseCommonPropOnCodeHelpRequest = (code: string, error?: CodeHelperError, payload?: any) => void;
68
68
  /**
69
69
  * On default exercise room ID set.
70
70
  */
@@ -59,7 +59,8 @@ const ExerciseFileEditor = () => {
59
59
  const readOnly = readOnlyEditor || readOnlyActiveFile;
60
60
  const setUsercodeWebSocketState = recoil.useSetRecoilState(recoil$1.exerciseWebsocketQuery('usercodeEdit'));
61
61
  const setFileEditorCursorState = recoil.useSetRecoilState(recoil$1.exerciseFileEditorCursorState);
62
- const setFileEditorCursorSelectionValueState = recoil.useSetRecoilState(recoil$1.exerciseFileEditorCursorSelectionValueState); // editor
62
+ const setFileEditorCursorSelectionValueState = recoil.useSetRecoilState(recoil$1.exerciseFileEditorCursorSelectionValueState);
63
+ const setExerciseMonacoEditorValueState = recoil.useSetRecoilState(recoil$1.exerciseMonacoEditorValueState); // editor
63
64
 
64
65
  const editorApis = React__default["default"].useRef(null);
65
66
  const editorDocHistories = React__default["default"].useRef({});
@@ -90,6 +91,7 @@ const ExerciseFileEditor = () => {
90
91
  }
91
92
 
92
93
  if (content) {
94
+ setExerciseMonacoEditorValueState(content);
93
95
  (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
94
96
  } // reset as initial value on `null` received.
95
97
  else if (content === null) {
@@ -106,6 +108,7 @@ const ExerciseFileEditor = () => {
106
108
  var _a;
107
109
 
108
110
  if (typeof content === 'string') {
111
+ setExerciseMonacoEditorValueState(content);
109
112
  (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
110
113
  } else {
111
114
  setFileResettable(false);
@@ -260,6 +263,8 @@ const ExerciseFileEditor = () => {
260
263
  return;
261
264
  }
262
265
 
266
+ setExerciseMonacoEditorValueState(wsUsercode.doc);
267
+
263
268
  _editorApis.setValue(wsUsercode.doc);
264
269
 
265
270
  pushEditorDocHistories();
@@ -78,16 +78,24 @@ const ExerciseRunner = ({
78
78
  const setRunnerStdioFilesState = recoil.useSetRecoilState(recoil$1.exerciseRunnerStdioFilesState); // preview states
79
79
 
80
80
  const exercisePreviewType = recoil.useRecoilValue(recoil$1.exercisePreviewTypeState(materialExerciseId));
81
- const exercisePreviewDisplayMode = recoil.useRecoilValue(recoil$1.exercisePreviewDisplayModeState); // websockets
81
+ const exercisePreviewDisplayMode = recoil.useRecoilValue(recoil$1.exercisePreviewDisplayModeState); // monaco editor value
82
+
83
+ const getExerciseMonacoEditorValueState = recoil.useRecoilValue(recoil$1.exerciseMonacoEditorValueState); // websockets
82
84
 
83
85
  const setRunnerRoomWebSocketState = recoil.useSetRecoilState(recoil$1.exerciseWebsocketQuery('runnerRoom'));
84
86
  const setStdioWebSocketState = recoil.useSetRecoilState(recoil$1.exerciseWebsocketQuery('stdio'));
85
87
 
86
88
  const handleAiHelpibotError = text => {
89
+ var _a, _b;
90
+
87
91
  const error = runner.getProgrammingErrorResult(text);
88
92
 
89
93
  if (!!error && typeof onCodeHelpRequest === 'function') {
90
- onCodeHelpRequest(error.errorCode, error);
94
+ onCodeHelpRequest(error.errorCode, error, {
95
+ readme: (_a = exercise === null || exercise === void 0 ? void 0 : exercise.description) !== null && _a !== void 0 ? _a : '',
96
+ instruction: (_b = exercise === null || exercise === void 0 ? void 0 : exercise.instructionContent) !== null && _b !== void 0 ? _b : '',
97
+ openFileContent: getExerciseMonacoEditorValueState
98
+ });
91
99
  }
92
100
  };
93
101
 
@@ -146,3 +146,7 @@ export declare const exerciseFileEditorCursorState: import("recoil").RecoilState
146
146
  *
147
147
  */
148
148
  export declare const exerciseFileEditorCursorSelectionValueState: import("recoil").RecoilState<string | null>;
149
+ /**
150
+ *
151
+ */
152
+ export declare const exerciseMonacoEditorValueState: import("recoil").RecoilState<string>;
@@ -614,5 +614,13 @@ const exerciseFileEditorCursorSelectionValueState = atom({
614
614
  key: `${KEY_PREFIX}/FileEditorCursorSelectionValue`,
615
615
  default: null
616
616
  });
617
+ /**
618
+ *
619
+ */
620
+
621
+ const exerciseMonacoEditorValueState = atom({
622
+ key: `${KEY_PREFIX}/MonacoEditorValueState`,
623
+ default: ''
624
+ });
617
625
 
618
- export { exerciseActiveFilenameState, exerciseArduinoAgentConnectionState, exerciseArduinoAgentModalState, exerciseArduinoOnSelectPortState, exerciseArduinoOpenedPortNameState, exerciseArduinoPortsState, exerciseArduinoPreferenceState, exerciseArduinoUploadProgressState, exerciseContainerSizeState, exerciseEditorPreferenceState, exerciseFileEditorCursorSelectionValueState, exerciseFileEditorCursorState, exerciseFileTabsOpenedState, exerciseFileTreeOpenedState, exerciseLectureState, exerciseMultilangEnvironmentState, exerciseMultilangLanguagesState, exercisePreviewDisplayModeState, exercisePreviewTypeState, exerciseRightpaneActiveState, exerciseRoomState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerRunTypeState, exerciseRunnerRunningState, exerciseRunnerStdioFilesState, exerciseRunnerSubmittingState, exerciseRunnerWebSocketStatusQuery, exerciseState, exerciseUserState, exerciseWebsocketQuery, exerciseWebsocketStates };
626
+ export { exerciseActiveFilenameState, exerciseArduinoAgentConnectionState, exerciseArduinoAgentModalState, exerciseArduinoOnSelectPortState, exerciseArduinoOpenedPortNameState, exerciseArduinoPortsState, exerciseArduinoPreferenceState, exerciseArduinoUploadProgressState, exerciseContainerSizeState, exerciseEditorPreferenceState, exerciseFileEditorCursorSelectionValueState, exerciseFileEditorCursorState, exerciseFileTabsOpenedState, exerciseFileTreeOpenedState, exerciseLectureState, exerciseMonacoEditorValueState, exerciseMultilangEnvironmentState, exerciseMultilangLanguagesState, exercisePreviewDisplayModeState, exercisePreviewTypeState, exerciseRightpaneActiveState, exerciseRoomState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerRunTypeState, exerciseRunnerRunningState, exerciseRunnerStdioFilesState, exerciseRunnerSubmittingState, exerciseRunnerWebSocketStatusQuery, exerciseState, exerciseUserState, exerciseWebsocketQuery, exerciseWebsocketStates };
@@ -64,7 +64,7 @@ export declare type MaterialExerciseCommonPropExerciseImageEmptyOptions = Exerci
64
64
  /**
65
65
  * On code help button click.
66
66
  */
67
- export declare type MaterialExerciseCommonPropOnCodeHelpRequest = (code: string, error?: CodeHelperError) => void;
67
+ export declare type MaterialExerciseCommonPropOnCodeHelpRequest = (code: string, error?: CodeHelperError, payload?: any) => void;
68
68
  /**
69
69
  * On default exercise room ID set.
70
70
  */
@@ -16,7 +16,7 @@ import 'monaco-editor/esm/vs/editor/editor.api';
16
16
  import '../../shared/monaco-editor/constants/monaco/preferences.js';
17
17
  import 'react-use';
18
18
  import 'socket.io-client';
19
- import { exerciseState, exerciseRoomState, exerciseLectureState, exerciseEditorPreferenceState, exerciseActiveFilenameState, exerciseWebsocketQuery, exerciseFileEditorCursorState, exerciseFileEditorCursorSelectionValueState } from '../context/recoil.js';
19
+ import { exerciseState, exerciseRoomState, exerciseLectureState, exerciseEditorPreferenceState, exerciseActiveFilenameState, exerciseWebsocketQuery, exerciseFileEditorCursorState, exerciseFileEditorCursorSelectionValueState, exerciseMonacoEditorValueState } from '../context/recoil.js';
20
20
  import { ExerciseContext } from '../context/context.js';
21
21
  import '../context/recoilTypes.js';
22
22
  import { exerciseFileEditorContentChange$, exerciseFileEditorSaveAction$ } from '../context/subjects.js';
@@ -53,7 +53,8 @@ const ExerciseFileEditor = () => {
53
53
  const readOnly = readOnlyEditor || readOnlyActiveFile;
54
54
  const setUsercodeWebSocketState = useSetRecoilState(exerciseWebsocketQuery('usercodeEdit'));
55
55
  const setFileEditorCursorState = useSetRecoilState(exerciseFileEditorCursorState);
56
- const setFileEditorCursorSelectionValueState = useSetRecoilState(exerciseFileEditorCursorSelectionValueState); // editor
56
+ const setFileEditorCursorSelectionValueState = useSetRecoilState(exerciseFileEditorCursorSelectionValueState);
57
+ const setExerciseMonacoEditorValueState = useSetRecoilState(exerciseMonacoEditorValueState); // editor
57
58
 
58
59
  const editorApis = React.useRef(null);
59
60
  const editorDocHistories = React.useRef({});
@@ -84,6 +85,7 @@ const ExerciseFileEditor = () => {
84
85
  }
85
86
 
86
87
  if (content) {
88
+ setExerciseMonacoEditorValueState(content);
87
89
  (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
88
90
  } // reset as initial value on `null` received.
89
91
  else if (content === null) {
@@ -100,6 +102,7 @@ const ExerciseFileEditor = () => {
100
102
  var _a;
101
103
 
102
104
  if (typeof content === 'string') {
105
+ setExerciseMonacoEditorValueState(content);
103
106
  (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
104
107
  } else {
105
108
  setFileResettable(false);
@@ -254,6 +257,8 @@ const ExerciseFileEditor = () => {
254
257
  return;
255
258
  }
256
259
 
260
+ setExerciseMonacoEditorValueState(wsUsercode.doc);
261
+
257
262
  _editorApis.setValue(wsUsercode.doc);
258
263
 
259
264
  pushEditorDocHistories();
@@ -10,7 +10,7 @@ import styled from 'styled-components';
10
10
  import XtermLazy from '../../shared/xterm/XtermLazy.js';
11
11
  import { MATERIAL_RESIZABLE_COMMON_PROPS } from '../../../constants/stylesheets.js';
12
12
  import { useArduino } from '../../../hooks/useArduino.js';
13
- import { exerciseState, exerciseEditorPreferenceState, exerciseRunnerSubmittingState, exerciseRunnerRunningState, exerciseRunnerRunTypeState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerStdioFilesState, exercisePreviewTypeState, exercisePreviewDisplayModeState, exerciseWebsocketQuery, exerciseContainerSizeState } from '../context/recoil.js';
13
+ import { exerciseState, exerciseEditorPreferenceState, exerciseRunnerSubmittingState, exerciseRunnerRunningState, exerciseRunnerRunTypeState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerStdioFilesState, exercisePreviewTypeState, exercisePreviewDisplayModeState, exerciseMonacoEditorValueState, exerciseWebsocketQuery, exerciseContainerSizeState } from '../context/recoil.js';
14
14
  import { ExerciseContext } from '../context/context.js';
15
15
  import { ExercisePreviewType, ExercisePreviewDisplayMode } from '../context/recoilTypes.js';
16
16
  import { exerciseRunnerTextSend$ } from '../context/subjects.js';
@@ -71,16 +71,24 @@ const ExerciseRunner = ({
71
71
  const setRunnerStdioFilesState = useSetRecoilState(exerciseRunnerStdioFilesState); // preview states
72
72
 
73
73
  const exercisePreviewType = useRecoilValue(exercisePreviewTypeState(materialExerciseId));
74
- const exercisePreviewDisplayMode = useRecoilValue(exercisePreviewDisplayModeState); // websockets
74
+ const exercisePreviewDisplayMode = useRecoilValue(exercisePreviewDisplayModeState); // monaco editor value
75
+
76
+ const getExerciseMonacoEditorValueState = useRecoilValue(exerciseMonacoEditorValueState); // websockets
75
77
 
76
78
  const setRunnerRoomWebSocketState = useSetRecoilState(exerciseWebsocketQuery('runnerRoom'));
77
79
  const setStdioWebSocketState = useSetRecoilState(exerciseWebsocketQuery('stdio'));
78
80
 
79
81
  const handleAiHelpibotError = text => {
82
+ var _a, _b;
83
+
80
84
  const error = getProgrammingErrorResult(text);
81
85
 
82
86
  if (!!error && typeof onCodeHelpRequest === 'function') {
83
- onCodeHelpRequest(error.errorCode, error);
87
+ onCodeHelpRequest(error.errorCode, error, {
88
+ readme: (_a = exercise === null || exercise === void 0 ? void 0 : exercise.description) !== null && _a !== void 0 ? _a : '',
89
+ instruction: (_b = exercise === null || exercise === void 0 ? void 0 : exercise.instructionContent) !== null && _b !== void 0 ? _b : '',
90
+ openFileContent: getExerciseMonacoEditorValueState
91
+ });
84
92
  }
85
93
  };
86
94
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elice/material-exercise",
3
- "version": "1.230316.0",
3
+ "version": "1.230325.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",
@@ -79,8 +79,8 @@
79
79
  "@elice/design-tokens": "^1.220803.0",
80
80
  "@elice/icons": "^1.220803.0",
81
81
  "@elice/markdown": "^1.220803.0",
82
- "@elice/material-shared-types": "1.230316.0",
83
- "@elice/material-shared-utils": "1.230316.0",
82
+ "@elice/material-shared-types": "1.230325.0",
83
+ "@elice/material-shared-utils": "1.230325.0",
84
84
  "@elice/types": "^1.230306.0",
85
85
  "@elice/websocket": "^1.220803.0",
86
86
  "@types/classnames": "^2.3.1",
@@ -102,5 +102,5 @@
102
102
  "recoil": "^0.6.1",
103
103
  "styled-components": "^5.2.0"
104
104
  },
105
- "gitHead": "afbe8701b9b8fc094459762caa92310c194929f1"
105
+ "gitHead": "8895c0015d03f16997ce78d5f25e22258ce609f8"
106
106
  }