@elice/material-exercise 1.230516.0-helpidialogue.1 → 1.230516.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/MaterialExercise.js +6 -10
- package/cjs/components/material-exercise/context/ExerciseProvider.js +0 -25
- package/cjs/components/material-exercise/context/recoil.d.ts +0 -4
- package/cjs/components/material-exercise/context/recoil.js +0 -8
- package/cjs/components/material-exercise/context/types.d.ts +0 -6
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +24 -14
- package/cjs/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
- package/es/components/material-exercise/MaterialExercise.js +7 -11
- package/es/components/material-exercise/context/ExerciseProvider.js +2 -27
- package/es/components/material-exercise/context/recoil.d.ts +0 -4
- package/es/components/material-exercise/context/recoil.js +1 -8
- package/es/components/material-exercise/context/types.d.ts +0 -6
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +24 -14
- package/es/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
- package/es/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
- package/package.json +10 -10
|
@@ -37,6 +37,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
37
37
|
* Material exercise.
|
|
38
38
|
*/
|
|
39
39
|
var MaterialExercise = React.forwardRef(function (props, ref) {
|
|
40
|
+
var _api = React__default["default"].useRef({});
|
|
40
41
|
var _useRecoilValue = recoil.useRecoilValue(recoil$1.exerciseContainerSizeState),
|
|
41
42
|
width = _useRecoilValue.width,
|
|
42
43
|
height = _useRecoilValue.height;
|
|
@@ -44,7 +45,6 @@ var MaterialExercise = React.forwardRef(function (props, ref) {
|
|
|
44
45
|
var exerciseFileTreeOpened = recoil.useRecoilValue(recoil$1.exerciseFileTreeOpenedState);
|
|
45
46
|
var exercisePreviewType = recoil.useRecoilValue(recoil$1.exercisePreviewTypeState(props.materialExerciseId));
|
|
46
47
|
var exercisePreviewDisplayMode = recoil.useRecoilValue(recoil$1.exercisePreviewDisplayModeState);
|
|
47
|
-
var exerciseMonacoEditorApis = recoil.useRecoilValue(recoil$1.exerciseMonacoEditorApisState);
|
|
48
48
|
/**
|
|
49
49
|
* File tree
|
|
50
50
|
*/
|
|
@@ -126,16 +126,12 @@ var MaterialExercise = React.forwardRef(function (props, ref) {
|
|
|
126
126
|
//
|
|
127
127
|
//
|
|
128
128
|
//
|
|
129
|
+
_api.current.sendTextToRunner = function (text) {
|
|
130
|
+
subjects.exerciseRunnerTextSend$.next(text);
|
|
131
|
+
};
|
|
129
132
|
React__default["default"].useImperativeHandle(ref, function () {
|
|
130
|
-
return
|
|
131
|
-
|
|
132
|
-
subjects.exerciseRunnerTextSend$.next(text);
|
|
133
|
-
},
|
|
134
|
-
getMonacoEditorApis: function getMonacoEditorApis() {
|
|
135
|
-
return exerciseMonacoEditorApis;
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
}, [exerciseMonacoEditorApis]);
|
|
133
|
+
return _api.current;
|
|
134
|
+
});
|
|
139
135
|
//
|
|
140
136
|
//
|
|
141
137
|
//
|
|
@@ -8,7 +8,6 @@ var React = require('react');
|
|
|
8
8
|
var reactUse = require('react-use');
|
|
9
9
|
var apiClient = require('@elice/api-client');
|
|
10
10
|
var blocks = require('@elice/blocks');
|
|
11
|
-
var materialSharedUtils = require('@elice/material-shared-utils');
|
|
12
11
|
var recoil = require('recoil');
|
|
13
12
|
var styled = require('styled-components');
|
|
14
13
|
var context = require('./context.js');
|
|
@@ -38,9 +37,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
|
|
|
38
37
|
onDefaultExerciseRoomIdSet = _a.onDefaultExerciseRoomIdSet,
|
|
39
38
|
exerciseImageEmptyOptions = _a.exerciseImageEmptyOptions,
|
|
40
39
|
contextProps = tslib.__rest(_a, ["children", "materialExerciseId", "exerciseRoomId", "exerciseRoomUserId", "onDefaultExerciseRoomIdSet", "exerciseImageEmptyOptions"]);
|
|
41
|
-
//
|
|
42
|
-
var _useMaterialConfig = materialSharedUtils.useMaterialConfig(),
|
|
43
|
-
orgNameShort = _useMaterialConfig.orgNameShort;
|
|
44
40
|
// user
|
|
45
41
|
var user = recoil.useRecoilValue(recoil$1.exerciseUserState);
|
|
46
42
|
// exercise
|
|
@@ -55,7 +51,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
|
|
|
55
51
|
// etc
|
|
56
52
|
var activeFilename = recoil.useRecoilValue(recoil$1.exerciseActiveFilenameState);
|
|
57
53
|
var setConatinerSize = recoil.useSetRecoilState(recoil$1.exerciseContainerSizeState);
|
|
58
|
-
var setAibotInfoEnable = recoil.useSetRecoilState(recoil$1.exerciseAibotInfoEnableState);
|
|
59
54
|
// wrap container size
|
|
60
55
|
var _useMeasure = reactUse.useMeasure(),
|
|
61
56
|
_useMeasure2 = _rollupPluginBabelHelpers.slicedToArray(_useMeasure, 2),
|
|
@@ -131,26 +126,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
|
|
|
131
126
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
132
127
|
[width, height]);
|
|
133
128
|
//
|
|
134
|
-
// update
|
|
135
|
-
//
|
|
136
|
-
React__default["default"].useEffect(function () {
|
|
137
|
-
if (!(lecture === null || lecture === void 0 ? void 0 : lecture.courseId)) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
void Promise.all([apiClient.getGlobalOrganizationGet({
|
|
141
|
-
organizationNameShort: orgNameShort
|
|
142
|
-
}), apiClient.getOrgCourseGet({
|
|
143
|
-
courseId: lecture.courseId
|
|
144
|
-
})]).then(function (_ref) {
|
|
145
|
-
var _ref2 = _rollupPluginBabelHelpers.slicedToArray(_ref, 2),
|
|
146
|
-
organization = _ref2[0].organization,
|
|
147
|
-
course = _ref2[1].course;
|
|
148
|
-
var isAibotInfoEnabled = organization.aibotInfo.isEnabled && course.aibotInfo.isEnabled;
|
|
149
|
-
setAibotInfoEnable(isAibotInfoEnabled);
|
|
150
|
-
});
|
|
151
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
152
|
-
}, [lecture, orgNameShort]);
|
|
153
|
-
//
|
|
154
129
|
//
|
|
155
130
|
//
|
|
156
131
|
return React__default["default"].createElement(StyledMaterialExercise, {
|
|
@@ -139,10 +139,6 @@ export declare const exerciseRightpaneActiveState: import("recoil").RecoilState<
|
|
|
139
139
|
*
|
|
140
140
|
*/
|
|
141
141
|
export declare const exerciseContainerSizeState: import("recoil").RecoilState<AtomContainerSizeState>;
|
|
142
|
-
/**
|
|
143
|
-
*
|
|
144
|
-
*/
|
|
145
|
-
export declare const exerciseAibotInfoEnableState: import("recoil").RecoilState<boolean>;
|
|
146
142
|
/**
|
|
147
143
|
*
|
|
148
144
|
*/
|
|
@@ -794,13 +794,6 @@ var exerciseContainerSizeState = recoil.atom({
|
|
|
794
794
|
height: 0
|
|
795
795
|
}
|
|
796
796
|
});
|
|
797
|
-
/**
|
|
798
|
-
*
|
|
799
|
-
*/
|
|
800
|
-
var exerciseAibotInfoEnableState = recoil.atom({
|
|
801
|
-
key: "".concat(KEY_PREFIX, "/AibotInfoEnable"),
|
|
802
|
-
default: false
|
|
803
|
-
});
|
|
804
797
|
/**
|
|
805
798
|
*
|
|
806
799
|
*/
|
|
@@ -828,7 +821,6 @@ var exerciseMonacoEditorApisState = recoil.atom({
|
|
|
828
821
|
});
|
|
829
822
|
|
|
830
823
|
exports.exerciseActiveFilenameState = exerciseActiveFilenameState;
|
|
831
|
-
exports.exerciseAibotInfoEnableState = exerciseAibotInfoEnableState;
|
|
832
824
|
exports.exerciseArduinoAgentConnectionState = exerciseArduinoAgentConnectionState;
|
|
833
825
|
exports.exerciseArduinoAgentModalState = exerciseArduinoAgentModalState;
|
|
834
826
|
exports.exerciseArduinoOnSelectPortState = exerciseArduinoOnSelectPortState;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { MaterialCommponentCommonProps } from '@elice/material-shared-utils';
|
|
3
3
|
import type { GetOrgMaterialExerciseExerciseRunningListResponses, PostOrgMaterialExerciseExerciseRunningSubmitResponses } from '@elice/types';
|
|
4
|
-
import type { MonacoEditorApis } from "../../shared/monaco-editor";
|
|
5
4
|
import type { CodeHelperError } from "../../../utils";
|
|
6
5
|
import type { ExerciseProviderNoImageProps } from './ExerciseProviderNoImage';
|
|
7
6
|
/**
|
|
@@ -18,16 +17,11 @@ EA extends Record<string, unknown> = {}> = MaterialExerciseCommonComponent<EP, E
|
|
|
18
17
|
*/
|
|
19
18
|
export interface MaterialExerciseCommonApis {
|
|
20
19
|
sendTextToRunner: MaterialExerciseCommonApiSendTextToTerminal;
|
|
21
|
-
getMonacoEditorApis: MaterialExerciseCommonApiGetMonacoEditorApis;
|
|
22
20
|
}
|
|
23
21
|
/**
|
|
24
22
|
* Send text to terminal.
|
|
25
23
|
*/
|
|
26
24
|
export declare type MaterialExerciseCommonApiSendTextToTerminal = (text: string) => void;
|
|
27
|
-
/**
|
|
28
|
-
* Get monaco editor apis.
|
|
29
|
-
*/
|
|
30
|
-
export declare type MaterialExerciseCommonApiGetMonacoEditorApis = () => MonacoEditorApis | null;
|
|
31
25
|
/**
|
|
32
26
|
* [External]
|
|
33
27
|
* Common exposed props for `MaterialExercise*` components.
|
|
@@ -5,15 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
|
+
var apiClient = require('@elice/api-client');
|
|
8
9
|
var blocks = require('@elice/blocks');
|
|
9
10
|
var icons = require('@elice/icons');
|
|
10
|
-
var
|
|
11
|
+
var materialSharedUtils = require('@elice/material-shared-utils');
|
|
11
12
|
var styled = require('styled-components');
|
|
12
|
-
var recoil$1 = require('../context/recoil.js');
|
|
13
|
-
require('../context/context.js');
|
|
14
|
-
require('../context/recoilTypes.js');
|
|
15
|
-
require('../context/subjects.js');
|
|
16
|
-
require('../context/ExerciseProvider.js');
|
|
17
13
|
|
|
18
14
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
19
15
|
|
|
@@ -26,20 +22,34 @@ var StyledControllerButton = styled__default["default"](blocks.Button).withConfi
|
|
|
26
22
|
componentId: "sc-10grd0k-0"
|
|
27
23
|
})(["position:relative;transition:none;"]);
|
|
28
24
|
var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].forwardRef(function (props, ref) {
|
|
25
|
+
var _useMaterialConfig = materialSharedUtils.useMaterialConfig(),
|
|
26
|
+
orgNameShort = _useMaterialConfig.orgNameShort;
|
|
29
27
|
var _React$useState = React__default["default"].useState(false),
|
|
30
28
|
_React$useState2 = _rollupPluginBabelHelpers.slicedToArray(_React$useState, 2),
|
|
31
29
|
isTooltipHidden = _React$useState2[0],
|
|
32
30
|
setIsTooltipHidden = _React$useState2[1];
|
|
33
|
-
var isAibotInfoEnabled = recoil.useRecoilValue(recoil$1.exerciseAibotInfoEnableState);
|
|
34
|
-
//
|
|
35
31
|
//
|
|
36
32
|
//
|
|
33
|
+
// Get ai info from organization and check all resovle below conditions.
|
|
34
|
+
// - isEnable is true.
|
|
35
|
+
// - quotaPerDay is upper than zero.
|
|
36
|
+
// - tooltip hidden is false.
|
|
37
37
|
React__default["default"].useEffect(function () {
|
|
38
38
|
var isTooltipHidden = sessionStorage.getItem(ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY) === ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE;
|
|
39
39
|
if (isTooltipHidden) {
|
|
40
40
|
setIsTooltipHidden(true);
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
+
apiClient.getGlobalOrganizationGet({
|
|
44
|
+
organizationNameShort: orgNameShort
|
|
45
|
+
}).then(function (res) {
|
|
46
|
+
var aibotInfo = res.organization.aibotInfo;
|
|
47
|
+
var isHidden = !aibotInfo.isEnabled || aibotInfo.quotaPerDay <= 0;
|
|
48
|
+
setIsTooltipHidden(isHidden);
|
|
49
|
+
}).catch(function () {
|
|
50
|
+
setIsTooltipHidden(true);
|
|
51
|
+
});
|
|
52
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
43
53
|
}, []);
|
|
44
54
|
//
|
|
45
55
|
//
|
|
@@ -57,18 +67,18 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].fo
|
|
|
57
67
|
size: "tiny",
|
|
58
68
|
bold: true
|
|
59
69
|
}, "NEW")), React__default["default"].createElement(blocks.Hspace, {
|
|
60
|
-
width: 0.
|
|
70
|
+
width: 0.25
|
|
61
71
|
}), React__default["default"].createElement(blocks.Text, {
|
|
62
|
-
role: "
|
|
72
|
+
role: "gray7",
|
|
63
73
|
size: "small",
|
|
64
74
|
bold: true
|
|
65
75
|
}, React__default["default"].createElement(reactIntl.FormattedMessage, {
|
|
66
76
|
id: "exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp"
|
|
67
77
|
})), React__default["default"].createElement(blocks.Hspace, {
|
|
68
|
-
width: 0.
|
|
78
|
+
width: 0.25
|
|
69
79
|
}), React__default["default"].createElement(blocks.IconButton, {
|
|
70
80
|
size: "tiny",
|
|
71
|
-
role: "
|
|
81
|
+
role: "gray6",
|
|
72
82
|
hasPadding: false,
|
|
73
83
|
border: false,
|
|
74
84
|
icon: icons.eilMathsignMultiplyBasic,
|
|
@@ -78,7 +88,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].fo
|
|
|
78
88
|
}
|
|
79
89
|
}));
|
|
80
90
|
};
|
|
81
|
-
return
|
|
91
|
+
return React__default["default"].createElement(blocks.Tooltip, {
|
|
82
92
|
placement: "top",
|
|
83
93
|
dark: false,
|
|
84
94
|
visible: !isTooltipHidden,
|
|
@@ -93,7 +103,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].fo
|
|
|
93
103
|
iconAlign: "right"
|
|
94
104
|
}), React__default["default"].createElement(reactIntl.FormattedMessage, {
|
|
95
105
|
id: "exerciseRunner.controller.buttonGroup.button.helpRequest"
|
|
96
|
-
})))
|
|
106
|
+
})));
|
|
97
107
|
});
|
|
98
108
|
|
|
99
109
|
exports["default"] = ExerciseRunnerControllerCodeHelpRequestButton;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"
|
|
5
|
+
var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"Help me","exerciseRunner.controller.buttonGroup.button.run":"Run","exerciseRunner.controller.buttonGroup.button.stop":"Stop","exerciseRunner.controller.buttonGroup.button.submit":"Submit","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"Exercise without submission","exerciseRunner.controller.buttonGroup.button.syncRequest":"Sync code","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"A function to get help from AI has been added.","exerciseRunner.controller.runningInfo.error.fetch":"An error occurred while fetching running info","exerciseRunner.controller.runningInfo.lastRunningDatetime":"Last running datetime","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"Last submit datetime","exerciseRunner.controller.runningInfo.lastSubmitScore":"Last submit score","exerciseRunner.controller.runningInfo.score":"{score}","exerciseRunner.controller.statusMessage.closed":"Editor disconnected","exerciseRunner.controller.statusMessage.connecting":"Connecting to editor...","exerciseRunner.controller.statusMessage.open":"Editor connected","exerciseRunner.controller.timer.runningRemainingTime":"Remaining: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"OK","exerciseRunner.submitErrorDialog.action.reload":"Reload page","exerciseRunner.submitErrorDialog.body.commonError":"An error occurred while running the code.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"You have exceeded the allowed number of lab submissions.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"The exercise image has been updated.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.networkError":"An error occurred while running the code.\nPlease refresh and try again.\nIf the problem persists, please check the network status.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"This exercise is not allowed to be submitted.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"The exercise room is being prepared.\nPlease try again later.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"The exercise room is running.\nPlease wait a moment.","exerciseRunner.submitErrorDialog.body.unknown":"An error occurred while running the code.\nPlease try again later.","exerciseRunner.submitErrorDialog.title":"Unable to run the code"};
|
|
6
6
|
|
|
7
7
|
exports["default"] = phrasesEn;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"
|
|
5
|
+
var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"도와주세요","exerciseRunner.controller.buttonGroup.button.run":"실행","exerciseRunner.controller.buttonGroup.button.stop":"정지","exerciseRunner.controller.buttonGroup.button.submit":"제출","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"실행만 가능한 실습입니다.","exerciseRunner.controller.buttonGroup.button.syncRequest":"코드 동기화","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"AI에게 도움받기 기능이 추가되었어요.","exerciseRunner.controller.runningInfo.error.fetch":"최종 실행 내역을 가져오는데 문제가 발생하였습니다.","exerciseRunner.controller.runningInfo.lastRunningDatetime":"최종 실행 시간","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"최종 제출 시간","exerciseRunner.controller.runningInfo.lastSubmitScore":"최종 제출 점수","exerciseRunner.controller.runningInfo.score":"{score} 점","exerciseRunner.controller.statusMessage.closed":"에디터 연결 끊김","exerciseRunner.controller.statusMessage.connecting":"에디터 연결 중...","exerciseRunner.controller.statusMessage.open":"에디터 연결됨","exerciseRunner.controller.timer.runningRemainingTime":"실행 제한시간: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"확인","exerciseRunner.submitErrorDialog.action.reload":"새로고침","exerciseRunner.submitErrorDialog.body.commonError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"실습 제출 허용 횟수를 초과했습니다.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"실습환경이 업데이트 되었습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.networkError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.\n문제가 계속되면 네트워크 상태를 확인해주세요.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"제출이 허용되지 않은 실습입니다.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"실습환경이 준비 중입니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"실습을 실행하고 있습니다.\n잠시만 기다려주세요.","exerciseRunner.submitErrorDialog.body.unknown":"코드 실행 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.title":"실습을 실행할 수 없습니다"};
|
|
6
6
|
|
|
7
7
|
exports["default"] = phrasesKo;
|
|
@@ -5,7 +5,7 @@ import { withForwardRefMaterial } from '@elice/material-shared-utils';
|
|
|
5
5
|
import { useRecoilValue } from 'recoil';
|
|
6
6
|
import { MATERIAL_RESIZABLE_COMMON_PROPS } from '../../constants/stylesheets.js';
|
|
7
7
|
import ExerciseFileTabsFileTreeButton from './exercise-file-tabs/ExerciseFileTabsFileTreeButton.js';
|
|
8
|
-
import { exerciseContainerSizeState, exerciseState, exerciseFileTreeOpenedState, exercisePreviewTypeState, exercisePreviewDisplayModeState
|
|
8
|
+
import { exerciseContainerSizeState, exerciseState, exerciseFileTreeOpenedState, exercisePreviewTypeState, exercisePreviewDisplayModeState } from './context/recoil.js';
|
|
9
9
|
import './context/context.js';
|
|
10
10
|
import { ExercisePreviewType, ExercisePreviewDisplayMode } from './context/recoilTypes.js';
|
|
11
11
|
import { exerciseRunnerTextSend$ } from './context/subjects.js';
|
|
@@ -29,6 +29,7 @@ import { StyledExerciseContainer, EXERCISE_PREVIEW_MIN_WIDTH, EXERCISE_HORIZONTA
|
|
|
29
29
|
* Material exercise.
|
|
30
30
|
*/
|
|
31
31
|
var MaterialExercise = forwardRef(function (props, ref) {
|
|
32
|
+
var _api = React.useRef({});
|
|
32
33
|
var _useRecoilValue = useRecoilValue(exerciseContainerSizeState),
|
|
33
34
|
width = _useRecoilValue.width,
|
|
34
35
|
height = _useRecoilValue.height;
|
|
@@ -36,7 +37,6 @@ var MaterialExercise = forwardRef(function (props, ref) {
|
|
|
36
37
|
var exerciseFileTreeOpened = useRecoilValue(exerciseFileTreeOpenedState);
|
|
37
38
|
var exercisePreviewType = useRecoilValue(exercisePreviewTypeState(props.materialExerciseId));
|
|
38
39
|
var exercisePreviewDisplayMode = useRecoilValue(exercisePreviewDisplayModeState);
|
|
39
|
-
var exerciseMonacoEditorApis = useRecoilValue(exerciseMonacoEditorApisState);
|
|
40
40
|
/**
|
|
41
41
|
* File tree
|
|
42
42
|
*/
|
|
@@ -118,16 +118,12 @@ var MaterialExercise = forwardRef(function (props, ref) {
|
|
|
118
118
|
//
|
|
119
119
|
//
|
|
120
120
|
//
|
|
121
|
+
_api.current.sendTextToRunner = function (text) {
|
|
122
|
+
exerciseRunnerTextSend$.next(text);
|
|
123
|
+
};
|
|
121
124
|
React.useImperativeHandle(ref, function () {
|
|
122
|
-
return
|
|
123
|
-
|
|
124
|
-
exerciseRunnerTextSend$.next(text);
|
|
125
|
-
},
|
|
126
|
-
getMonacoEditorApis: function getMonacoEditorApis() {
|
|
127
|
-
return exerciseMonacoEditorApis;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}, [exerciseMonacoEditorApis]);
|
|
125
|
+
return _api.current;
|
|
126
|
+
});
|
|
131
127
|
//
|
|
132
128
|
//
|
|
133
129
|
//
|
|
@@ -2,14 +2,13 @@ import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPlugin
|
|
|
2
2
|
import { __rest } from 'tslib';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { useMeasure } from 'react-use';
|
|
5
|
-
import { getOrgMaterialExerciseDefaultRoomGet
|
|
5
|
+
import { getOrgMaterialExerciseDefaultRoomGet } from '@elice/api-client';
|
|
6
6
|
import { Flex, Spinner } from '@elice/blocks';
|
|
7
|
-
import { useMaterialConfig } from '@elice/material-shared-utils';
|
|
8
7
|
import { useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil';
|
|
9
8
|
import styled from 'styled-components';
|
|
10
9
|
import { ExerciseContext } from './context.js';
|
|
11
10
|
import MaterialExerciseNoImage from './ExerciseProviderNoImage.js';
|
|
12
|
-
import { exerciseUserState, exerciseState, exerciseRoomState, exerciseLectureState, exerciseMultilangLanguagesState, exerciseActiveFilenameState, exerciseContainerSizeState
|
|
11
|
+
import { exerciseUserState, exerciseState, exerciseRoomState, exerciseLectureState, exerciseMultilangLanguagesState, exerciseActiveFilenameState, exerciseContainerSizeState } from './recoil.js';
|
|
13
12
|
|
|
14
13
|
var RECOIL_RESET_DELAY = 10;
|
|
15
14
|
var StyledMaterialExercise = styled.div.withConfig({
|
|
@@ -29,9 +28,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
|
|
|
29
28
|
onDefaultExerciseRoomIdSet = _a.onDefaultExerciseRoomIdSet,
|
|
30
29
|
exerciseImageEmptyOptions = _a.exerciseImageEmptyOptions,
|
|
31
30
|
contextProps = __rest(_a, ["children", "materialExerciseId", "exerciseRoomId", "exerciseRoomUserId", "onDefaultExerciseRoomIdSet", "exerciseImageEmptyOptions"]);
|
|
32
|
-
//
|
|
33
|
-
var _useMaterialConfig = useMaterialConfig(),
|
|
34
|
-
orgNameShort = _useMaterialConfig.orgNameShort;
|
|
35
31
|
// user
|
|
36
32
|
var user = useRecoilValue(exerciseUserState);
|
|
37
33
|
// exercise
|
|
@@ -46,7 +42,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
|
|
|
46
42
|
// etc
|
|
47
43
|
var activeFilename = useRecoilValue(exerciseActiveFilenameState);
|
|
48
44
|
var setConatinerSize = useSetRecoilState(exerciseContainerSizeState);
|
|
49
|
-
var setAibotInfoEnable = useSetRecoilState(exerciseAibotInfoEnableState);
|
|
50
45
|
// wrap container size
|
|
51
46
|
var _useMeasure = useMeasure(),
|
|
52
47
|
_useMeasure2 = _slicedToArray(_useMeasure, 2),
|
|
@@ -122,26 +117,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
|
|
|
122
117
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
123
118
|
[width, height]);
|
|
124
119
|
//
|
|
125
|
-
// update
|
|
126
|
-
//
|
|
127
|
-
React.useEffect(function () {
|
|
128
|
-
if (!(lecture === null || lecture === void 0 ? void 0 : lecture.courseId)) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
void Promise.all([getGlobalOrganizationGet({
|
|
132
|
-
organizationNameShort: orgNameShort
|
|
133
|
-
}), getOrgCourseGet({
|
|
134
|
-
courseId: lecture.courseId
|
|
135
|
-
})]).then(function (_ref) {
|
|
136
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
137
|
-
organization = _ref2[0].organization,
|
|
138
|
-
course = _ref2[1].course;
|
|
139
|
-
var isAibotInfoEnabled = organization.aibotInfo.isEnabled && course.aibotInfo.isEnabled;
|
|
140
|
-
setAibotInfoEnable(isAibotInfoEnabled);
|
|
141
|
-
});
|
|
142
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
143
|
-
}, [lecture, orgNameShort]);
|
|
144
|
-
//
|
|
145
120
|
//
|
|
146
121
|
//
|
|
147
122
|
return React.createElement(StyledMaterialExercise, {
|
|
@@ -139,10 +139,6 @@ export declare const exerciseRightpaneActiveState: import("recoil").RecoilState<
|
|
|
139
139
|
*
|
|
140
140
|
*/
|
|
141
141
|
export declare const exerciseContainerSizeState: import("recoil").RecoilState<AtomContainerSizeState>;
|
|
142
|
-
/**
|
|
143
|
-
*
|
|
144
|
-
*/
|
|
145
|
-
export declare const exerciseAibotInfoEnableState: import("recoil").RecoilState<boolean>;
|
|
146
142
|
/**
|
|
147
143
|
*
|
|
148
144
|
*/
|
|
@@ -786,13 +786,6 @@ var exerciseContainerSizeState = atom({
|
|
|
786
786
|
height: 0
|
|
787
787
|
}
|
|
788
788
|
});
|
|
789
|
-
/**
|
|
790
|
-
*
|
|
791
|
-
*/
|
|
792
|
-
var exerciseAibotInfoEnableState = atom({
|
|
793
|
-
key: "".concat(KEY_PREFIX, "/AibotInfoEnable"),
|
|
794
|
-
default: false
|
|
795
|
-
});
|
|
796
789
|
/**
|
|
797
790
|
*
|
|
798
791
|
*/
|
|
@@ -819,4 +812,4 @@ var exerciseMonacoEditorApisState = atom({
|
|
|
819
812
|
dangerouslyAllowMutability: true
|
|
820
813
|
});
|
|
821
814
|
|
|
822
|
-
export { exerciseActiveFilenameState,
|
|
815
|
+
export { exerciseActiveFilenameState, exerciseArduinoAgentConnectionState, exerciseArduinoAgentModalState, exerciseArduinoOnSelectPortState, exerciseArduinoOpenedPortNameState, exerciseArduinoPortsState, exerciseArduinoPreferenceState, exerciseArduinoUploadProgressState, exerciseContainerSizeState, exerciseEditorPreferenceState, exerciseFileEditorCursorSelectionValueState, exerciseFileEditorCursorState, exerciseFileTabsOpenedState, exerciseFileTreeOpenedState, exerciseLectureState, exerciseMonacoEditorApisState, exerciseMultilangEnvironmentState, exerciseMultilangLanguagesState, exercisePreviewDisplayModeState, exercisePreviewTypeState, exerciseRightpaneActiveState, exerciseRoomState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerRunTypeState, exerciseRunnerRunningState, exerciseRunnerStdioFilesState, exerciseRunnerSubmittingState, exerciseRunnerWebSocketStatusQuery, exerciseState, exerciseUserState, exerciseWebsocketQuery, exerciseWebsocketStates };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { MaterialCommponentCommonProps } from '@elice/material-shared-utils';
|
|
3
3
|
import type { GetOrgMaterialExerciseExerciseRunningListResponses, PostOrgMaterialExerciseExerciseRunningSubmitResponses } from '@elice/types';
|
|
4
|
-
import type { MonacoEditorApis } from "../../shared/monaco-editor";
|
|
5
4
|
import type { CodeHelperError } from "../../../utils";
|
|
6
5
|
import type { ExerciseProviderNoImageProps } from './ExerciseProviderNoImage';
|
|
7
6
|
/**
|
|
@@ -18,16 +17,11 @@ EA extends Record<string, unknown> = {}> = MaterialExerciseCommonComponent<EP, E
|
|
|
18
17
|
*/
|
|
19
18
|
export interface MaterialExerciseCommonApis {
|
|
20
19
|
sendTextToRunner: MaterialExerciseCommonApiSendTextToTerminal;
|
|
21
|
-
getMonacoEditorApis: MaterialExerciseCommonApiGetMonacoEditorApis;
|
|
22
20
|
}
|
|
23
21
|
/**
|
|
24
22
|
* Send text to terminal.
|
|
25
23
|
*/
|
|
26
24
|
export declare type MaterialExerciseCommonApiSendTextToTerminal = (text: string) => void;
|
|
27
|
-
/**
|
|
28
|
-
* Get monaco editor apis.
|
|
29
|
-
*/
|
|
30
|
-
export declare type MaterialExerciseCommonApiGetMonacoEditorApis = () => MonacoEditorApis | null;
|
|
31
25
|
/**
|
|
32
26
|
* [External]
|
|
33
27
|
* Common exposed props for `MaterialExercise*` components.
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { FormattedMessage } from 'react-intl';
|
|
4
|
+
import { getGlobalOrganizationGet } from '@elice/api-client';
|
|
4
5
|
import { Button, Tooltip, Flex, BadgeNext, Text, Hspace, IconButton, Icon } from '@elice/blocks';
|
|
5
6
|
import { eilMathsignMultiplyBasic, eilArrowRightwardsBasic } from '@elice/icons';
|
|
6
|
-
import {
|
|
7
|
+
import { useMaterialConfig } from '@elice/material-shared-utils';
|
|
7
8
|
import styled from 'styled-components';
|
|
8
|
-
import { exerciseAibotInfoEnableState } from '../context/recoil.js';
|
|
9
|
-
import '../context/context.js';
|
|
10
|
-
import '../context/recoilTypes.js';
|
|
11
|
-
import '../context/subjects.js';
|
|
12
|
-
import '../context/ExerciseProvider.js';
|
|
13
9
|
|
|
14
10
|
var ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY = 'elice-material-exercise-aibot-tooltip-hidden';
|
|
15
11
|
var ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE = 'true';
|
|
@@ -17,20 +13,34 @@ var StyledControllerButton = styled(Button).withConfig({
|
|
|
17
13
|
componentId: "sc-10grd0k-0"
|
|
18
14
|
})(["position:relative;transition:none;"]);
|
|
19
15
|
var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (props, ref) {
|
|
16
|
+
var _useMaterialConfig = useMaterialConfig(),
|
|
17
|
+
orgNameShort = _useMaterialConfig.orgNameShort;
|
|
20
18
|
var _React$useState = React.useState(false),
|
|
21
19
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
22
20
|
isTooltipHidden = _React$useState2[0],
|
|
23
21
|
setIsTooltipHidden = _React$useState2[1];
|
|
24
|
-
var isAibotInfoEnabled = useRecoilValue(exerciseAibotInfoEnableState);
|
|
25
|
-
//
|
|
26
22
|
//
|
|
27
23
|
//
|
|
24
|
+
// Get ai info from organization and check all resovle below conditions.
|
|
25
|
+
// - isEnable is true.
|
|
26
|
+
// - quotaPerDay is upper than zero.
|
|
27
|
+
// - tooltip hidden is false.
|
|
28
28
|
React.useEffect(function () {
|
|
29
29
|
var isTooltipHidden = sessionStorage.getItem(ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY) === ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE;
|
|
30
30
|
if (isTooltipHidden) {
|
|
31
31
|
setIsTooltipHidden(true);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
+
getGlobalOrganizationGet({
|
|
35
|
+
organizationNameShort: orgNameShort
|
|
36
|
+
}).then(function (res) {
|
|
37
|
+
var aibotInfo = res.organization.aibotInfo;
|
|
38
|
+
var isHidden = !aibotInfo.isEnabled || aibotInfo.quotaPerDay <= 0;
|
|
39
|
+
setIsTooltipHidden(isHidden);
|
|
40
|
+
}).catch(function () {
|
|
41
|
+
setIsTooltipHidden(true);
|
|
42
|
+
});
|
|
43
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
34
44
|
}, []);
|
|
35
45
|
//
|
|
36
46
|
//
|
|
@@ -48,18 +58,18 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
|
|
|
48
58
|
size: "tiny",
|
|
49
59
|
bold: true
|
|
50
60
|
}, "NEW")), React.createElement(Hspace, {
|
|
51
|
-
width: 0.
|
|
61
|
+
width: 0.25
|
|
52
62
|
}), React.createElement(Text, {
|
|
53
|
-
role: "
|
|
63
|
+
role: "gray7",
|
|
54
64
|
size: "small",
|
|
55
65
|
bold: true
|
|
56
66
|
}, React.createElement(FormattedMessage, {
|
|
57
67
|
id: "exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp"
|
|
58
68
|
})), React.createElement(Hspace, {
|
|
59
|
-
width: 0.
|
|
69
|
+
width: 0.25
|
|
60
70
|
}), React.createElement(IconButton, {
|
|
61
71
|
size: "tiny",
|
|
62
|
-
role: "
|
|
72
|
+
role: "gray6",
|
|
63
73
|
hasPadding: false,
|
|
64
74
|
border: false,
|
|
65
75
|
icon: eilMathsignMultiplyBasic,
|
|
@@ -69,7 +79,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
|
|
|
69
79
|
}
|
|
70
80
|
}));
|
|
71
81
|
};
|
|
72
|
-
return
|
|
82
|
+
return React.createElement(Tooltip, {
|
|
73
83
|
placement: "top",
|
|
74
84
|
dark: false,
|
|
75
85
|
visible: !isTooltipHidden,
|
|
@@ -84,7 +94,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
|
|
|
84
94
|
iconAlign: "right"
|
|
85
95
|
}), React.createElement(FormattedMessage, {
|
|
86
96
|
id: "exerciseRunner.controller.buttonGroup.button.helpRequest"
|
|
87
|
-
})))
|
|
97
|
+
})));
|
|
88
98
|
});
|
|
89
99
|
|
|
90
100
|
export { ExerciseRunnerControllerCodeHelpRequestButton as default };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"
|
|
1
|
+
var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"Help me","exerciseRunner.controller.buttonGroup.button.run":"Run","exerciseRunner.controller.buttonGroup.button.stop":"Stop","exerciseRunner.controller.buttonGroup.button.submit":"Submit","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"Exercise without submission","exerciseRunner.controller.buttonGroup.button.syncRequest":"Sync code","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"A function to get help from AI has been added.","exerciseRunner.controller.runningInfo.error.fetch":"An error occurred while fetching running info","exerciseRunner.controller.runningInfo.lastRunningDatetime":"Last running datetime","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"Last submit datetime","exerciseRunner.controller.runningInfo.lastSubmitScore":"Last submit score","exerciseRunner.controller.runningInfo.score":"{score}","exerciseRunner.controller.statusMessage.closed":"Editor disconnected","exerciseRunner.controller.statusMessage.connecting":"Connecting to editor...","exerciseRunner.controller.statusMessage.open":"Editor connected","exerciseRunner.controller.timer.runningRemainingTime":"Remaining: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"OK","exerciseRunner.submitErrorDialog.action.reload":"Reload page","exerciseRunner.submitErrorDialog.body.commonError":"An error occurred while running the code.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"You have exceeded the allowed number of lab submissions.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"The exercise image has been updated.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.networkError":"An error occurred while running the code.\nPlease refresh and try again.\nIf the problem persists, please check the network status.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"This exercise is not allowed to be submitted.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"The exercise room is being prepared.\nPlease try again later.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"The exercise room is running.\nPlease wait a moment.","exerciseRunner.submitErrorDialog.body.unknown":"An error occurred while running the code.\nPlease try again later.","exerciseRunner.submitErrorDialog.title":"Unable to run the code"};
|
|
2
2
|
|
|
3
3
|
export { phrasesEn as default };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"
|
|
1
|
+
var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"도와주세요","exerciseRunner.controller.buttonGroup.button.run":"실행","exerciseRunner.controller.buttonGroup.button.stop":"정지","exerciseRunner.controller.buttonGroup.button.submit":"제출","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"실행만 가능한 실습입니다.","exerciseRunner.controller.buttonGroup.button.syncRequest":"코드 동기화","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"AI에게 도움받기 기능이 추가되었어요.","exerciseRunner.controller.runningInfo.error.fetch":"최종 실행 내역을 가져오는데 문제가 발생하였습니다.","exerciseRunner.controller.runningInfo.lastRunningDatetime":"최종 실행 시간","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"최종 제출 시간","exerciseRunner.controller.runningInfo.lastSubmitScore":"최종 제출 점수","exerciseRunner.controller.runningInfo.score":"{score} 점","exerciseRunner.controller.statusMessage.closed":"에디터 연결 끊김","exerciseRunner.controller.statusMessage.connecting":"에디터 연결 중...","exerciseRunner.controller.statusMessage.open":"에디터 연결됨","exerciseRunner.controller.timer.runningRemainingTime":"실행 제한시간: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"확인","exerciseRunner.submitErrorDialog.action.reload":"새로고침","exerciseRunner.submitErrorDialog.body.commonError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"실습 제출 허용 횟수를 초과했습니다.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"실습환경이 업데이트 되었습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.networkError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.\n문제가 계속되면 네트워크 상태를 확인해주세요.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"제출이 허용되지 않은 실습입니다.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"실습환경이 준비 중입니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"실습을 실행하고 있습니다.\n잠시만 기다려주세요.","exerciseRunner.submitErrorDialog.body.unknown":"코드 실행 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.title":"실습을 실행할 수 없습니다"};
|
|
2
2
|
|
|
3
3
|
export { phrasesKo as default };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elice/material-exercise",
|
|
3
|
-
"version": "1.230516.0
|
|
3
|
+
"version": "1.230516.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",
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
"clean": "del-cli \"es/*\" \"cjs/*\" \"dist/*\""
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@elice/api-client": "^1.
|
|
33
|
-
"@elice/blocks": "^1.
|
|
32
|
+
"@elice/api-client": "^1.230413.0",
|
|
33
|
+
"@elice/blocks": "^1.220803.0",
|
|
34
34
|
"@elice/design-tokens": "^1.220803.0",
|
|
35
35
|
"@elice/icons": "^1.220803.0",
|
|
36
36
|
"@elice/markdown": "^1.220803.0",
|
|
37
37
|
"@elice/material-shared-types": "*",
|
|
38
38
|
"@elice/material-shared-utils": "*",
|
|
39
|
-
"@elice/types": "1.
|
|
39
|
+
"@elice/types": "^1.230417.0",
|
|
40
40
|
"@elice/websocket": "^1.220803.0",
|
|
41
41
|
"humps": "^2.0.1",
|
|
42
42
|
"lodash": "^4.17.21",
|
|
@@ -74,14 +74,14 @@
|
|
|
74
74
|
"xterm-addon-fit": "^0.5.0"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@elice/api-client": "^1.
|
|
78
|
-
"@elice/blocks": "^1.
|
|
77
|
+
"@elice/api-client": "^1.230413.0",
|
|
78
|
+
"@elice/blocks": "^1.220803.0",
|
|
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.
|
|
84
|
-
"@elice/types": "1.
|
|
82
|
+
"@elice/material-shared-types": "1.230516.0",
|
|
83
|
+
"@elice/material-shared-utils": "1.230516.0",
|
|
84
|
+
"@elice/types": "^1.230417.0",
|
|
85
85
|
"@elice/websocket": "^1.220803.0",
|
|
86
86
|
"@types/classnames": "^2.3.1",
|
|
87
87
|
"@types/color": "^3.0.3",
|
|
@@ -102,5 +102,5 @@
|
|
|
102
102
|
"recoil": "^0.6.1",
|
|
103
103
|
"styled-components": "^5.2.0"
|
|
104
104
|
},
|
|
105
|
-
"gitHead": "
|
|
105
|
+
"gitHead": "25ce2729a6fe7ea386fb77736edbab0590ae44a0"
|
|
106
106
|
}
|