@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.
- package/cjs/components/material-exercise/context/recoil.d.ts +4 -0
- package/cjs/components/material-exercise/context/recoil.js +9 -0
- package/cjs/components/material-exercise/context/types.d.ts +1 -1
- package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +6 -1
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunner.js +10 -2
- package/es/components/material-exercise/context/recoil.d.ts +4 -0
- package/es/components/material-exercise/context/recoil.js +9 -1
- package/es/components/material-exercise/context/types.d.ts +1 -1
- package/es/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +7 -2
- package/es/components/material-exercise/exercise-runner/ExerciseRunner.js +11 -3
- package/package.json +4 -4
|
@@ -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);
|
|
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); //
|
|
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);
|
|
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); //
|
|
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.
|
|
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.
|
|
83
|
-
"@elice/material-shared-utils": "1.
|
|
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": "
|
|
105
|
+
"gitHead": "8895c0015d03f16997ce78d5f25e22258ce609f8"
|
|
106
106
|
}
|