@elice/material-quiz 1.250514.0 → 1.250521.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 (31) hide show
  1. package/cjs/components/material-quiz/MaterialQuizImage.js +102 -30
  2. package/cjs/components/material-quiz/MaterialQuizSelectMultiple.js +160 -72
  3. package/cjs/components/material-quiz/MaterialQuizSelectMultipleOrder.js +235 -143
  4. package/cjs/components/material-quiz/MaterialQuizSelectOne.js +154 -66
  5. package/cjs/components/material-quiz/MaterialQuizText.js +154 -63
  6. package/cjs/components/material-quiz/context/MaterialQuizContext.d.ts +1 -0
  7. package/cjs/components/material-quiz/context/MaterialQuizContext.js +33 -26
  8. package/cjs/components/material-quiz/locales/en.json.js +1 -1
  9. package/cjs/components/material-quiz/locales/ja.json.js +1 -1
  10. package/cjs/components/material-quiz/locales/ko.json.js +1 -1
  11. package/cjs/components/material-quiz/locales/th.json.js +1 -1
  12. package/cjs/components/material-quiz/material-quiz-group/MaterialQuizGroup.js +125 -35
  13. package/cjs/components/material-quiz/material-quiz-group/MaterialQuizGroupDesktop.d.ts +1 -1
  14. package/cjs/components/material-quiz/material-quiz-group/MaterialQuizGroupMobile.d.ts +1 -1
  15. package/cjs/components/material-quiz-edit/options/options-group/OptionGroupAnswerListItem.js +3 -3
  16. package/es/components/material-quiz/MaterialQuizImage.js +103 -31
  17. package/es/components/material-quiz/MaterialQuizSelectMultiple.js +161 -73
  18. package/es/components/material-quiz/MaterialQuizSelectMultipleOrder.js +236 -144
  19. package/es/components/material-quiz/MaterialQuizSelectOne.js +155 -67
  20. package/es/components/material-quiz/MaterialQuizText.js +155 -64
  21. package/es/components/material-quiz/context/MaterialQuizContext.d.ts +1 -0
  22. package/es/components/material-quiz/context/MaterialQuizContext.js +33 -26
  23. package/es/components/material-quiz/locales/en.json.js +1 -1
  24. package/es/components/material-quiz/locales/ja.json.js +1 -1
  25. package/es/components/material-quiz/locales/ko.json.js +1 -1
  26. package/es/components/material-quiz/locales/th.json.js +1 -1
  27. package/es/components/material-quiz/material-quiz-group/MaterialQuizGroup.js +126 -36
  28. package/es/components/material-quiz/material-quiz-group/MaterialQuizGroupDesktop.d.ts +1 -1
  29. package/es/components/material-quiz/material-quiz-group/MaterialQuizGroupMobile.d.ts +1 -1
  30. package/es/components/material-quiz-edit/options/options-group/OptionGroupAnswerListItem.js +3 -3
  31. package/package.json +3 -3
@@ -10,6 +10,7 @@ var apiClient = require('@elice/api-client');
10
10
  var designTokens = require('@elice/design-tokens');
11
11
  var fileClient = require('@elice/file-client');
12
12
  var intl = require('@elice/intl');
13
+ var types = require('@elice/types');
13
14
  var material = require('@mui/material');
14
15
  var reactQuery = require('@tanstack/react-query');
15
16
  var index = require('../../helpers/index.js');
@@ -43,7 +44,8 @@ var MaterialQuizImage = function MaterialQuizImage(_ref) {
43
44
  var _useMaterialQuizState = MaterialQuizContext.useMaterialQuizState(),
44
45
  lecture = _useMaterialQuizState.lecture,
45
46
  materialQuiz = _useMaterialQuizState.materialQuiz,
46
- userId = _useMaterialQuizState.userId;
47
+ userId = _useMaterialQuizState.userId,
48
+ userRole = _useMaterialQuizState.userRole;
47
49
  var _useMaterialQuizDispa = MaterialQuizContext.useMaterialQuizDispatch(),
48
50
  onSubmit = _useMaterialQuizDispa.onSubmit,
49
51
  onNext = _useMaterialQuizDispa.onNext,
@@ -203,20 +205,6 @@ var MaterialQuizImage = function MaterialQuizImage(_ref) {
203
205
  return _ref3.apply(this, arguments);
204
206
  };
205
207
  }();
206
- //
207
- //
208
- //
209
- reactUse.useMount(function () {
210
- setIsInitialLoading(false);
211
- });
212
- //
213
- //
214
- //
215
- React__default.default.useEffect(function () {
216
- if (materialQuizResponse === null || materialQuizResponse === void 0 ? void 0 : materialQuizResponse.resourceId) {
217
- setUploadResourceId(materialQuizResponse === null || materialQuizResponse === void 0 ? void 0 : materialQuizResponse.resourceId);
218
- }
219
- }, [materialQuizResponse === null || materialQuizResponse === void 0 ? void 0 : materialQuizResponse.resourceId]);
220
208
  /**
221
209
  *
222
210
  */
@@ -267,6 +255,104 @@ var MaterialQuizImage = function MaterialQuizImage(_ref) {
267
255
  }
268
256
  return renderResourceIdController();
269
257
  };
258
+ /**
259
+ *
260
+ */
261
+ var handleReset = /*#__PURE__*/function () {
262
+ var _ref4 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee3() {
263
+ return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee3$(_context3) {
264
+ while (1) switch (_context3.prev = _context3.next) {
265
+ case 0:
266
+ if (materialQuiz) {
267
+ _context3.next = 2;
268
+ break;
269
+ }
270
+ return _context3.abrupt("return");
271
+ case 2:
272
+ setSubmitStatus('pending');
273
+ _context3.prev = 3;
274
+ _context3.next = 6;
275
+ return apiClient.getOrgMaterialQuizResponseReset({
276
+ materialQuizId: materialQuiz.id
277
+ });
278
+ case 6:
279
+ setUploadResourceId(null);
280
+ setHasSubmitted(false);
281
+ void refreshOrgMaterialQuiz();
282
+ setSubmitStatus('resolved');
283
+ _context3.next = 16;
284
+ break;
285
+ case 12:
286
+ _context3.prev = 12;
287
+ _context3.t0 = _context3["catch"](3);
288
+ console.error(_context3.t0);
289
+ setSubmitStatus('rejected');
290
+ case 16:
291
+ case "end":
292
+ return _context3.stop();
293
+ }
294
+ }, _callee3, null, [[3, 12]]);
295
+ }));
296
+ return function handleReset() {
297
+ return _ref4.apply(this, arguments);
298
+ };
299
+ }();
300
+ /**
301
+ *
302
+ */
303
+ var getFooterActions = function getFooterActions() {
304
+ var actions = [];
305
+ var userAboveHeadTA = userRole && userRole >= types.enums.CourseRole.HeadTA;
306
+ // reset button
307
+ if (userAboveHeadTA && materialQuizResponse) {
308
+ actions.push({
309
+ border: false,
310
+ children: intl$1.formatMessage({
311
+ id: 'materialQuiz.reset'
312
+ }),
313
+ disabled: isDisabled,
314
+ loading: submitStatus === 'pending',
315
+ tabIndex: 0,
316
+ transparent: false,
317
+ onClick: handleReset,
318
+ customStyles: {
319
+ backgroundColor: theme.palette.secondary.main,
320
+ color: theme.palette.secondary.contrastText
321
+ }
322
+ });
323
+ }
324
+ // submit button
325
+ actions.push({
326
+ border: false,
327
+ children: intl$1.formatMessage({
328
+ id: 'materialQuiz.submit'
329
+ }),
330
+ disabled: isDisabled,
331
+ loading: submitStatus === 'pending',
332
+ tabIndex: 0,
333
+ transparent: false,
334
+ onClick: handleSubmit,
335
+ customStyles: {
336
+ backgroundColor: isNextActive ? theme.palette.primary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
337
+ color: isNextActive ? theme.palette.primary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
338
+ }
339
+ });
340
+ return actions;
341
+ };
342
+ //
343
+ //
344
+ //
345
+ reactUse.useMount(function () {
346
+ setIsInitialLoading(false);
347
+ });
348
+ //
349
+ //
350
+ //
351
+ React__default.default.useEffect(function () {
352
+ if (materialQuizResponse === null || materialQuizResponse === void 0 ? void 0 : materialQuizResponse.resourceId) {
353
+ setUploadResourceId(materialQuizResponse === null || materialQuizResponse === void 0 ? void 0 : materialQuizResponse.resourceId);
354
+ }
355
+ }, [materialQuizResponse === null || materialQuizResponse === void 0 ? void 0 : materialQuizResponse.resourceId]);
270
356
  //
271
357
  //
272
358
  //
@@ -283,21 +369,7 @@ var MaterialQuizImage = function MaterialQuizImage(_ref) {
283
369
  isNextActive: isNextActive,
284
370
  materialQuizResponse: materialQuizResponse,
285
371
  onHint: onHint,
286
- footerActions: [{
287
- border: false,
288
- children: intl$1.formatMessage({
289
- id: 'materialQuiz.submit'
290
- }),
291
- disabled: isDisabled,
292
- loading: submitStatus === 'pending',
293
- tabIndex: 0,
294
- transparent: false,
295
- onClick: handleSubmit,
296
- customStyles: {
297
- backgroundColor: isNextActive ? theme.palette.primary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
298
- color: isNextActive ? theme.palette.primary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
299
- }
300
- }],
372
+ footerActions: getFooterActions(),
301
373
  children: jsxRuntime.jsxs(material.Stack, {
302
374
  height: "100%",
303
375
  gap: "1rem",
@@ -8,6 +8,7 @@ var React = require('react');
8
8
  var apiClient = require('@elice/api-client');
9
9
  var designTokens = require('@elice/design-tokens');
10
10
  var intl = require('@elice/intl');
11
+ var types = require('@elice/types');
11
12
  var material = require('@mui/material');
12
13
  var element = require('../../constant/element.js');
13
14
  var index = require('../../helpers/index.js');
@@ -32,6 +33,9 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
32
33
 
33
34
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
34
35
 
36
+ //
37
+ //
38
+ //
35
39
  var MaterialQuizSelectMultiple = function MaterialQuizSelectMultiple(_ref) {
36
40
  var hasInlinePassage = _ref.hasInlinePassage;
37
41
  // context
@@ -39,7 +43,8 @@ var MaterialQuizSelectMultiple = function MaterialQuizSelectMultiple(_ref) {
39
43
  course = _useMaterialQuizState.course,
40
44
  lecture = _useMaterialQuizState.lecture,
41
45
  materialQuiz = _useMaterialQuizState.materialQuiz,
42
- userId = _useMaterialQuizState.userId;
46
+ userId = _useMaterialQuizState.userId,
47
+ userRole = _useMaterialQuizState.userRole;
43
48
  var _useMaterialQuizDispa = MaterialQuizContext.useMaterialQuizDispatch(),
44
49
  onSubmit = _useMaterialQuizDispa.onSubmit,
45
50
  onNext = _useMaterialQuizDispa.onNext,
@@ -75,7 +80,9 @@ var MaterialQuizSelectMultiple = function MaterialQuizSelectMultiple(_ref) {
75
80
  setHasSubmitted = _React$useState10[1];
76
81
  var isNextActive = hasSubmitted && typeof onNext === 'function';
77
82
  var isDisabled = selectedAnswer.length === 0 || index.checkUserLectureTestEnded(lecture) || !!userId;
78
- // answer select handler
83
+ /**
84
+ * answer select handler
85
+ */
79
86
  var handleAnswerSelect = function handleAnswerSelect(index$1) {
80
87
  if (index.checkUserLectureTestEnded(lecture) || !!userId) {
81
88
  return;
@@ -90,61 +97,9 @@ var MaterialQuizSelectMultiple = function MaterialQuizSelectMultiple(_ref) {
90
97
  return newState;
91
98
  });
92
99
  };
93
- // quiz response fetcher
94
- React__default.default.useEffect(function () {
95
- if (!userId && (materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.lastQuizResponseId)) {
96
- var controller = new AbortController();
97
- var signal = controller.signal;
98
- apiClient.getOrgMaterialQuizResponseGet({
99
- quizResponseId: materialQuiz.lastQuizResponseId
100
- }, {
101
- signal: signal
102
- }).then(function (response) {
103
- setMaterialQuizResponse(response.quizResponse);
104
- // when user submitted answers and not get the result yet, update selected options (for example, test quiz)
105
- // when is is a survey type quiz
106
- if (!index.shouldResetOptions({
107
- materialQuizResponse: response.quizResponse
108
- })) {
109
- setSelectedAnswer(response.quizResponse.answer);
110
- }
111
- setSelectedAnswer(response.quizResponse.answer);
112
- }).catch(function (error) {
113
- console.error(error);
114
- });
115
- return function () {
116
- return controller.abort();
117
- };
118
- }
119
- }, [materialQuiz, userId]);
120
- // quiz response fetcher
121
- React__default.default.useEffect(function () {
122
- if (userId && materialQuiz) {
123
- var controller = new AbortController();
124
- var signal = controller.signal;
125
- apiClient.getOrgMaterialQuizResponseList({
126
- materialQuizId: materialQuiz.id,
127
- filterUserIds: [userId],
128
- isContainOnlyLast: true,
129
- isIncludeAnswer: true,
130
- offset: 0,
131
- count: 1
132
- }, {
133
- signal: signal
134
- }).then(function (response) {
135
- var quizResponse = response.quizResponses[0];
136
- var quizResponseAnswer = quizResponse === null || quizResponse === void 0 ? void 0 : quizResponse.answer;
137
- setMaterialQuizResponse(quizResponse);
138
- setSelectedAnswer(Array.isArray(quizResponseAnswer) ? quizResponseAnswer : []);
139
- }).catch(function (error) {
140
- console.error(error);
141
- });
142
- return function () {
143
- return controller.abort();
144
- };
145
- }
146
- }, [materialQuiz, userId]);
147
- // submit handler
100
+ /**
101
+ * submit handler
102
+ */
148
103
  var handleSubmit = /*#__PURE__*/function () {
149
104
  var _ref2 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee() {
150
105
  var _yield$postOrgMateria, quizResponseId, _yield$getOrgMaterial, quizResponse;
@@ -199,6 +154,153 @@ var MaterialQuizSelectMultiple = function MaterialQuizSelectMultiple(_ref) {
199
154
  return _ref2.apply(this, arguments);
200
155
  };
201
156
  }();
157
+ /**
158
+ *
159
+ */
160
+ var handleReset = /*#__PURE__*/function () {
161
+ var _ref3 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee2() {
162
+ return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee2$(_context2) {
163
+ while (1) switch (_context2.prev = _context2.next) {
164
+ case 0:
165
+ if (materialQuiz) {
166
+ _context2.next = 2;
167
+ break;
168
+ }
169
+ return _context2.abrupt("return");
170
+ case 2:
171
+ setSubmitStatus('pending');
172
+ _context2.prev = 3;
173
+ _context2.next = 6;
174
+ return apiClient.getOrgMaterialQuizResponseReset({
175
+ materialQuizId: materialQuiz.id
176
+ });
177
+ case 6:
178
+ setIsActive(false);
179
+ setSelectedAnswer([]);
180
+ setMaterialQuizResponse(undefined);
181
+ setHasSubmitted(false);
182
+ void refreshOrgMaterialQuiz();
183
+ setSubmitStatus('resolved');
184
+ _context2.next = 18;
185
+ break;
186
+ case 14:
187
+ _context2.prev = 14;
188
+ _context2.t0 = _context2["catch"](3);
189
+ console.error(_context2.t0);
190
+ setSubmitStatus('rejected');
191
+ case 18:
192
+ case "end":
193
+ return _context2.stop();
194
+ }
195
+ }, _callee2, null, [[3, 14]]);
196
+ }));
197
+ return function handleReset() {
198
+ return _ref3.apply(this, arguments);
199
+ };
200
+ }();
201
+ /**
202
+ *
203
+ */
204
+ var getFooterActions = function getFooterActions() {
205
+ var actions = [];
206
+ var userAboveHeadTA = userRole && userRole >= types.enums.CourseRole.HeadTA;
207
+ // reset button
208
+ if (userAboveHeadTA && materialQuizResponse) {
209
+ actions.push({
210
+ border: false,
211
+ children: intl$1.formatMessage({
212
+ id: 'materialQuiz.reset'
213
+ }),
214
+ disabled: isDisabled,
215
+ loading: submitStatus === 'pending',
216
+ tabIndex: 0,
217
+ transparent: false,
218
+ onClick: handleReset,
219
+ customStyles: {
220
+ backgroundColor: theme.palette.secondary.main,
221
+ color: theme.palette.secondary.contrastText
222
+ }
223
+ });
224
+ }
225
+ // submit button
226
+ actions.push({
227
+ border: false,
228
+ disabled: isDisabled,
229
+ loading: submitStatus === 'pending',
230
+ tabIndex: 0,
231
+ transparent: false,
232
+ onClick: handleSubmit,
233
+ children: intl$1.formatMessage({
234
+ id: 'materialQuiz.submit'
235
+ }),
236
+ customStyles: {
237
+ backgroundColor: isNextActive ? theme.palette.primary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
238
+ color: isNextActive ? theme.palette.primary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
239
+ }
240
+ });
241
+ return actions;
242
+ };
243
+ //
244
+ // quiz response fetcher
245
+ //
246
+ React__default.default.useEffect(function () {
247
+ if (!userId && (materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.lastQuizResponseId)) {
248
+ var controller = new AbortController();
249
+ var signal = controller.signal;
250
+ apiClient.getOrgMaterialQuizResponseGet({
251
+ quizResponseId: materialQuiz.lastQuizResponseId
252
+ }, {
253
+ signal: signal
254
+ }).then(function (response) {
255
+ setMaterialQuizResponse(response.quizResponse);
256
+ // when user submitted answers and not get the result yet, update selected options (for example, test quiz)
257
+ // when is is a survey type quiz
258
+ if (!index.shouldResetOptions({
259
+ materialQuizResponse: response.quizResponse
260
+ })) {
261
+ setSelectedAnswer(response.quizResponse.answer);
262
+ }
263
+ setSelectedAnswer(response.quizResponse.answer);
264
+ }).catch(function (error) {
265
+ console.error(error);
266
+ });
267
+ return function () {
268
+ return controller.abort();
269
+ };
270
+ }
271
+ }, [materialQuiz, userId]);
272
+ //
273
+ // quiz response fetcher
274
+ //
275
+ React__default.default.useEffect(function () {
276
+ if (userId && materialQuiz) {
277
+ var controller = new AbortController();
278
+ var signal = controller.signal;
279
+ apiClient.getOrgMaterialQuizResponseList({
280
+ materialQuizId: materialQuiz.id,
281
+ filterUserIds: [userId],
282
+ isContainOnlyLast: true,
283
+ isIncludeAnswer: true,
284
+ offset: 0,
285
+ count: 1
286
+ }, {
287
+ signal: signal
288
+ }).then(function (response) {
289
+ var quizResponse = response.quizResponses[0];
290
+ var quizResponseAnswer = quizResponse === null || quizResponse === void 0 ? void 0 : quizResponse.answer;
291
+ setMaterialQuizResponse(quizResponse);
292
+ setSelectedAnswer(Array.isArray(quizResponseAnswer) ? quizResponseAnswer : []);
293
+ }).catch(function (error) {
294
+ console.error(error);
295
+ });
296
+ return function () {
297
+ return controller.abort();
298
+ };
299
+ }
300
+ }, [materialQuiz, userId]);
301
+ //
302
+ //
303
+ //
202
304
  return jsxRuntime.jsx(QuestionBox.default, {
203
305
  title: materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.questionTitle,
204
306
  titlePrefix: "Q.",
@@ -213,21 +315,7 @@ var MaterialQuizSelectMultiple = function MaterialQuizSelectMultiple(_ref) {
213
315
  status: submitStatus
214
316
  }),
215
317
  bodyContainerRef: containerRef,
216
- footerActions: [{
217
- border: false,
218
- disabled: isDisabled,
219
- loading: submitStatus === 'pending',
220
- tabIndex: 0,
221
- transparent: false,
222
- onClick: handleSubmit,
223
- children: intl$1.formatMessage({
224
- id: 'materialQuiz.submit'
225
- }),
226
- customStyles: {
227
- backgroundColor: isNextActive ? theme.palette.primary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
228
- color: isNextActive ? theme.palette.primary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
229
- }
230
- }],
318
+ footerActions: getFooterActions(),
231
319
  children: jsxRuntime.jsxs(material.Stack, {
232
320
  height: "100%",
233
321
  gap: "1rem",