@elice/material-quiz 1.220803.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.
Files changed (160) hide show
  1. package/README.md +3 -0
  2. package/cjs/components/eb-sortable/EbDraggable.d.ts +18 -0
  3. package/cjs/components/eb-sortable/EbDraggable.js +112 -0
  4. package/cjs/components/eb-sortable/EbDroppable.d.ts +13 -0
  5. package/cjs/components/eb-sortable/EbDroppable.js +60 -0
  6. package/cjs/components/eb-sortable/EbSortable.d.ts +17 -0
  7. package/cjs/components/material-quiz/MaterialQuiz.d.ts +4 -0
  8. package/cjs/components/material-quiz/MaterialQuiz.i18n.d.ts +25 -0
  9. package/cjs/components/material-quiz/MaterialQuiz.i18n.js +55 -0
  10. package/cjs/components/material-quiz/MaterialQuiz.js +114 -0
  11. package/cjs/components/material-quiz/MaterialQuizAnswerExplanation.d.ts +3 -0
  12. package/cjs/components/material-quiz/MaterialQuizAnswerExplanation.js +55 -0
  13. package/cjs/components/material-quiz/MaterialQuizError.d.ts +3 -0
  14. package/cjs/components/material-quiz/MaterialQuizInfo.d.ts +3 -0
  15. package/cjs/components/material-quiz/MaterialQuizInfo.js +74 -0
  16. package/cjs/components/material-quiz/MaterialQuizSelectMultiple.d.ts +3 -0
  17. package/cjs/components/material-quiz/MaterialQuizSelectMultiple.js +203 -0
  18. package/cjs/components/material-quiz/MaterialQuizSelectMultipleOrder.d.ts +3 -0
  19. package/cjs/components/material-quiz/MaterialQuizSelectMultipleOrder.js +468 -0
  20. package/cjs/components/material-quiz/MaterialQuizSelectOne.d.ts +3 -0
  21. package/cjs/components/material-quiz/MaterialQuizSelectOne.js +191 -0
  22. package/cjs/components/material-quiz/MaterialQuizShimmer.d.ts +3 -0
  23. package/cjs/components/material-quiz/MaterialQuizShimmer.js +61 -0
  24. package/cjs/components/material-quiz/MaterialQuizText.d.ts +3 -0
  25. package/cjs/components/material-quiz/MaterialQuizText.js +181 -0
  26. package/cjs/components/material-quiz/QuizResultBadge.d.ts +7 -0
  27. package/cjs/components/material-quiz/QuizResultBadge.js +48 -0
  28. package/cjs/components/material-quiz/QuizSubmitStatusText.d.ts +7 -0
  29. package/cjs/components/material-quiz/QuizSubmitStatusText.js +38 -0
  30. package/cjs/components/material-quiz/context/MaterialQuizContext.d.ts +31 -0
  31. package/cjs/components/material-quiz/context/MaterialQuizContext.js +134 -0
  32. package/cjs/components/material-quiz/index.d.ts +3 -0
  33. package/cjs/components/material-quiz-edit/MaterialQuizEdit.d.ts +25 -0
  34. package/cjs/components/material-quiz-edit/MaterialQuizEdit.js +91 -0
  35. package/cjs/components/material-quiz-edit/MaterialQuizEditContent.d.ts +3 -0
  36. package/cjs/components/material-quiz-edit/MaterialQuizEditContent.js +463 -0
  37. package/cjs/components/material-quiz-edit/context.d.ts +6 -0
  38. package/cjs/components/material-quiz-edit/context.js +15 -0
  39. package/cjs/components/material-quiz-edit/index.d.ts +2 -0
  40. package/cjs/components/material-quiz-edit/locales.d.ts +34 -0
  41. package/cjs/components/material-quiz-edit/locales.js +73 -0
  42. package/cjs/components/material-quiz-edit/options/OptionSelectMultiple.d.ts +3 -0
  43. package/cjs/components/material-quiz-edit/options/OptionSelectMultiple.js +204 -0
  44. package/cjs/components/material-quiz-edit/options/OptionSelectMultipleOrder.d.ts +3 -0
  45. package/cjs/components/material-quiz-edit/options/OptionSelectMultipleOrder.js +205 -0
  46. package/cjs/components/material-quiz-edit/options/OptionSelectOne.d.ts +3 -0
  47. package/cjs/components/material-quiz-edit/options/OptionSelectOne.js +207 -0
  48. package/cjs/components/material-quiz-edit/options/OptionText.d.ts +3 -0
  49. package/cjs/components/material-quiz-edit/options/OptionText.js +99 -0
  50. package/cjs/components/material-quiz-edit/utils/editValue.d.ts +15 -0
  51. package/cjs/components/material-quiz-edit/utils/editValue.js +37 -0
  52. package/cjs/components/material-quiz-edit/utils/randomId.d.ts +4 -0
  53. package/cjs/components/material-quiz-edit/utils/randomId.js +12 -0
  54. package/cjs/components/shared/QuestionBox.d.ts +16 -0
  55. package/cjs/components/shared/QuestionBox.js +111 -0
  56. package/cjs/components/shared/QuizDraggbleDroppedOption.d.ts +12 -0
  57. package/cjs/components/shared/QuizDraggbleDroppedOption.js +31 -0
  58. package/cjs/components/shared/QuizDraggbleDummyOption.d.ts +8 -0
  59. package/cjs/components/shared/QuizDraggbleDummyOption.js +36 -0
  60. package/cjs/components/shared/QuizDraggbleOption.d.ts +14 -0
  61. package/cjs/components/shared/QuizDraggbleOption.js +191 -0
  62. package/cjs/components/shared/StyledMarkdown.d.ts +3 -0
  63. package/cjs/components/shared/StyledMarkdown.js +14 -0
  64. package/cjs/components/shared/index.d.ts +7 -0
  65. package/cjs/components/shared/question-checkbox/QuestionCheckbox.d.ts +8 -0
  66. package/cjs/components/shared/question-checkbox/QuestionCheckbox.js +26 -0
  67. package/cjs/components/shared/question-checkbox/QuestionCheckboxContext.d.ts +9 -0
  68. package/cjs/components/shared/question-checkbox/QuestionCheckboxContext.js +42 -0
  69. package/cjs/components/shared/question-checkbox/QuestionCheckboxOption.d.ts +9 -0
  70. package/cjs/components/shared/question-checkbox/QuestionCheckboxOption.js +188 -0
  71. package/cjs/components/shared/question-radio/QuestionRadio.d.ts +8 -0
  72. package/cjs/components/shared/question-radio/QuestionRadio.js +26 -0
  73. package/cjs/components/shared/question-radio/QuestionRadioContext.d.ts +9 -0
  74. package/cjs/components/shared/question-radio/QuestionRadioContext.js +42 -0
  75. package/cjs/components/shared/question-radio/QuestionRadioOption.d.ts +9 -0
  76. package/cjs/components/shared/question-radio/QuestionRadioOption.js +156 -0
  77. package/cjs/helpers/index.d.ts +50 -0
  78. package/cjs/helpers/index.js +86 -0
  79. package/cjs/index.d.ts +3 -0
  80. package/cjs/index.js +27 -0
  81. package/es/components/eb-sortable/EbDraggable.d.ts +18 -0
  82. package/es/components/eb-sortable/EbDraggable.js +105 -0
  83. package/es/components/eb-sortable/EbDroppable.d.ts +13 -0
  84. package/es/components/eb-sortable/EbDroppable.js +53 -0
  85. package/es/components/eb-sortable/EbSortable.d.ts +17 -0
  86. package/es/components/material-quiz/MaterialQuiz.d.ts +4 -0
  87. package/es/components/material-quiz/MaterialQuiz.i18n.d.ts +25 -0
  88. package/es/components/material-quiz/MaterialQuiz.i18n.js +50 -0
  89. package/es/components/material-quiz/MaterialQuiz.js +106 -0
  90. package/es/components/material-quiz/MaterialQuizAnswerExplanation.d.ts +3 -0
  91. package/es/components/material-quiz/MaterialQuizAnswerExplanation.js +48 -0
  92. package/es/components/material-quiz/MaterialQuizError.d.ts +3 -0
  93. package/es/components/material-quiz/MaterialQuizInfo.d.ts +3 -0
  94. package/es/components/material-quiz/MaterialQuizInfo.js +68 -0
  95. package/es/components/material-quiz/MaterialQuizSelectMultiple.d.ts +3 -0
  96. package/es/components/material-quiz/MaterialQuizSelectMultiple.js +197 -0
  97. package/es/components/material-quiz/MaterialQuizSelectMultipleOrder.d.ts +3 -0
  98. package/es/components/material-quiz/MaterialQuizSelectMultipleOrder.js +461 -0
  99. package/es/components/material-quiz/MaterialQuizSelectOne.d.ts +3 -0
  100. package/es/components/material-quiz/MaterialQuizSelectOne.js +185 -0
  101. package/es/components/material-quiz/MaterialQuizShimmer.d.ts +3 -0
  102. package/es/components/material-quiz/MaterialQuizShimmer.js +54 -0
  103. package/es/components/material-quiz/MaterialQuizText.d.ts +3 -0
  104. package/es/components/material-quiz/MaterialQuizText.js +174 -0
  105. package/es/components/material-quiz/QuizResultBadge.d.ts +7 -0
  106. package/es/components/material-quiz/QuizResultBadge.js +42 -0
  107. package/es/components/material-quiz/QuizSubmitStatusText.d.ts +7 -0
  108. package/es/components/material-quiz/QuizSubmitStatusText.js +32 -0
  109. package/es/components/material-quiz/context/MaterialQuizContext.d.ts +31 -0
  110. package/es/components/material-quiz/context/MaterialQuizContext.js +124 -0
  111. package/es/components/material-quiz/index.d.ts +3 -0
  112. package/es/components/material-quiz-edit/MaterialQuizEdit.d.ts +25 -0
  113. package/es/components/material-quiz-edit/MaterialQuizEdit.js +86 -0
  114. package/es/components/material-quiz-edit/MaterialQuizEditContent.d.ts +3 -0
  115. package/es/components/material-quiz-edit/MaterialQuizEditContent.js +456 -0
  116. package/es/components/material-quiz-edit/context.d.ts +6 -0
  117. package/es/components/material-quiz-edit/context.js +6 -0
  118. package/es/components/material-quiz-edit/index.d.ts +2 -0
  119. package/es/components/material-quiz-edit/locales.d.ts +34 -0
  120. package/es/components/material-quiz-edit/locales.js +68 -0
  121. package/es/components/material-quiz-edit/options/OptionSelectMultiple.d.ts +3 -0
  122. package/es/components/material-quiz-edit/options/OptionSelectMultiple.js +197 -0
  123. package/es/components/material-quiz-edit/options/OptionSelectMultipleOrder.d.ts +3 -0
  124. package/es/components/material-quiz-edit/options/OptionSelectMultipleOrder.js +198 -0
  125. package/es/components/material-quiz-edit/options/OptionSelectOne.d.ts +3 -0
  126. package/es/components/material-quiz-edit/options/OptionSelectOne.js +200 -0
  127. package/es/components/material-quiz-edit/options/OptionText.d.ts +3 -0
  128. package/es/components/material-quiz-edit/options/OptionText.js +93 -0
  129. package/es/components/material-quiz-edit/utils/editValue.d.ts +15 -0
  130. package/es/components/material-quiz-edit/utils/editValue.js +32 -0
  131. package/es/components/material-quiz-edit/utils/randomId.d.ts +4 -0
  132. package/es/components/material-quiz-edit/utils/randomId.js +8 -0
  133. package/es/components/shared/QuestionBox.d.ts +16 -0
  134. package/es/components/shared/QuestionBox.js +101 -0
  135. package/es/components/shared/QuizDraggbleDroppedOption.d.ts +12 -0
  136. package/es/components/shared/QuizDraggbleDroppedOption.js +25 -0
  137. package/es/components/shared/QuizDraggbleDummyOption.d.ts +8 -0
  138. package/es/components/shared/QuizDraggbleDummyOption.js +29 -0
  139. package/es/components/shared/QuizDraggbleOption.d.ts +14 -0
  140. package/es/components/shared/QuizDraggbleOption.js +184 -0
  141. package/es/components/shared/StyledMarkdown.d.ts +3 -0
  142. package/es/components/shared/StyledMarkdown.js +8 -0
  143. package/es/components/shared/index.d.ts +7 -0
  144. package/es/components/shared/question-checkbox/QuestionCheckbox.d.ts +8 -0
  145. package/es/components/shared/question-checkbox/QuestionCheckbox.js +19 -0
  146. package/es/components/shared/question-checkbox/QuestionCheckboxContext.d.ts +9 -0
  147. package/es/components/shared/question-checkbox/QuestionCheckboxContext.js +33 -0
  148. package/es/components/shared/question-checkbox/QuestionCheckboxOption.d.ts +9 -0
  149. package/es/components/shared/question-checkbox/QuestionCheckboxOption.js +181 -0
  150. package/es/components/shared/question-radio/QuestionRadio.d.ts +8 -0
  151. package/es/components/shared/question-radio/QuestionRadio.js +19 -0
  152. package/es/components/shared/question-radio/QuestionRadioContext.d.ts +9 -0
  153. package/es/components/shared/question-radio/QuestionRadioContext.js +33 -0
  154. package/es/components/shared/question-radio/QuestionRadioOption.d.ts +9 -0
  155. package/es/components/shared/question-radio/QuestionRadioOption.js +149 -0
  156. package/es/helpers/index.d.ts +50 -0
  157. package/es/helpers/index.js +78 -0
  158. package/es/index.d.ts +3 -0
  159. package/es/index.js +10 -0
  160. package/package.json +75 -0
@@ -0,0 +1,463 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var reactHookForm = require('react-hook-form');
5
+ var reactIntl = require('react-intl');
6
+ var reactTransitionGroup = require('react-transition-group');
7
+ var blocks = require('@elice/blocks');
8
+ var markdown = require('@elice/markdown');
9
+ var types = require('@elice/types');
10
+ var styled = require('styled-components');
11
+ var OptionSelectMultiple = require('./options/OptionSelectMultiple.js');
12
+ var OptionSelectMultipleOrder = require('./options/OptionSelectMultipleOrder.js');
13
+ var OptionSelectOne = require('./options/OptionSelectOne.js');
14
+ var OptionText = require('./options/OptionText.js');
15
+ var randomId = require('./utils/randomId.js');
16
+ var context = require('./context.js');
17
+
18
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
+
20
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
22
+
23
+ const MIN_TEXT_LENGTH = 1;
24
+ const MAX_TEXT_LENGTH = 128;
25
+ const StyledQuizOptionTypeSelectWrap = styled__default["default"].div.withConfig({
26
+ componentId: "sc-1cf4b99-0"
27
+ })(["display:flex;max-width:12rem;"]);
28
+
29
+ const MaterialQuizEditContent = () => {
30
+ const intl = reactIntl.useIntl();
31
+ const {
32
+ disabled,
33
+ onFileUploadRequest
34
+ } = context.useMaterialQuizEditContext();
35
+ const {
36
+ control,
37
+ watch,
38
+ setValue
39
+ } = reactHookForm.useFormContext();
40
+ const [watchedOptionType, watchedOptionInfo, watchedAnswerInfo, watchedAnswerHint, watchedExplanationInfo, watchedIsAutoGrade] = watch(['optionType', 'optionInfo', 'answerInfo', 'answerHint', 'explanationInfo', 'isAutoGrade']); //
41
+ // Change `optionInfo` according to `optionType`.
42
+ //
43
+
44
+ React__default["default"].useEffect(() => {
45
+ const get = () => {
46
+ switch (watchedOptionType) {
47
+ case types.enums.QuizOptionType.SelectOne:
48
+ case types.enums.QuizOptionType.SelectMultiple:
49
+ case types.enums.QuizOptionType.SelectMultipleOrder:
50
+ return watchedOptionInfo.length > 0 ? watchedOptionInfo : // add default option info
51
+ [{
52
+ id: randomId.createRandomId(),
53
+ value: intl.formatMessage({
54
+ id: 'common.option'
55
+ }, {
56
+ number: 1
57
+ })
58
+ }, {
59
+ id: randomId.createRandomId(),
60
+ value: intl.formatMessage({
61
+ id: 'common.option'
62
+ }, {
63
+ number: 2
64
+ })
65
+ }];
66
+
67
+ case types.enums.QuizOptionType.Text:
68
+ return [];
69
+
70
+ default:
71
+ return [];
72
+ }
73
+ };
74
+
75
+ setValue('optionInfo', get());
76
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ [watchedOptionType, setValue, intl]); //
78
+ // Change `answerInfo` according to `optionType`.
79
+ //
80
+
81
+ React__default["default"].useEffect(() => {
82
+ const get = () => {
83
+ switch (watchedOptionType) {
84
+ case types.enums.QuizOptionType.SelectOne:
85
+ return Array.isArray(watchedAnswerInfo) ? // get first option
86
+ watchedAnswerInfo.slice(0, 1) : [0];
87
+
88
+ case types.enums.QuizOptionType.SelectMultiple:
89
+ case types.enums.QuizOptionType.SelectMultipleOrder:
90
+ return Array.isArray(watchedAnswerInfo) ? watchedAnswerInfo : [0];
91
+
92
+ case types.enums.QuizOptionType.Text:
93
+ return typeof watchedAnswerInfo === 'string' ? watchedAnswerInfo : '';
94
+
95
+ default:
96
+ return [];
97
+ }
98
+ };
99
+
100
+ setValue('answerInfo', get());
101
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
102
+ [watchedOptionType, setValue, intl]); //
103
+ // Change `answerHint` according to `optionType`.
104
+ //
105
+
106
+ React__default["default"].useEffect(() => {
107
+ const get = () => {
108
+ switch (watchedOptionType) {
109
+ case types.enums.QuizOptionType.SelectOne:
110
+ case types.enums.QuizOptionType.SelectMultiple:
111
+ case types.enums.QuizOptionType.SelectMultipleOrder:
112
+ return null;
113
+
114
+ case types.enums.QuizOptionType.Text:
115
+ return watchedAnswerHint !== null && watchedAnswerHint !== void 0 ? watchedAnswerHint : '';
116
+
117
+ default:
118
+ return null;
119
+ }
120
+ };
121
+
122
+ setValue('answerHint', get());
123
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
124
+ [watchedOptionType, setValue, intl]); //
125
+ // Change `isAutoGrade` according to `optionType`.
126
+ //
127
+
128
+ React__default["default"].useEffect(() => {
129
+ const get = () => {
130
+ switch (watchedOptionType) {
131
+ case types.enums.QuizOptionType.SelectOne:
132
+ case types.enums.QuizOptionType.SelectMultiple:
133
+ case types.enums.QuizOptionType.SelectMultipleOrder:
134
+ return true;
135
+
136
+ case types.enums.QuizOptionType.Text:
137
+ return typeof watchedIsAutoGrade === 'boolean' ? watchedIsAutoGrade : true;
138
+
139
+ default:
140
+ return true;
141
+ }
142
+ };
143
+
144
+ setValue('isAutoGrade', get());
145
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
146
+ [watchedOptionType, setValue, intl]);
147
+ /**
148
+ * Input of option info and answer info,
149
+ * according to option type.
150
+ */
151
+
152
+ const Option = React__default["default"].useMemo(() => {
153
+ switch (watchedOptionType) {
154
+ case types.enums.QuizOptionType.SelectOne:
155
+ return OptionSelectOne;
156
+
157
+ case types.enums.QuizOptionType.SelectMultiple:
158
+ return OptionSelectMultiple;
159
+
160
+ case types.enums.QuizOptionType.SelectMultipleOrder:
161
+ return OptionSelectMultipleOrder;
162
+
163
+ case types.enums.QuizOptionType.Text:
164
+ return OptionText;
165
+
166
+ default:
167
+ return React__default["default"].Fragment;
168
+ }
169
+ }, [watchedOptionType]);
170
+ /**
171
+ * Render input for quiz title.
172
+ */
173
+
174
+ const renderQuestionTitleInput = () => {
175
+ return React__default["default"].createElement(blocks.FormInputVerticalLayout, {
176
+ label: React__default["default"].createElement(blocks.Label, {
177
+ size: "small",
178
+ required: true
179
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
180
+ id: "content.title"
181
+ })),
182
+ input: React__default["default"].createElement(reactHookForm.Controller, {
183
+ control: control,
184
+ name: "questionTitle",
185
+ rules: {
186
+ required: {
187
+ value: true,
188
+ message: intl.formatMessage({
189
+ id: 'content.title.errorMessage.required'
190
+ })
191
+ },
192
+ minLength: {
193
+ value: MIN_TEXT_LENGTH,
194
+ message: intl.formatMessage({
195
+ id: 'common.errorMessage.range'
196
+ }, {
197
+ min: MIN_TEXT_LENGTH,
198
+ max: MAX_TEXT_LENGTH
199
+ })
200
+ },
201
+ maxLength: {
202
+ value: MAX_TEXT_LENGTH,
203
+ message: intl.formatMessage({
204
+ id: 'common.errorMessage.range'
205
+ }, {
206
+ min: MIN_TEXT_LENGTH,
207
+ max: MAX_TEXT_LENGTH
208
+ })
209
+ }
210
+ },
211
+ render: ({
212
+ field,
213
+ fieldState
214
+ }) => {
215
+ var _a;
216
+
217
+ return React__default["default"].createElement(blocks.Input, Object.assign({
218
+ size: "small",
219
+ width: "full",
220
+ minLength: MIN_TEXT_LENGTH,
221
+ maxLength: MAX_TEXT_LENGTH,
222
+ placeholder: intl.formatMessage({
223
+ id: 'content.title.placeholder'
224
+ }),
225
+ invalid: fieldState.invalid,
226
+ invalidText: (_a = fieldState.error) === null || _a === void 0 ? void 0 : _a.message
227
+ }, field));
228
+ }
229
+ })
230
+ });
231
+ };
232
+ /**
233
+ * Render input for quiz description.
234
+ */
235
+
236
+
237
+ const renderQuestionDescriptionInput = () => {
238
+ return React__default["default"].createElement(blocks.FormInputVerticalLayout, {
239
+ label: React__default["default"].createElement(blocks.Label, {
240
+ size: "small"
241
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
242
+ id: "content.description.title"
243
+ })),
244
+ input: React__default["default"].createElement(reactHookForm.Controller, {
245
+ control: control,
246
+ name: "questionDescription",
247
+ render: ({
248
+ field
249
+ }) => React__default["default"].createElement(markdown.MarkdownEditor, Object.assign({
250
+ enableFooter: true,
251
+ placeholder: intl.formatMessage({
252
+ id: 'content.description.placeholder'
253
+ }),
254
+ onFileUploadRequest: onFileUploadRequest
255
+ }, field))
256
+ })
257
+ });
258
+ };
259
+ /**
260
+ * Render input of option type, option info and answer info.
261
+ */
262
+
263
+
264
+ const renderOptionInput = () => {
265
+ return React__default["default"].createElement(blocks.FormInputVerticalLayout, {
266
+ label: React__default["default"].createElement(blocks.Label, {
267
+ size: "small",
268
+ required: true
269
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
270
+ id: "content.option.title"
271
+ })),
272
+ input: React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(reactHookForm.Controller, {
273
+ control: control,
274
+ name: "optionType",
275
+ render: ({
276
+ field
277
+ }) => React__default["default"].createElement(blocks.Tooltip, {
278
+ title: disabled ? intl.formatMessage({
279
+ id: 'content.option.tooltip.disabled'
280
+ }) : undefined,
281
+ placement: "top-end"
282
+ }, React__default["default"].createElement(StyledQuizOptionTypeSelectWrap, null, React__default["default"].createElement(blocks.Select, Object.assign({
283
+ size: "small",
284
+ width: "small",
285
+ readOnly: disabled
286
+ }, field, {
287
+ onChange: v => field.onChange(Number(v))
288
+ }), React__default["default"].createElement("option", {
289
+ value: types.enums.QuizOptionType.SelectOne,
290
+ children: intl.formatMessage({
291
+ id: 'content.option.select.items.selectOne'
292
+ })
293
+ }), React__default["default"].createElement("option", {
294
+ value: types.enums.QuizOptionType.SelectMultiple,
295
+ children: intl.formatMessage({
296
+ id: 'content.option.select.items.selectMultiple'
297
+ })
298
+ }), React__default["default"].createElement("option", {
299
+ value: types.enums.QuizOptionType.SelectMultipleOrder,
300
+ children: intl.formatMessage({
301
+ id: 'content.option.select.items.selectMultipleOrder'
302
+ })
303
+ }), React__default["default"].createElement("option", {
304
+ value: types.enums.QuizOptionType.Text,
305
+ children: intl.formatMessage({
306
+ id: 'content.option.select.items.text'
307
+ })
308
+ }))))
309
+ }), React__default["default"].createElement(reactTransitionGroup.Transition, {
310
+ in: watchedOptionType === types.enums.QuizOptionType.SelectMultipleOrder,
311
+ timeout: 0,
312
+ mountOnEnter: true,
313
+ unmountOnExit: true
314
+ }, React__default["default"].createElement(blocks.StatusText, {
315
+ role: "description",
316
+ preWrap: true
317
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
318
+ id: "content.option.statusText.dragNDrop"
319
+ }))), React__default["default"].createElement(blocks.Vspace, {
320
+ height: 0.5
321
+ }), React__default["default"].createElement(Option, null))
322
+ });
323
+ };
324
+ /**
325
+ * Input of answer hint.
326
+ */
327
+
328
+
329
+ const renderAnswerHintInput = () => {
330
+ if (watchedOptionType !== types.enums.QuizOptionType.Text) {
331
+ return null;
332
+ }
333
+
334
+ return React__default["default"].createElement(blocks.FormInputVerticalLayout, {
335
+ label: React__default["default"].createElement(blocks.Label, {
336
+ size: "small"
337
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
338
+ id: "content.answerHint.title"
339
+ })),
340
+ description: React__default["default"].createElement(blocks.Text, null, React__default["default"].createElement(reactIntl.FormattedMessage, {
341
+ id: "content.answerHint.description"
342
+ })),
343
+ input: React__default["default"].createElement(reactHookForm.Controller, {
344
+ control: control,
345
+ name: "answerHint",
346
+ rules: {
347
+ minLength: {
348
+ value: MIN_TEXT_LENGTH,
349
+ message: intl.formatMessage({
350
+ id: 'common.errorMessage.range'
351
+ }, {
352
+ min: MIN_TEXT_LENGTH,
353
+ max: MAX_TEXT_LENGTH
354
+ })
355
+ },
356
+ maxLength: {
357
+ value: MAX_TEXT_LENGTH,
358
+ message: intl.formatMessage({
359
+ id: 'common.errorMessage.range'
360
+ }, {
361
+ min: MIN_TEXT_LENGTH,
362
+ max: MAX_TEXT_LENGTH
363
+ })
364
+ }
365
+ },
366
+ render: ({
367
+ field,
368
+ fieldState
369
+ }) => {
370
+ var _a, _b;
371
+
372
+ return React__default["default"].createElement(blocks.Input, Object.assign({
373
+ size: "small",
374
+ width: "full",
375
+ minLength: MIN_TEXT_LENGTH,
376
+ maxLength: MAX_TEXT_LENGTH,
377
+ placeholder: intl.formatMessage({
378
+ id: 'content.answerHint.placeholder'
379
+ }),
380
+ invalid: fieldState.invalid,
381
+ invalidText: (_a = fieldState.error) === null || _a === void 0 ? void 0 : _a.message
382
+ }, field, {
383
+ value: (_b = field.value) !== null && _b !== void 0 ? _b : ''
384
+ }));
385
+ }
386
+ })
387
+ });
388
+ };
389
+ /**
390
+ * Input of explanation info.
391
+ */
392
+
393
+
394
+ const renderExplanationInfoInput = () => {
395
+ return React__default["default"].createElement(blocks.FormInputVerticalLayout, {
396
+ label: React__default["default"].createElement(blocks.Label, {
397
+ size: "small"
398
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
399
+ id: "content.explanationInfo.title"
400
+ })),
401
+ description: React__default["default"].createElement(blocks.Text, null, React__default["default"].createElement(reactIntl.FormattedMessage, {
402
+ id: "content.explanationInfo.description"
403
+ })),
404
+ input: React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(reactHookForm.Controller, {
405
+ control: control,
406
+ name: "explanationInfo.isEnabled",
407
+ render: ({
408
+ field
409
+ }) => React__default["default"].createElement(blocks.Checkbox, Object.assign({
410
+ size: "small"
411
+ }, field), React__default["default"].createElement(reactIntl.FormattedMessage, {
412
+ id: "content.explanationInfo.checkbox.label"
413
+ }))
414
+ }), React__default["default"].createElement(reactTransitionGroup.Transition, {
415
+ in: watchedExplanationInfo.isEnabled,
416
+ timeout: 0,
417
+ mountOnEnter: true,
418
+ unmountOnExit: true
419
+ }, React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(blocks.Vspace, {
420
+ height: 1
421
+ }), React__default["default"].createElement(reactHookForm.Controller, {
422
+ control: control,
423
+ name: "explanationInfo.value",
424
+ rules: {
425
+ required: {
426
+ value: true,
427
+ message: intl.formatMessage({
428
+ id: 'content.explanationInfo.textarea.placeholder'
429
+ })
430
+ }
431
+ },
432
+ render: ({
433
+ field,
434
+ fieldState
435
+ }) => {
436
+ var _a;
437
+
438
+ return React__default["default"].createElement(blocks.Flex, {
439
+ column: true
440
+ }, fieldState.invalid ? React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(blocks.StatusText, {
441
+ children: (_a = fieldState.error) === null || _a === void 0 ? void 0 : _a.message,
442
+ role: "danger"
443
+ }), React__default["default"].createElement(blocks.Vspace, {
444
+ height: 0.5
445
+ })) : null, React__default["default"].createElement(markdown.MarkdownEditor, Object.assign({
446
+ enableFooter: true,
447
+ placeholder: intl.formatMessage({
448
+ id: 'content.explanationInfo.textarea.errorMessage.required'
449
+ }),
450
+ onFileUploadRequest: onFileUploadRequest
451
+ }, field)));
452
+ }
453
+ }))))
454
+ });
455
+ }; //
456
+ //
457
+ //
458
+
459
+
460
+ return React__default["default"].createElement(React__default["default"].Fragment, null, renderQuestionTitleInput(), renderQuestionDescriptionInput(), renderOptionInput(), renderAnswerHintInput(), renderExplanationInfoInput());
461
+ };
462
+
463
+ module.exports = MaterialQuizEditContent;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { MaterialQuizEditProps } from './MaterialQuizEdit';
3
+ declare type MaterialQuizEditContextValue = Pick<MaterialQuizEditProps, 'disabled' | 'onFileUploadRequest'>;
4
+ declare const MaterialQuizEditContext: React.Context<MaterialQuizEditContextValue>;
5
+ export declare const useMaterialQuizEditContext: () => MaterialQuizEditContextValue;
6
+ export default MaterialQuizEditContext;
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
10
+
11
+ const MaterialQuizEditContext = React__default["default"].createContext(null);
12
+ const useMaterialQuizEditContext = () => React__default["default"].useContext(MaterialQuizEditContext);
13
+
14
+ exports["default"] = MaterialQuizEditContext;
15
+ exports.useMaterialQuizEditContext = useMaterialQuizEditContext;
@@ -0,0 +1,2 @@
1
+ export { default as MaterialQuizEdit } from './MaterialQuizEdit';
2
+ export type { MaterialQuizEditProps, MaterialQuizEditFormState, MaterialQuizEditValue, } from './MaterialQuizEdit';
@@ -0,0 +1,34 @@
1
+ export declare const en: {
2
+ 'common.option': string;
3
+ 'common.errorMessage.range': string;
4
+ 'content.title': string;
5
+ 'content.title.errorMessage.required': string;
6
+ 'content.title.placeholder': string;
7
+ 'content.description.title': string;
8
+ 'content.description.placeholder': string;
9
+ 'content.option.title': string;
10
+ 'content.option.tooltip.disabled': string;
11
+ 'content.option.select.items.selectOne': string;
12
+ 'content.option.select.items.selectMultiple': string;
13
+ 'content.option.select.items.selectMultipleOrder': string;
14
+ 'content.option.select.items.text': string;
15
+ 'content.option.statusText.dragNDrop': string;
16
+ 'content.option.errorMessage.required': string;
17
+ 'content.answerHint.title': string;
18
+ 'content.answerHint.description': string;
19
+ 'content.answerHint.placeholder': string;
20
+ 'content.explanationInfo.title': string;
21
+ 'content.explanationInfo.description': string;
22
+ 'content.explanationInfo.checkbox.label': string;
23
+ 'content.explanationInfo.textarea.placeholder': string;
24
+ 'content.explanationInfo.textarea.errorMessage.required': string;
25
+ 'option.common.select.errorMessage.required': string;
26
+ 'option.common.select.placeholder': string;
27
+ 'option.common.select.tooltip.minOptionInfoItem': string;
28
+ 'option.common.select.tooltip.maxOptionInfoItem': string;
29
+ 'option.common.select.addButton': string;
30
+ 'option.text.answerInfo.errorMessage.required': string;
31
+ 'option.text.answerInfo.hintText': string;
32
+ 'option.text.isAutoGrade.checkbox.label': string;
33
+ };
34
+ export declare const ko: typeof en;
@@ -0,0 +1,73 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const en = {
6
+ 'common.option': '옵션 {number}',
7
+ 'common.errorMessage.range': '{min} ~ {max}자 이내로 입력해주세요.',
8
+ 'content.title': '질문',
9
+ 'content.title.errorMessage.required': 'Please fill the question.',
10
+ 'content.title.placeholder': '문제의 질문을 입력해주세요.',
11
+ 'content.description.title': '문제 설명',
12
+ 'content.description.placeholder': '자세한 문제 설명이나 코드 혹은 이미지 등을 입력해주세요.',
13
+ 'content.option.title': '답안',
14
+ 'content.option.tooltip.disabled': '퀴즈가 공개된 상태이거나 문제를 제출한 학생이 존재하면\n수정이 불가능합니다.',
15
+ 'content.option.select.items.selectOne': '객관식 (단일 선택)',
16
+ 'content.option.select.items.selectMultiple': '객관식 (다중 선택)',
17
+ 'content.option.select.items.selectMultipleOrder': '드래그 앤 드롭',
18
+ 'content.option.select.items.text': '주관식',
19
+ 'content.option.statusText.dragNDrop': '보기를 입력한 후 정답 순서대로 클릭하세요.\n구성된 문제는 좌측 학습자료 탭에서 확인하실 수 있습니다.',
20
+ 'content.option.errorMessage.required': '답안을 선택해주세요.',
21
+ 'content.answerHint.title': '입력란 힌트 텍스트 지정',
22
+ 'content.answerHint.description': '답안을 입력할 입력란의 힌트 텍스트를 지정할 수 있습니다.',
23
+ 'content.answerHint.placeholder': '입력란 힌트 텍스트 입력',
24
+ 'content.explanationInfo.title': '해설 작성',
25
+ 'content.explanationInfo.description': '문제를 푼 후 해당 설명이 노출됩니다.',
26
+ 'content.explanationInfo.checkbox.label': '사용',
27
+ 'content.explanationInfo.textarea.placeholder': '해설을 입력해주세요.',
28
+ 'content.explanationInfo.textarea.errorMessage.required': '문제의 해설을 작성하세요.',
29
+ 'option.common.select.errorMessage.required': '선택지를 입력해주세요.',
30
+ 'option.common.select.placeholder': '선택지 입력',
31
+ 'option.common.select.tooltip.minOptionInfoItem': '선택지는 2개 이상 입력해야 합니다.',
32
+ 'option.common.select.tooltip.maxOptionInfoItem': '선택지는 20개 초과하여 입력할 수 없습니다.',
33
+ 'option.common.select.addButton': '보기 추가',
34
+ 'option.text.answerInfo.errorMessage.required': '정답을 입력해주세요.',
35
+ 'option.text.answerInfo.hintText': '정규표현식으로 채점됩니다. 정답에 메타 문자(^[]$()|*+?{}\\.)가 포함될 경우 해당 문자 앞에 \\를 붙여주세요.\n예) ^^ 가 정답인 경우 → \\^\\^',
36
+ 'option.text.isAutoGrade.checkbox.label': '답안을 지정하지 않고 수동으로 채점'
37
+ };
38
+ const ko = {
39
+ 'common.option': '옵션 {number}',
40
+ 'common.errorMessage.range': '{min} ~ {max}자 이내로 입력해주세요.',
41
+ 'content.title': '질문',
42
+ 'content.title.errorMessage.required': '질문을 입력해주세요.',
43
+ 'content.title.placeholder': '문제의 질문을 입력해주세요.',
44
+ 'content.description.title': '문제 설명',
45
+ 'content.description.placeholder': '자세한 문제 설명이나 코드 혹은 이미지 등을 입력해주세요.',
46
+ 'content.option.title': '답안',
47
+ 'content.option.tooltip.disabled': '퀴즈가 공개된 상태이거나 문제를 제출한 학생이 존재하면\n수정이 불가능합니다.',
48
+ 'content.option.select.items.selectOne': '객관식 (단일 선택)',
49
+ 'content.option.select.items.selectMultiple': '객관식 (다중 선택)',
50
+ 'content.option.select.items.selectMultipleOrder': '드래그 앤 드롭',
51
+ 'content.option.select.items.text': '주관식',
52
+ 'content.option.statusText.dragNDrop': '보기를 입력한 후 정답 순서대로 클릭하세요.\n구성된 문제는 좌측 학습자료 탭에서 확인하실 수 있습니다.',
53
+ 'content.option.errorMessage.required': '답안을 선택해주세요.',
54
+ 'content.answerHint.title': '입력란 힌트 텍스트 지정',
55
+ 'content.answerHint.description': '답안을 입력할 입력란의 힌트 텍스트를 지정할 수 있습니다.',
56
+ 'content.answerHint.placeholder': '입력란 힌트 텍스트 입력',
57
+ 'content.explanationInfo.title': '해설 작성',
58
+ 'content.explanationInfo.description': '문제를 푼 후 해당 설명이 노출됩니다.',
59
+ 'content.explanationInfo.checkbox.label': '사용',
60
+ 'content.explanationInfo.textarea.placeholder': '해설을 입력해주세요.',
61
+ 'content.explanationInfo.textarea.errorMessage.required': '문제의 해설을 작성하세요.',
62
+ 'option.common.select.errorMessage.required': '선택지를 입력해주세요.',
63
+ 'option.common.select.placeholder': '선택지 입력',
64
+ 'option.common.select.tooltip.minOptionInfoItem': '선택지는 2개 이상 입력해야 합니다.',
65
+ 'option.common.select.tooltip.maxOptionInfoItem': '선택지는 20개 초과하여 입력할 수 없습니다.',
66
+ 'option.common.select.addButton': '보기 추가',
67
+ 'option.text.answerInfo.errorMessage.required': '정답을 입력해주세요.',
68
+ 'option.text.answerInfo.hintText': '정규표현식으로 채점됩니다. 정답에 메타 문자(^[]$()|*+?{}\\.)가 포함될 경우 해당 문자 앞에 \\를 붙여주세요.\n예) ^^ 가 정답인 경우 → \\^\\^',
69
+ 'option.text.isAutoGrade.checkbox.label': '답안을 지정하지 않고 수동으로 채점'
70
+ };
71
+
72
+ exports.en = en;
73
+ exports.ko = ko;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const OptionSelectMultiple: React.FC;
3
+ export default OptionSelectMultiple;