@instructure/quiz-core 17.46.2-rc.5 → 17.47.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 (68) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/es/banks/components/AddToBankModal/index.js +6 -0
  3. package/es/banks/components/AddToBankModal/presenter.js +128 -6
  4. package/es/banks/components/BankEntry/presenter.js +4 -3
  5. package/es/banks/components/BankEntryRow/presenter.js +1 -3
  6. package/es/building/api/items.js +21 -5
  7. package/es/building/api/stimuli.js +21 -5
  8. package/es/building/components/resources/ItemFeedbackModal/presenter.js +1 -4
  9. package/es/building/components/resources/quiz/instructions/Edit/presenter.js +1 -3
  10. package/es/building/components/resources/quiz/instructions/Show/index.js +1 -3
  11. package/es/building/components/resources/quizEntry/QuizEntry/presenter.js +1 -3
  12. package/es/building/components/resources/quizEntry/QuizEntryEdit/presenter.js +1 -0
  13. package/es/common/actions/config.js +7 -1
  14. package/es/common/components/ConfirmationModal/presenter.js +1 -1
  15. package/es/common/components/SDKApp/index.js +10 -2
  16. package/es/common/components/layout/sidebar/SidebarItem/presenter.js +1 -3
  17. package/es/common/components/resources/entry/EntrySave/index.js +11 -5
  18. package/es/common/components/resources/entry/EntrySave/presenter.js +95 -21
  19. package/es/common/components/resources/item/ItemEdit/index.js +1 -2
  20. package/es/common/components/resources/item/ItemEdit/presenter.js +0 -2
  21. package/es/common/components/resources/item/ItemOverride/index.js +1 -2
  22. package/es/common/components/resources/item/ItemOverride/presenter.js +2 -4
  23. package/es/common/components/resources/quiz/instructions/Instructions.js +1 -3
  24. package/es/common/components/resources/sessionItemResult/ResultStimulus/index.js +1 -3
  25. package/es/common/components/resources/sessionItemResult/SessionItemResult/presenter.js +3 -7
  26. package/es/common/components/resources/stimulus/StimulusEdit/presenter.js +1 -0
  27. package/es/common/components/resources/stimulus/StimulusEditInfo/presenter.js +1 -3
  28. package/es/common/components/resources/stimulus/StimulusShowInfo/index.js +1 -3
  29. package/es/common/reducers/config.js +4 -1
  30. package/es/common/util/RceConfigProvider.js +51 -35
  31. package/es/common/util/interactionTypePropsHelper.js +2 -5
  32. package/es/common/util/rceChecker.js +1 -1
  33. package/es/common/util/windowChecks.js +6 -5
  34. package/es/reporting/components/itemAnalysis/ItemAnalysisRow/presenter.js +1 -3
  35. package/lib/banks/components/AddToBankModal/index.js +9 -0
  36. package/lib/banks/components/AddToBankModal/presenter.js +135 -6
  37. package/lib/banks/components/BankEntry/presenter.js +4 -3
  38. package/lib/banks/components/BankEntryRow/presenter.js +1 -4
  39. package/lib/building/api/items.js +23 -5
  40. package/lib/building/api/stimuli.js +23 -5
  41. package/lib/building/components/resources/ItemFeedbackModal/presenter.js +1 -5
  42. package/lib/building/components/resources/quiz/instructions/Edit/presenter.js +1 -4
  43. package/lib/building/components/resources/quiz/instructions/Show/index.js +1 -4
  44. package/lib/building/components/resources/quizEntry/QuizEntry/presenter.js +1 -4
  45. package/lib/building/components/resources/quizEntry/QuizEntryEdit/presenter.js +1 -0
  46. package/lib/common/actions/config.js +8 -0
  47. package/lib/common/components/ConfirmationModal/presenter.js +1 -1
  48. package/lib/common/components/SDKApp/index.js +9 -1
  49. package/lib/common/components/layout/sidebar/SidebarItem/presenter.js +1 -4
  50. package/lib/common/components/resources/entry/EntrySave/index.js +15 -2
  51. package/lib/common/components/resources/entry/EntrySave/presenter.js +96 -21
  52. package/lib/common/components/resources/item/ItemEdit/index.js +1 -2
  53. package/lib/common/components/resources/item/ItemEdit/presenter.js +0 -2
  54. package/lib/common/components/resources/item/ItemOverride/index.js +1 -2
  55. package/lib/common/components/resources/item/ItemOverride/presenter.js +2 -4
  56. package/lib/common/components/resources/quiz/instructions/Instructions.js +1 -4
  57. package/lib/common/components/resources/sessionItemResult/ResultStimulus/index.js +1 -4
  58. package/lib/common/components/resources/sessionItemResult/SessionItemResult/presenter.js +3 -8
  59. package/lib/common/components/resources/stimulus/StimulusEdit/presenter.js +1 -0
  60. package/lib/common/components/resources/stimulus/StimulusEditInfo/presenter.js +1 -4
  61. package/lib/common/components/resources/stimulus/StimulusShowInfo/index.js +1 -4
  62. package/lib/common/reducers/config.js +3 -0
  63. package/lib/common/util/RceConfigProvider.js +50 -34
  64. package/lib/common/util/interactionTypePropsHelper.js +2 -6
  65. package/lib/common/util/rceChecker.js +1 -1
  66. package/lib/common/util/windowChecks.js +13 -7
  67. package/lib/reporting/components/itemAnalysis/ItemAnalysisRow/presenter.js +1 -4
  68. package/package.json +10 -10
@@ -25,6 +25,8 @@ var _react = _interopRequireWildcard(require("react"));
25
25
 
26
26
  var _propTypes = _interopRequireDefault(require("prop-types"));
27
27
 
28
+ var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
29
+
28
30
  var _uiButtons = require("@instructure/ui-buttons");
29
31
 
30
32
  var _uiView = require("@instructure/ui-view");
@@ -63,11 +65,75 @@ var EntrySave = /*#__PURE__*/function (_Component) {
63
65
  _this.props.screenreaderNotification(msg);
64
66
  };
65
67
 
68
+ _this.confirmShareableContent = function () {
69
+ var _this$props = _this.props,
70
+ canvasOrigin = _this$props.canvasOrigin,
71
+ checkContentShareability = _this$props.checkContentShareability,
72
+ entry = _this$props.entry,
73
+ withConfirm = _this$props.withConfirm;
74
+
75
+ _this.setState({
76
+ canSubmit: false
77
+ });
78
+
79
+ checkContentShareability(entry.getWorkingInstance(), canvasOrigin).then(function () {
80
+ _this.successfulSubmit();
81
+ }).catch( /*#__PURE__*/function () {
82
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(err) {
83
+ var _err$response, _err$response2;
84
+
85
+ var body, text;
86
+ return _regenerator.default.wrap(function _callee$(_context) {
87
+ while (1) {
88
+ switch (_context.prev = _context.next) {
89
+ case 0:
90
+ _context.next = 2;
91
+ return (_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.json();
92
+
93
+ case 2:
94
+ body = _context.sent;
95
+ text = (0, _formatMessage.default)('There was an error attempting to validate shareability.');
96
+
97
+ if (((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : _err$response2.status) === 400 && body.shareable === false) {
98
+ text = (0, _formatMessage.default)('You are attempting to save content containing course links which may not work when used in other courses.');
99
+ }
100
+
101
+ withConfirm(function () {
102
+ _this.successfulSubmit();
103
+ }, {
104
+ title: (0, _formatMessage.default)('Are you sure?'),
105
+ text: text,
106
+ continueText: (0, _formatMessage.default)('Save anyway'),
107
+ onCancel: function onCancel() {
108
+ _this.setState({
109
+ canSubmit: true
110
+ });
111
+ }
112
+ });
113
+
114
+ case 6:
115
+ case "end":
116
+ return _context.stop();
117
+ }
118
+ }
119
+ }, _callee);
120
+ }));
121
+
122
+ return function (_x) {
123
+ return _ref.apply(this, arguments);
124
+ };
125
+ }());
126
+ };
127
+
66
128
  _this.onSubmit = function (e) {
67
129
  e.preventDefault();
68
130
 
69
131
  if (_this.props.isValid) {
70
- _this.successfulSubmit();
132
+ if (_this.props.checkBankedContentShareabilityEnabled && _this.props.shouldValidateShareableContent) {
133
+ _this.confirmShareableContent();
134
+ } else {
135
+ _this.successfulSubmit();
136
+ }
71
137
  } else {
72
138
  _this.createScreenReaderNotification();
73
139
 
@@ -111,24 +177,24 @@ var EntrySave = /*#__PURE__*/function (_Component) {
111
177
  }, {
112
178
  key: "successfulSubmit",
113
179
  value: function () {
114
- var _successfulSubmit = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
180
+ var _successfulSubmit = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
115
181
  var validationResult;
116
- return _regenerator.default.wrap(function _callee$(_context) {
182
+ return _regenerator.default.wrap(function _callee2$(_context2) {
117
183
  while (1) {
118
- switch (_context.prev = _context.next) {
184
+ switch (_context2.prev = _context2.next) {
119
185
  case 0:
120
186
  this.setState({
121
187
  canSubmit: false
122
188
  });
123
- _context.prev = 1;
124
- _context.next = 4;
189
+ _context2.prev = 1;
190
+ _context2.next = 4;
125
191
  return this.props.submitHandler();
126
192
 
127
193
  case 4:
128
- validationResult = _context.sent;
194
+ validationResult = _context2.sent;
129
195
 
130
196
  if (!(validationResult === _quizCommon.API_INPUT_VALIDATION_ERROR)) {
131
- _context.next = 8;
197
+ _context2.next = 8;
132
198
  break;
133
199
  }
134
200
 
@@ -136,16 +202,16 @@ var EntrySave = /*#__PURE__*/function (_Component) {
136
202
  throw new Error('User input validation error received from API.');
137
203
 
138
204
  case 8:
139
- _context.next = 14;
205
+ _context2.next = 14;
140
206
  break;
141
207
 
142
208
  case 10:
143
- _context.prev = 10;
144
- _context.t0 = _context["catch"](1);
209
+ _context2.prev = 10;
210
+ _context2.t0 = _context2["catch"](1);
145
211
  this.setState({
146
212
  canSubmit: true
147
213
  });
148
- return _context.abrupt("return");
214
+ return _context2.abrupt("return");
149
215
 
150
216
  case 14:
151
217
  this.props.switchOffEditing();
@@ -154,10 +220,10 @@ var EntrySave = /*#__PURE__*/function (_Component) {
154
220
 
155
221
  case 17:
156
222
  case "end":
157
- return _context.stop();
223
+ return _context2.stop();
158
224
  }
159
225
  }
160
- }, _callee, this, [[1, 10]]);
226
+ }, _callee2, this, [[1, 10]]);
161
227
  }));
162
228
 
163
229
  function successfulSubmit() {
@@ -193,29 +259,38 @@ var EntrySave = /*#__PURE__*/function (_Component) {
193
259
 
194
260
  exports.EntrySave = EntrySave;
195
261
  EntrySave.propTypes = {
196
- displayPosition: _propTypes.default.number,
197
- disableSubmit: _propTypes.default.bool,
198
- guid: _propTypes.default.string,
199
- submitHandler: _propTypes.default.func.isRequired,
200
262
  cancelHandler: _propTypes.default.func,
263
+ canvasOrigin: _propTypes.default.string,
264
+ checkBankedContentShareabilityEnabled: _propTypes.default.bool,
265
+ checkContentShareability: _propTypes.default.func.isRequired,
201
266
  clearChanges: _propTypes.default.func.isRequired,
202
267
  // From connected component
203
268
  clearNextQuizEntry: _propTypes.default.func.isRequired,
269
+ disableSubmit: _propTypes.default.bool,
270
+ displayPosition: _propTypes.default.number,
271
+ entry: _reactImmutableProptypes.default.record.isRequired,
272
+ guid: _propTypes.default.string,
204
273
  hideError: _propTypes.default.func.isRequired,
274
+ initialFocusId: _propTypes.default.string,
205
275
  isValid: _propTypes.default.bool.isRequired,
206
276
  showError: _propTypes.default.func.isRequired,
207
277
  screenreaderNotification: _propTypes.default.func.isRequired,
278
+ shouldValidateShareableContent: _propTypes.default.bool,
279
+ submitHandler: _propTypes.default.func.isRequired,
208
280
  // from makescrollable / from props being passed in occasionally
209
281
  switchOnEditing: _propTypes.default.func.isRequired,
210
282
  switchOffEditing: _propTypes.default.func.isRequired,
211
- initialFocusId: _propTypes.default.string
283
+ withConfirm: _propTypes.default.func.isRequired
212
284
  };
213
285
  EntrySave.defaultProps = {
214
- displayPosition: null,
215
286
  cancelHandler: _noop.default,
287
+ canvasOrigin: '',
288
+ checkBankedContentShareabilityEnabled: false,
289
+ displayPosition: null,
216
290
  disableSubmit: false,
217
291
  guid: null,
218
- initialFocusId: null
292
+ initialFocusId: null,
293
+ shouldValidateShareableContent: false
219
294
  };
220
295
  var _default = EntrySave;
221
296
  exports.default = _default;
@@ -65,8 +65,7 @@ function mapStateToProps(state, props) {
65
65
  partialDeepScoringEnabled: (0, _featureCheck.featureOn)('partial_deep_scoring'),
66
66
  partialScoringEnabled: (0, _featureCheck.featureOn)('partial_scoring'),
67
67
  quizId: (0, _quizzes2.getActiveQuizId)(state),
68
- showCalculator: (0, _featureCheck.featureOn)('calculator_per_question'),
69
- useNewRce: (0, _featureCheck.featureOn)('use_new_rce')
68
+ showCalculator: (0, _featureCheck.featureOn)('calculator_per_question')
70
69
  };
71
70
  }
72
71
 
@@ -211,7 +211,6 @@ ItemEdit.propTypes = {
211
211
  setUploadStatus: _propTypes.default.func.isRequired,
212
212
  initialFocusId: _propTypes.default.string,
213
213
  showCalculator: _propTypes.default.bool,
214
- useNewRce: _propTypes.default.bool,
215
214
  clearValidationErrorsFromApi: _propTypes.default.func.isRequired,
216
215
  validationErrorsFromApi: _propTypes.default.objectOf(_propTypes.default.arrayOf(_propTypes.default.shape({
217
216
  type: _propTypes.default.string,
@@ -230,7 +229,6 @@ ItemEdit.defaultProps = {
230
229
  partialScoringEnabled: false,
231
230
  initialFocusId: null,
232
231
  showCalculator: false,
233
- useNewRce: false,
234
232
  validationErrorsFromApi: {}
235
233
  };
236
234
  var _default = ItemEdit;
@@ -38,8 +38,7 @@ function mapStateToProps(state, props) {
38
38
  oneQuestionAtATime: (0, _quizzes2.isActiveQuizWorkingInstanceOneQuestionAtATime)(state),
39
39
  partialDeepScoringEnabled: (0, _featureCheck.featureOn)('partial_deep_scoring'),
40
40
  partialScoringEnabled: (0, _featureCheck.featureOn)('partial_scoring'),
41
- quizId: (0, _quizzes2.getActiveQuizId)(state),
42
- useNewRce: (0, _featureCheck.featureOn)('use_new_rce')
41
+ quizId: (0, _quizzes2.getActiveQuizId)(state)
43
42
  };
44
43
  }
45
44
 
@@ -99,14 +99,12 @@ ItemOverride.propTypes = {
99
99
  partialScoringEnabled: _propTypes.default.bool,
100
100
  quizId: _propTypes.default.string.isRequired,
101
101
  screenreaderNotification: _propTypes.default.func.isRequired,
102
- setOneQuestionAtATime: _propTypes.default.func.isRequired,
103
- useNewRce: _propTypes.default.bool
102
+ setOneQuestionAtATime: _propTypes.default.func.isRequired
104
103
  };
105
104
  ItemOverride.defaultProps = {
106
105
  errorsAreShowing: false,
107
106
  partialScoringEnabled: false,
108
- partialDeepScoringEnabled: false,
109
- useNewRce: false
107
+ partialDeepScoringEnabled: false
110
108
  };
111
109
  var _default = ItemOverride;
112
110
  exports.default = _default;
@@ -25,8 +25,6 @@ var _uiThemeable = require("@instructure/ui-themeable");
25
25
 
26
26
  var _quizRce = require("@instructure/quiz-rce");
27
27
 
28
- var _rceChecker = require("../../../../util/rceChecker.js");
29
-
30
28
  var _makeScrollable = _interopRequireDefault(require("../../../shared/functionality/makeScrollable.js"));
31
29
 
32
30
  var _theme = _interopRequireDefault(require("./theme.js"));
@@ -63,8 +61,7 @@ var QuizInstructions = (_dec = (0, _uiThemeable.themeable)(_theme.default, style
63
61
  tabIndex: "-1"
64
62
  }, /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
65
63
  customStyles: styles.text,
66
- content: this.props.quiz.instructions,
67
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
64
+ content: this.props.quiz.instructions
68
65
  }));
69
66
  }
70
67
  }]);
@@ -27,8 +27,6 @@ var _uiThemeable = require("@instructure/ui-themeable");
27
27
 
28
28
  var _quizRce = require("@instructure/quiz-rce");
29
29
 
30
- var _rceChecker = require("../../../../util/rceChecker.js");
31
-
32
30
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
33
31
 
34
32
  var _theme = _interopRequireDefault(require("./theme.js"));
@@ -87,8 +85,7 @@ var ResultStimulus = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles)
87
85
  }, /*#__PURE__*/_react.default.createElement("div", {
88
86
  className: styles.title
89
87
  }, title)), /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
90
- content: body,
91
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
88
+ content: body
92
89
  }));
93
90
  }
94
91
  }, {
@@ -41,8 +41,6 @@ var _uiThemeable = require("@instructure/ui-themeable");
41
41
 
42
42
  var _quizRce = require("@instructure/quiz-rce");
43
43
 
44
- var _rceChecker = require("../../../../util/rceChecker.js");
45
-
46
44
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
47
45
 
48
46
  var _PositionBox = _interopRequireDefault(require("../../positionBox/PositionBox.js"));
@@ -224,8 +222,7 @@ var SessionItemResult = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
224
222
  className: styles.textPadding
225
223
  }, /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
226
224
  customStyles: styles.itemFeedbackText,
227
- content: feedbackContent,
228
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
225
+ content: feedbackContent
229
226
  })));
230
227
  }
231
228
  }
@@ -269,8 +266,7 @@ var SessionItemResult = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
269
266
  className: styles.itemFeedbackLabel
270
267
  }, (0, _formatMessage.default)('Feedback from grader')), /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
271
268
  customStyles: styles.itemFeedbackText,
272
- content: graderFeedback.content,
273
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
269
+ content: graderFeedback.content
274
270
  }));
275
271
  } else {
276
272
  return this.renderFeedbackBox(graderFeedback.content, (0, _formatMessage.default)('Feedback from grader'));
@@ -310,8 +306,7 @@ var SessionItemResult = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
310
306
  properties: simpleItem.properties || {},
311
307
  scoringData: simpleSessionItem.scoringData,
312
308
  scoredData: simpleSessionItemResult.scoredData,
313
- itemResultsModifications: simpleResultsModifications[simpleSessionItem.id],
314
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
309
+ itemResultsModifications: simpleResultsModifications[simpleSessionItem.id]
315
310
  })), this.renderItemFeedback(simpleSessionItemResult));
316
311
  }
317
312
  }, {
@@ -413,6 +413,7 @@ var StimulusEdit = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles),
413
413
  onAdd: this.handleAddToBank,
414
414
  onContinue: this.handleAddToBankContinue,
415
415
  getEntry: this.getEntryForBank,
416
+ workingEntry: this.props.workingStimulus,
416
417
  entryId: this.props.guid,
417
418
  entryType: this.props.quizEntry.entryType
418
419
  });
@@ -39,8 +39,6 @@ var _index = _interopRequireDefault(require("../../../RichContentInput/index.js"
39
39
 
40
40
  var _instUIMessages = require("../../../../util/instUIMessages.js");
41
41
 
42
- var _rceChecker = require("../../../../util/rceChecker.js");
43
-
44
42
  var _Errors = _interopRequireDefault(require("../../../shared/errors/Errors.js"));
45
43
 
46
44
  var _uiSimpleSelect = require("@instructure/ui-simple-select");
@@ -210,8 +208,7 @@ var StimulusEditInfo = (_dec = (0, _uiThemeable.themeable)(_theme.default, style
210
208
  onKeyUp: this.onBodyChange,
211
209
  onBlur: this.onBodyChange,
212
210
  onChange: this.onBodyChange,
213
- uploadPath: this.fileUploadUrl(),
214
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
211
+ uploadPath: this.fileUploadUrl()
215
212
  }), /*#__PURE__*/_react.default.createElement(_Errors.default, {
216
213
  errorList: this.errorsList('body')
217
214
  })), /*#__PURE__*/_react.default.createElement("div", {
@@ -29,8 +29,6 @@ var _uiView = require("@instructure/ui-view");
29
29
 
30
30
  var _quizRce = require("@instructure/quiz-rce");
31
31
 
32
- var _rceChecker = require("../../../../util/rceChecker.js");
33
-
34
32
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
35
33
 
36
34
  var StimulusShowInfo = /*#__PURE__*/function (_Component) {
@@ -80,8 +78,7 @@ var StimulusShowInfo = /*#__PURE__*/function (_Component) {
80
78
  }, this.props.stimulus.title), instructions, /*#__PURE__*/_react.default.createElement("div", {
81
79
  "data-automation": "sdk-stimulus-LeftPanelShow-content"
82
80
  }, /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
83
- content: this.props.stimulus.body,
84
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
81
+ content: this.props.stimulus.body
85
82
  })));
86
83
  }
87
84
  }]);
@@ -21,6 +21,9 @@ var _default = function _default() {
21
21
  case _quizCommon.SET_API_ENDPOINT:
22
22
  return state.set('apiEndpoint', action.payload);
23
23
 
24
+ case _quizCommon.SET_CANVAS_ORIGIN:
25
+ return state.set('canvasOrigin', action.payload);
26
+
24
27
  case _quizCommon.SET_USER_TOKEN:
25
28
  return state.set('userToken', action.payload);
26
29
 
@@ -77,39 +77,37 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
77
77
  switch (_context.prev = _context.next) {
78
78
  case 0:
79
79
  if (hasAllPropsForRcs()) {
80
- _context.next = 3;
80
+ _context.next = 2;
81
81
  break;
82
82
  }
83
83
 
84
- handleErrorFunc('Invalid RCS configuration');
85
84
  return _context.abrupt("return");
86
85
 
87
- case 3:
88
- _context.next = 5;
86
+ case 2:
87
+ _context.next = 4;
89
88
  return props.rcsJwtRefreshFn(jwt);
90
89
 
91
- case 5:
90
+ case 4:
92
91
  response = _context.sent;
93
92
  refreshedToken = response === null || response === void 0 ? void 0 : (_response$json = response.json) === null || _response$json === void 0 ? void 0 : _response$json.token; // inst-redux-service-middleware response structure
94
93
 
95
94
  if (refreshedToken) {
96
- _context.next = 13;
95
+ _context.next = 11;
97
96
  break;
98
97
  }
99
98
 
100
- handleErrorFunc('Unable to refresh RCS token');
101
99
  normalizedStem = questionStem !== null && questionStem !== void 0 ? questionStem : 'Unknown stem';
102
100
  extractedText = (0, _quizInteractions.extractTextFromHtml)(normalizedStem);
103
- setErrorIfDuringTaking((0, _formatMessage.default)('Error while answering "{stem}": Full functionality of the Rich Content Editor may not have been available to the user.', {
101
+ handleError((0, _formatMessage.default)('Error while answering "{stem}": Full functionality of the Rich Content Editor may not have been available to the user.', {
104
102
  stem: extractedText
105
103
  }));
106
104
  return _context.abrupt("return");
107
105
 
108
- case 13:
106
+ case 11:
109
107
  setJwt(refreshedToken);
110
108
  setTokenFn(refreshedToken);
111
109
 
112
- case 15:
110
+ case 13:
113
111
  case "end":
114
112
  return _context.stop();
115
113
  }
@@ -122,26 +120,44 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
122
120
  };
123
121
  }();
124
122
 
125
- var handleErrorFunc = function handleErrorFunc(errorMessage) {
126
- _reduxStore.default.dispatch((0, _alerts.addError)(errorMessage));
123
+ var handleError = function handleError(quizLogMessage) {
124
+ if (shouldAlertUser()) {
125
+ alertTheUser(alertMessage());
126
+ }
127
+
128
+ if (shouldsetEventToQuizLog()) {
129
+ setEventToQuizLog(quizLogMessage);
130
+ }
127
131
  };
128
132
 
129
- var getConfig = function getConfig() {
130
- var _ref2, _featureFlags;
133
+ var alertTheUser = function alertTheUser(message) {
134
+ _reduxStore.default.dispatch((0, _alerts.addError)(message));
135
+ };
131
136
 
132
- return {
133
- rcs: hasAllPropsForRcs() && canvasConfig ? (_ref2 = {}, (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.useNewRce, props.useNewRce), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.canvasUserId, props.canvasUserId), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.contextId, props.contextId), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.contextType, props.contextType), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.rcsHost, props.rcsHost), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.rcsJwt, jwt), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.rcsJwtRefreshFn, refreshToken), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.canvasConfig, canvasConfig), _ref2) : null,
134
- rendererEnhancement: (0, _defineProperty2.default)({}, _quizCommon.RceConfigKeys.canvasOrigin, props.canvasOrigin),
135
- featureFlags: (_featureFlags = {}, (0, _defineProperty2.default)(_featureFlags, _quizCommon.RceConfigKeys.isNewRCEAppsEnabled, props.isNewRCEAppsEnabled), (0, _defineProperty2.default)(_featureFlags, _quizCommon.RceConfigKeys.rce5Renderer, props.rce5Renderer), _featureFlags)
136
- };
137
+ var setEventToQuizLog = function setEventToQuizLog(message) {
138
+ props.setEventToQuizLog(message);
137
139
  };
138
140
 
139
- var setErrorIfDuringTaking = function setErrorIfDuringTaking(errorMessage) {
140
- if (!(0, _windowChecks.isDuringQuizTake)()) {
141
- return;
142
- }
141
+ var alertMessage = function alertMessage() {
142
+ return (0, _windowChecks.isQuizTaking)() ? (0, _formatMessage.default)('The Rich Content Editor has encountered an issue. ' + 'It has been logged for your instructor to review. Please refresh and try again.') : (0, _formatMessage.default)('The Rich Content Editor has encountered an issue. Please refresh and try again.');
143
+ };
144
+
145
+ var shouldAlertUser = function shouldAlertUser() {
146
+ return (0, _windowChecks.isQuizTaking)() || (0, _windowChecks.isQuizBuilding)();
147
+ };
148
+
149
+ var shouldsetEventToQuizLog = function shouldsetEventToQuizLog() {
150
+ return (0, _windowChecks.isQuizTaking)();
151
+ };
152
+
153
+ var getConfig = function getConfig() {
154
+ var _featureFlags, _ref2;
143
155
 
144
- props.setRCEError(errorMessage);
156
+ return {
157
+ featureFlags: (_featureFlags = {}, (0, _defineProperty2.default)(_featureFlags, _quizCommon.RceConfigKeys.isNewRCEEnabled, props.isNewRCEEnabled), (0, _defineProperty2.default)(_featureFlags, _quizCommon.RceConfigKeys.rce5Renderer, props.rce5Renderer), (0, _defineProperty2.default)(_featureFlags, _quizCommon.RceConfigKeys.isNewRCEAppsEnabled, props.isNewRCEAppsEnabled), _featureFlags),
158
+ rcs: hasAllPropsForRcs() && canvasConfig ? (_ref2 = {}, (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.canvasUserId, props.canvasUserId), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.contextId, props.contextId), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.contextType, props.contextType), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.rcsHost, props.rcsHost), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.rcsJwt, jwt), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.rcsJwtRefreshFn, refreshToken), (0, _defineProperty2.default)(_ref2, _quizCommon.RceConfigKeys.canvasConfig, canvasConfig), _ref2) : null,
159
+ rendererEnhancement: (0, _defineProperty2.default)({}, _quizCommon.RceConfigKeys.canvasOrigin, props.canvasOrigin)
160
+ };
145
161
  };
146
162
 
147
163
  (0, _react.useEffect)(function () {
@@ -151,7 +167,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
151
167
  while (1) {
152
168
  switch (_context2.prev = _context2.next) {
153
169
  case 0:
154
- if (!(!props.useNewRce && !props.rce5Renderer)) {
170
+ if (!(!props.isNewRCEEnabled && !props.rce5Renderer)) {
155
171
  _context2.next = 2;
156
172
  break;
157
173
  }
@@ -166,7 +182,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
166
182
  break;
167
183
  }
168
184
 
169
- setErrorIfDuringTaking((0, _formatMessage.default)('Error: Full functionality of the Rich Content Editor may not have been available to the user.'));
185
+ handleError((0, _formatMessage.default)('Error: Full functionality of the Rich Content Editor may not have been available to the user.'));
170
186
  return _context2.abrupt("return");
171
187
 
172
188
  case 6:
@@ -190,7 +206,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
190
206
  case 16:
191
207
  json = _context2.sent;
192
208
  setCanvasConfig(json);
193
- setErrorIfDuringTaking(null);
209
+ setEventToQuizLog(null);
194
210
  _context2.next = 25;
195
211
  break;
196
212
 
@@ -198,7 +214,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
198
214
  _context2.prev = 21;
199
215
  _context2.t0 = _context2["catch"](2);
200
216
  setCanvasConfig(null);
201
- setErrorIfDuringTaking((0, _formatMessage.default)('Error: Full functionality of the Rich Content Editor including accessibility features may not have been available to the user.'));
217
+ handleError((0, _formatMessage.default)('Error: Full functionality of the Rich Content Editor including accessibility features may not have been available to the user.'));
202
218
 
203
219
  case 25:
204
220
  _context2.prev = 25;
@@ -212,10 +228,10 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
212
228
  }
213
229
  }, _callee2, null, [[2, 21, 25, 28]]);
214
230
  }))();
215
- }, [props.useNewRce, props.rce5Renderer]);
231
+ }, [props.isNewRCEEnabled, props.rce5Renderer]);
216
232
 
217
233
  if (props.loadedApiFeatures) {
218
- if (props.useNewRce || props.rce5Renderer) {
234
+ if (props.isNewRCEEnabled || props.rce5Renderer) {
219
235
  if (!canvasConfigLoading) {
220
236
  return /*#__PURE__*/_react.default.createElement(_quizCommon.RceConfigContext.Provider, {
221
237
  value: getConfig()
@@ -232,10 +248,10 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
232
248
  exports.RceConfigProviderComponent = RceConfigProviderComponent;
233
249
  RceConfigProviderComponent.propTypes = {
234
250
  children: _propTypes.default.node.isRequired,
235
- useNewRce: _propTypes.default.bool.isRequired,
251
+ isNewRCEEnabled: _propTypes.default.bool.isRequired,
236
252
  rce5Renderer: _propTypes.default.bool.isRequired,
237
253
  isNewRCEAppsEnabled: _propTypes.default.bool,
238
- setRCEError: _propTypes.default.func.isRequired,
254
+ setEventToQuizLog: _propTypes.default.func.isRequired,
239
255
  contextId: _propTypes.default.string,
240
256
  contextType: _propTypes.default.string,
241
257
  canvasUserId: _propTypes.default.string,
@@ -259,7 +275,7 @@ RceConfigProviderComponent.defaultProps = {
259
275
 
260
276
  var mapStateToProps = function mapStateToProps(state, ownProps) {
261
277
  return {
262
- useNewRce: (0, _rceChecker.isNewRCEEnabled)(),
278
+ isNewRCEEnabled: (0, _rceChecker.isNewRCEEnabled)(),
263
279
  rce5Renderer: (0, _rceChecker.isRCE5RendererEnabled)(),
264
280
  isNewRCEAppsEnabled: (0, _rceChecker.isNewRCEAppsEnabled)(),
265
281
  loadedApiFeatures: state.getIn(['ui', 'loadedApiFeatures']) || ownProps.loadedApiFeatures
@@ -267,7 +283,7 @@ var mapStateToProps = function mapStateToProps(state, ownProps) {
267
283
  };
268
284
 
269
285
  var mapDispatchToProps = {
270
- setRCEError: _rce.setRCEError
286
+ setEventToQuizLog: _rce.setRCEError
271
287
  };
272
288
  var RceConfigProvider = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(RceConfigProviderComponent);
273
289
  exports.RceConfigProvider = RceConfigProvider;
@@ -11,8 +11,6 @@ var _index = _interopRequireDefault(require("../components/RichContentInput/inde
11
11
 
12
12
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
13
13
 
14
- var _rceChecker = require("../../common/util/rceChecker.js");
15
-
16
14
  var propsForInteractionEdit = function propsForInteractionEdit(props, additionalOptions) {
17
15
  var item = props.workingItem.toJS();
18
16
 
@@ -81,8 +79,7 @@ var propsForInteractionEdit = function propsForInteractionEdit(props, additional
81
79
  setOneQuestionAtATime: setOneQuestionAtATime,
82
80
  stemErrors: props.workingItem.errorsFor('itemBody').toJS(),
83
81
  initialFocusId: props.initialFocusId,
84
- calculatorType: item.calculatorType,
85
- useNewRce: props.useNewRce
82
+ calculatorType: item.calculatorType
86
83
  };
87
84
  };
88
85
 
@@ -98,8 +95,7 @@ var propsForInteractionShow = function propsForInteractionShow(item) {
98
95
  itemBody: item.itemBody || '',
99
96
  properties: item.properties,
100
97
  notifyScreenreader: true,
101
- scoringData: item.scoringData,
102
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
98
+ scoringData: item.scoringData
103
99
  };
104
100
  };
105
101
 
@@ -11,7 +11,7 @@ exports.default = void 0;
11
11
  var _featureCheck = require("./featureCheck.js");
12
12
 
13
13
  var newRCEFeatureName = 'use_new_rce';
14
- var newRCEAppsFeatureName = 'use_new_rce_apps';
14
+ var newRCEAppsFeatureName = 'rce5_apps';
15
15
  var rce5RendererFeatureName = 'rce5_renderer';
16
16
 
17
17
  function isNewRCEEnabled() {
@@ -3,7 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isDuringQuizTake = exports.onTablet = exports.onPhone = exports.media = void 0;
6
+ exports.isQuizBuilding = exports.isQuizTaking = exports.onTablet = exports.onPhone = exports.media = void 0;
7
+
8
+ var _quizCommon = require("@instructure/quiz-common");
9
+
7
10
  var media = {
8
11
  'phone-break-point': 'only screen and (max-width: 48rem)',
9
12
  'tablet-break-point': 'only screen and (max-width: 64rem)'
@@ -26,11 +29,14 @@ var onTablet = function onTablet() {
26
29
 
27
30
  exports.onTablet = onTablet;
28
31
 
29
- var isDuringQuizTake = function isDuringQuizTake() {
30
- var windowObj = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window;
31
- var locationPath = windowObj.location.pathname;
32
- var patternOfQuizTakingPath = /taking\/\d+\/take/;
33
- return !!locationPath.match(patternOfQuizTakingPath);
32
+ var isQuizTaking = function isQuizTaking() {
33
+ return (0, _quizCommon.isDuringQuizTake)();
34
+ };
35
+
36
+ exports.isQuizTaking = isQuizTaking;
37
+
38
+ var isQuizBuilding = function isQuizBuilding() {
39
+ return (0, _quizCommon.isDuringQuizBuild)();
34
40
  };
35
41
 
36
- exports.isDuringQuizTake = isDuringQuizTake;
42
+ exports.isQuizBuilding = isQuizBuilding;