@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
@@ -16,6 +16,10 @@ var _banks = require("../../api/banks.js");
16
16
 
17
17
  var _bankEntries = require("../../api/bankEntries.js");
18
18
 
19
+ var _items = require("../../../building/api/items.js");
20
+
21
+ var _stimuli = require("../../../building/api/stimuli.js");
22
+
19
23
  var _presenter = _interopRequireDefault(require("./presenter.js"));
20
24
 
21
25
  var modalActions = _interopRequireWildcard(require("../../../common/actions/modal.js"));
@@ -30,10 +34,15 @@ var _quizCommon = require("@instructure/quiz-common");
30
34
 
31
35
  var _modalHelpers = require("../../../common/util/modalHelpers.js");
32
36
 
37
+ var _featureCheck = require("../../../common/util/featureCheck.js");
38
+
33
39
  function mapStateToProps(state, props) {
34
40
  var selectedBankOption = state.getIn(['ui', _quizCommon.ADD_TO_BANK_MODAL_BANK_SELECTION]);
35
41
  var selectedBank = selectedBankOption && new _Bank.default(state.getIn(['banks', selectedBankOption]));
36
42
  return {
43
+ canvasOrigin: state.getIn(['config', 'canvasOrigin']),
44
+ checkBankedContentShareabilityEnabled: (0, _featureCheck.featureOn)('check_banked_content_shareability'),
45
+ checkContentShareability: props.entryType === 'Item' ? _items.checkItemShareability : _stimuli.checkStimulusShareability,
37
46
  selectedBank: selectedBank,
38
47
  modalTrigger: (0, _modalHelpers.getModalTrigger)(state),
39
48
  modalOpen: state.getIn(['modal', 'isOpen']) === [_quizCommon.ADD_TO_BANK_MODAL, props.entryType, props.entryId].join(':')
@@ -9,6 +9,10 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.default = exports.AddToBankModal = void 0;
11
11
 
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
+
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
12
16
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
17
 
14
18
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -37,11 +41,36 @@ var _Bank = _interopRequireDefault(require("../../../common/records/Bank.js"));
37
41
 
38
42
  var _index = _interopRequireDefault(require("../../../common/components/resources/BankSelection/index.js"));
39
43
 
44
+ var _uiSpinner = require("@instructure/ui-spinner");
45
+
46
+ var _uiText = require("@instructure/ui-text");
47
+
48
+ var _uiIcons = require("@instructure/ui-icons");
49
+
50
+ var _uiView = require("@instructure/ui-view");
51
+
52
+ var _uiFlex = require("@instructure/ui-flex");
53
+
40
54
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
41
55
 
42
56
  var _quizCommon = require("@instructure/quiz-common");
43
57
 
44
- var _ref = /*#__PURE__*/_react.default.createElement("br", null);
58
+ var _ref2 = /*#__PURE__*/_react.default.createElement(_uiIcons.IconCheckLine, {
59
+ color: "success"
60
+ });
61
+
62
+ var _ref3 = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
63
+ padding: "0 small 0 0"
64
+ }, /*#__PURE__*/_react.default.createElement(_uiIcons.IconNoLine, {
65
+ color: "error",
66
+ size: "small"
67
+ }));
68
+
69
+ var _ref4 = /*#__PURE__*/_react.default.createElement(_uiIcons.IconWarningLine, {
70
+ color: "warning"
71
+ });
72
+
73
+ var _ref5 = /*#__PURE__*/_react.default.createElement("br", null);
45
74
 
46
75
  var AddToBankModal = /*#__PURE__*/function (_Component) {
47
76
  (0, _inherits2.default)(AddToBankModal, _Component);
@@ -60,6 +89,7 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
60
89
  _this = _super.call.apply(_super, [this].concat(args));
61
90
  _this.state = {
62
91
  bankType: 'existing',
92
+ contentShareable: 'loading',
63
93
  newBankTitle: ''
64
94
  };
65
95
 
@@ -124,6 +154,65 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
124
154
  }
125
155
 
126
156
  (0, _createClass2.default)(AddToBankModal, [{
157
+ key: "componentDidUpdate",
158
+ value: function componentDidUpdate(prevProps) {
159
+ var _this2 = this;
160
+
161
+ var _this$props = this.props,
162
+ canvasOrigin = _this$props.canvasOrigin,
163
+ checkBankedContentShareabilityEnabled = _this$props.checkBankedContentShareabilityEnabled,
164
+ modalOpen = _this$props.modalOpen,
165
+ checkContentShareability = _this$props.checkContentShareability,
166
+ workingEntry = _this$props.workingEntry;
167
+
168
+ if (checkBankedContentShareabilityEnabled && modalOpen && !prevProps.modalOpen) {
169
+ this.setState({
170
+ contentShareable: 'loading'
171
+ });
172
+ checkContentShareability(workingEntry, canvasOrigin).then(function () {
173
+ _this2.setState({
174
+ contentShareable: 'true'
175
+ });
176
+ }).catch( /*#__PURE__*/function () {
177
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(err) {
178
+ var _err$response, _err$response2;
179
+
180
+ var body;
181
+ return _regenerator.default.wrap(function _callee$(_context) {
182
+ while (1) {
183
+ switch (_context.prev = _context.next) {
184
+ case 0:
185
+ _context.next = 2;
186
+ return (_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.json();
187
+
188
+ case 2:
189
+ body = _context.sent;
190
+
191
+ if (((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : _err$response2.status) === 400 && body.shareable === false) {
192
+ _this2.setState({
193
+ contentShareable: 'false'
194
+ });
195
+ } else {
196
+ _this2.setState({
197
+ contentShareable: 'unknown'
198
+ });
199
+ }
200
+
201
+ case 4:
202
+ case "end":
203
+ return _context.stop();
204
+ }
205
+ }
206
+ }, _callee);
207
+ }));
208
+
209
+ return function (_x) {
210
+ return _ref.apply(this, arguments);
211
+ };
212
+ }());
213
+ }
214
+ }
215
+ }, {
127
216
  key: "cancelButton",
128
217
  value: function cancelButton() {
129
218
  return /*#__PURE__*/_react.default.createElement(_uiButtons.Button, {
@@ -136,8 +225,11 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
136
225
  value: function addToBankButton() {
137
226
  var _this$state = this.state,
138
227
  bankType = _this$state.bankType,
139
- newBankTitle = _this$state.newBankTitle;
140
- var disabled = bankType === 'existing' && !this.props.selectedBank || bankType === 'new' && (!newBankTitle || !newBankTitle.trim());
228
+ newBankTitle = _this$state.newBankTitle,
229
+ contentShareable = _this$state.contentShareable;
230
+ var checkBankedContentShareabilityEnabled = this.props.checkBankedContentShareabilityEnabled;
231
+ var contentShareableLoading = contentShareable === 'loading';
232
+ var disabled = bankType === 'existing' && !this.props.selectedBank || bankType === 'new' && (!newBankTitle || !newBankTitle.trim()) || checkBankedContentShareabilityEnabled && contentShareableLoading;
141
233
  return /*#__PURE__*/_react.default.createElement(_uiButtons.Button, {
142
234
  type: "button",
143
235
  variant: "primary",
@@ -145,7 +237,7 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
145
237
  disabled: disabled,
146
238
  margin: _quizCommon.XSMALL_SIDE_MARGIN,
147
239
  "data-automation": "sdk-add-to-bank-button"
148
- }, (0, _formatMessage.default)('Add'));
240
+ }, checkBankedContentShareabilityEnabled && !contentShareableLoading && contentShareable !== 'true' ? (0, _formatMessage.default)('Add anyway') : (0, _formatMessage.default)('Add'));
149
241
  }
150
242
  }, {
151
243
  key: "renderBankTypeContent",
@@ -165,6 +257,37 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
165
257
  type: "text"
166
258
  });
167
259
  }
260
+ }, {
261
+ key: "renderContentShareabilityMessage",
262
+ value: function renderContentShareabilityMessage() {
263
+ if (this.props.checkBankedContentShareabilityEnabled) {
264
+ var content = null;
265
+
266
+ if (this.state.contentShareable === 'loading') {
267
+ content = /*#__PURE__*/_react.default.createElement(_uiText.Text, null, /*#__PURE__*/_react.default.createElement(_uiSpinner.Spinner, {
268
+ size: "x-small",
269
+ renderTitle: (0, _formatMessage.default)('Checking content shareability...')
270
+ }), "\xA0", (0, _formatMessage.default)('Validating content...'));
271
+ } else if (this.state.contentShareable === 'true') {
272
+ content = /*#__PURE__*/_react.default.createElement(_uiText.Text, null, _ref2, "\xA0", (0, _formatMessage.default)('Good to go!'));
273
+ } else if (this.state.contentShareable === 'false') {
274
+ content = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, null, _ref3, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
275
+ shouldShrink: true
276
+ }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
277
+ color: "error"
278
+ }, (0, _formatMessage.default)('You are attempting to add content containing course links which may not work when used in other courses.'))));
279
+ } else {
280
+ content = /*#__PURE__*/_react.default.createElement(_uiText.Text, {
281
+ color: "warning"
282
+ }, _ref4, "\xA0", (0, _formatMessage.default)('There was an error attempting to validate shareability.'));
283
+ }
284
+
285
+ return /*#__PURE__*/_react.default.createElement(_uiView.View, {
286
+ as: "div",
287
+ margin: "small 0 0 0"
288
+ }, content);
289
+ }
290
+ }
168
291
  }, {
169
292
  key: "renderContent",
170
293
  value: function renderContent() {
@@ -179,7 +302,7 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
179
302
  }), /*#__PURE__*/_react.default.createElement(_uiRadioInput.RadioInput, {
180
303
  value: "new",
181
304
  label: (0, _formatMessage.default)('New item bank')
182
- })), _ref, this.renderBankTypeContent());
305
+ })), _ref5, this.renderBankTypeContent(), this.renderContentShareabilityMessage());
183
306
  }
184
307
  }, {
185
308
  key: "render",
@@ -207,6 +330,9 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
207
330
 
208
331
  exports.AddToBankModal = AddToBankModal;
209
332
  AddToBankModal.propTypes = {
333
+ canvasOrigin: _propTypes.default.string,
334
+ checkBankedContentShareabilityEnabled: _propTypes.default.bool,
335
+ checkContentShareability: _propTypes.default.func.isRequired,
210
336
  closeModal: _propTypes.default.func.isRequired,
211
337
  createBank: _propTypes.default.func.isRequired,
212
338
  createBankEntry: _propTypes.default.func.isRequired,
@@ -218,15 +344,18 @@ AddToBankModal.propTypes = {
218
344
  entryType: _propTypes.default.string.isRequired,
219
345
  // Resolve to the bank entry's entry, or create it if it does not yet exist.
220
346
  getEntry: _propTypes.default.func.isRequired,
347
+ handleValidationErrorsFromApi: _propTypes.default.func.isRequired,
221
348
  label: _propTypes.default.string.isRequired,
222
349
  modalOpen: _propTypes.default.bool.isRequired,
223
350
  onAdd: _propTypes.default.func,
224
351
  onContinue: _propTypes.default.func,
225
352
  selectedBank: _reactImmutableProptypes.default.record,
226
353
  uiSet: _propTypes.default.func.isRequired,
227
- handleValidationErrorsFromApi: _propTypes.default.func.isRequired
354
+ workingEntry: _reactImmutableProptypes.default.record.isRequired
228
355
  };
229
356
  AddToBankModal.defaultProps = {
357
+ canvasOrigin: '',
358
+ checkBankedContentShareabilityEnabled: false,
230
359
  onAdd: function onAdd() {},
231
360
  onContinue: function onContinue() {},
232
361
  selectedBank: null
@@ -245,17 +245,18 @@ var BankEntry = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _de
245
245
  return {
246
246
  cancelHandler: _this.navigateToBank,
247
247
  clearChanges: _this.clearChanges,
248
+ clearValidationErrorsFromApi: _this.clearValidationErrorsFromApi,
248
249
  contextUuid: null,
250
+ disableSubmit: Boolean(_this.state.validationErrorsFromApi && Object.values(_this.state.validationErrorsFromApi).length),
249
251
  entry: entry,
250
252
  guid: "".concat(_this.props.bankEntry.id, "_bank_entry_edit"),
251
253
  handleQuizEntryPointsChange: _this.handlePointsChange,
252
254
  parentId: _this.props.bankId,
253
255
  parentType: _quizCommon.PARENT_TYPE_BANK,
256
+ shouldValidateShareableContent: true,
254
257
  stimulus: entry,
255
258
  submitHandler: _this.submitHandler,
256
- validationErrorsFromApi: _this.state.validationErrorsFromApi,
257
- clearValidationErrorsFromApi: _this.clearValidationErrorsFromApi,
258
- disableSubmit: Boolean(_this.state.validationErrorsFromApi && Object.values(_this.state.validationErrorsFromApi).length)
259
+ validationErrorsFromApi: _this.state.validationErrorsFromApi
259
260
  };
260
261
  };
261
262
 
@@ -47,8 +47,6 @@ var _uiThemeable = require("@instructure/ui-themeable");
47
47
 
48
48
  var _quizRce = require("@instructure/quiz-rce");
49
49
 
50
- var _rceChecker = require("../../../common/util/rceChecker.js");
51
-
52
50
  var _quizCommon = require("@instructure/quiz-common");
53
51
 
54
52
  var _quizInteractions = require("@instructure/quiz-interactions");
@@ -322,8 +320,7 @@ var BankEntryRow = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles),
322
320
  if (itemOrStimulus.itemBody) {
323
321
  return /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
324
322
  customStyles: styles.stem,
325
- content: itemOrStimulus.itemBody,
326
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
323
+ content: itemOrStimulus.itemBody
327
324
  });
328
325
  } else {
329
326
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.getItem = getItem;
9
+ exports.checkItemShareability = checkItemShareability;
9
10
  exports.createItem = createItem;
10
11
  exports.updateItem = updateItem;
11
12
 
@@ -50,6 +51,20 @@ function getItem(itemId) {
50
51
  };
51
52
  }
52
53
 
54
+ function checkItemShareability(item, canvasOrigin) {
55
+ var url = '/api/items/check_shareability';
56
+ var requestBody = JSON.stringify({
57
+ item: updateItemParams(item),
58
+ source_origin: canvasOrigin
59
+ });
60
+ var fetcher = new _Fetcher.default({
61
+ onError: function onError() {}
62
+ });
63
+ return fetcher.post(url, {
64
+ body: requestBody
65
+ });
66
+ }
67
+
53
68
  function createItem(item, parentId, parentType) {
54
69
  var parentItemId = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null;
55
70
  var resource = parentType === 'bank' ? 'banks' : 'quizzes';
@@ -157,10 +172,8 @@ function createItem(item, parentId, parentType) {
157
172
  // =====================
158
173
 
159
174
 
160
- function updateItem(item, parentId, parentType) {
161
- var resource = parentType === 'bank' ? 'banks' : 'quizzes';
162
- var url = "/api/".concat(resource, "/").concat(parentId, "/items/").concat(item.id);
163
- var itemData = {
175
+ function updateItemParams(item) {
176
+ return {
164
177
  item_body: item.itemBody,
165
178
  title: item.title,
166
179
  scoring_data: item.scoringData,
@@ -172,8 +185,13 @@ function updateItem(item, parentId, parentType) {
172
185
  calculator_type: item.calculatorType,
173
186
  answer_feedback: item.answerFeedback
174
187
  };
188
+ }
189
+
190
+ function updateItem(item, parentId, parentType) {
191
+ var resource = parentType === 'bank' ? 'banks' : 'quizzes';
192
+ var url = "/api/".concat(resource, "/").concat(parentId, "/items/").concat(item.id);
175
193
  var reqBody = JSON.stringify({
176
- item: itemData
194
+ item: updateItemParams(item)
177
195
  });
178
196
  return function (dispatch, getState) {
179
197
  var updateItemParams = {
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.createStimulus = createStimulus;
9
9
  exports.updateStimulus = updateStimulus;
10
+ exports.checkStimulusShareability = checkStimulusShareability;
10
11
 
11
12
  var _quizCommon = require("@instructure/quiz-common");
12
13
 
@@ -61,18 +62,21 @@ function createStimulus(stimulus, parentId, parentType) {
61
62
  // =====================
62
63
 
63
64
 
64
- function updateStimulus(stimulus, parentId, parentType) {
65
- var resource = parentType === 'bank' ? 'banks' : 'quizzes';
66
- var url = "/api/".concat(resource, "/").concat(parentId, "/stimuli/").concat(stimulus.id);
67
- var stimulusData = {
65
+ function updateStimulusParams(stimulus) {
66
+ return {
68
67
  orientation: stimulus.orientation,
69
68
  title: stimulus.title,
70
69
  instructions: stimulus.instructions,
71
70
  body: stimulus.body,
72
71
  source_url: stimulus.sourceUrl
73
72
  };
73
+ }
74
+
75
+ function updateStimulus(stimulus, parentId, parentType) {
76
+ var resource = parentType === 'bank' ? 'banks' : 'quizzes';
77
+ var url = "/api/".concat(resource, "/").concat(parentId, "/stimuli/").concat(stimulus.id);
74
78
  var reqBody = JSON.stringify({
75
- stimulus: stimulusData
79
+ stimulus: updateStimulusParams(stimulus)
76
80
  });
77
81
  return function (dispatch, getState) {
78
82
  var updateStimulusParams = {
@@ -89,4 +93,18 @@ function updateStimulus(stimulus, parentId, parentType) {
89
93
  return stimulusData;
90
94
  });
91
95
  };
96
+ }
97
+
98
+ function checkStimulusShareability(stimulus, canvasOrigin) {
99
+ var url = '/api/stimuli/check_shareability';
100
+ var requestBody = JSON.stringify({
101
+ stimulus: updateStimulusParams(stimulus),
102
+ source_origin: canvasOrigin
103
+ });
104
+ var fetcher = new _Fetcher.default({
105
+ onError: function onError() {}
106
+ });
107
+ return fetcher.post(url, {
108
+ body: requestBody
109
+ });
92
110
  }
@@ -31,8 +31,6 @@ var _uiThemeable = require("@instructure/ui-themeable");
31
31
 
32
32
  var _quizRce = require("@instructure/quiz-rce");
33
33
 
34
- var _rceChecker = require("../../../../common/util/rceChecker.js");
35
-
36
34
  var _index = require("../../../../common/components/RichContentInput/index.js");
37
35
 
38
36
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
@@ -134,7 +132,6 @@ var ItemFeedbackModal = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
134
132
  parentType: this.props.parentType,
135
133
  parentId: this.props.parentId,
136
134
  importModalCloseOverride: this.returnToFeedback,
137
- useNewRce: (0, _rceChecker.isNewRCEEnabled)(),
138
135
  height: _quizRce.RCE_THREE_LINES_HEIGHT
139
136
  }));
140
137
  }
@@ -143,8 +140,7 @@ var ItemFeedbackModal = (_dec = (0, _uiThemeable.themeable)(_theme.default, styl
143
140
  value: function renderContent() {
144
141
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
145
142
  customStyles: styles.itemStem,
146
- content: this.props.item.itemBody,
147
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
143
+ content: this.props.item.itemBody
148
144
  }), this.renderRichContentInput('correct', (0, _formatMessage.default)('For a correct answer')), this.renderRichContentInput('incorrect', (0, _formatMessage.default)('For an incorrect answer')), this.renderRichContentInput('neutral', (0, _formatMessage.default)('Provide general feedback (regardless of answer)')));
149
145
  }
150
146
  }, {
@@ -29,8 +29,6 @@ var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/f
29
29
 
30
30
  var _index = _interopRequireDefault(require("../../../../../../common/components/RichContentInput/index.js"));
31
31
 
32
- var _rceChecker = require("../../../../../../common/util/rceChecker.js");
33
-
34
32
  var _componentWithOutsideClick = _interopRequireDefault(require("../../../../../../common/components/shared/functionality/componentWithOutsideClick.js"));
35
33
 
36
34
  var _CustomPropTypes = _interopRequireDefault(require("../../../../../../common/util/CustomPropTypes.js"));
@@ -115,8 +113,7 @@ var QuizInstructionsEdit = (_dec = (0, _uiThemeable.themeable)(_theme.default, s
115
113
  onKeyUp: this.props.onInputChange,
116
114
  onChange: this.props.onInputChange,
117
115
  parentType: _quizCommon.PARENT_TYPE_QUIZ,
118
- parentId: this.props.quizId,
119
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
116
+ parentId: this.props.quizId
120
117
  }), /*#__PURE__*/_react.default.createElement("div", {
121
118
  className: styles.footer
122
119
  }, /*#__PURE__*/_react.default.createElement(_uiButtons.Button, {
@@ -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("../../../../../../common/util/rceChecker.js");
29
-
30
28
  var _Overlay = _interopRequireDefault(require("../../../../../../common/components/shared/overlay/Overlay.js"));
31
29
 
32
30
  var _makeScrollable = _interopRequireDefault(require("../../../../../../common/components/shared/functionality/makeScrollable.js"));
@@ -87,8 +85,7 @@ var QuizInstructionsShow = (_dec = (0, _uiThemeable.themeable)(_theme.default, s
87
85
  "data-automation": "instructions-show-text"
88
86
  }, /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
89
87
  customStyles: styles.instructionsShowText,
90
- content: this.props.instructions || (0, _formatMessage.default)('Add Instructions...'),
91
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
88
+ content: this.props.instructions || (0, _formatMessage.default)('Add Instructions...')
92
89
  }))));
93
90
  }
94
91
  }]);
@@ -59,8 +59,6 @@ var _index8 = _interopRequireDefault(require("../../../../../common/components/s
59
59
 
60
60
  var _Item = _interopRequireDefault(require("../../../../../common/records/Item.js"));
61
61
 
62
- var _rceChecker = require("../../../../../common/util/rceChecker.js");
63
-
64
62
  var _quizCommon = require("@instructure/quiz-common");
65
63
 
66
64
  var _index9 = _interopRequireDefault(require("../QuizEntryShow/index.js"));
@@ -216,8 +214,7 @@ var QuizEntry = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _de
216
214
  initialFocusId: this.props.initialFocusId,
217
215
  handleValidationErrorsFromApi: this.props.handleValidationErrorsFromApi,
218
216
  clearValidationErrorsFromApi: this.props.clearValidationErrorsFromApi,
219
- haveValidationErrorsFromApi: Boolean(Object.values(this.props.validationErrorsFromApi).length),
220
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
217
+ haveValidationErrorsFromApi: Boolean(Object.values(this.props.validationErrorsFromApi).length)
221
218
  }, (0, _pick.default)(this.props, ['displayPosition', 'guid', 'draggingOnBuild', 'newHoverPosition', 'quizEntry', 'quizEntries', 'quizId', 'isContentLockedByBlueprint', 'setUi', 'switchOffEditing', 'switchOnEditing', 'shouldClone', 'scrollKey', 'editQuizEntryToggle', 'onEditQuizEntryToggle', 'stimulusOrientation']));
222
219
  }
223
220
  }, {
@@ -424,6 +424,7 @@ var QuizEntryEdit = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles),
424
424
  onContinue: this.handleAddToBankContinue,
425
425
  onAdd: this.handleAddToBank,
426
426
  getEntry: this.getEntryForBank,
427
+ workingEntry: this.props.workingEntry,
427
428
  entryId: this.props.guid,
428
429
  entryType: this.props.quizEntry.entryType,
429
430
  handleValidationErrorsFromApi: this.props.handleValidationErrorsFromApi
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.setAPIEndpoint = setAPIEndpoint;
7
7
  exports.setUserToken = setUserToken;
8
+ exports.setCanvasOrigin = setCanvasOrigin;
8
9
 
9
10
  var _quizCommon = require("@instructure/quiz-common");
10
11
 
@@ -20,4 +21,11 @@ function setUserToken(token) {
20
21
  type: _quizCommon.SET_USER_TOKEN,
21
22
  payload: token
22
23
  };
24
+ }
25
+
26
+ function setCanvasOrigin(canvasHost) {
27
+ return {
28
+ type: _quizCommon.SET_CANVAS_ORIGIN,
29
+ payload: canvasHost
30
+ };
23
31
  }
@@ -105,7 +105,7 @@ var ConfirmationModal = /*#__PURE__*/function (_Component) {
105
105
  as: "h2",
106
106
  "data-automation": "sdk-confirmation-modal-heading"
107
107
  }, title || (0, _formatMessage.default)('Confirm')), /*#__PURE__*/_react.default.createElement(_uiButtons.CloseButton, {
108
- onClick: this.props.closeModal,
108
+ onClick: this.cancelAction,
109
109
  placement: "end",
110
110
  offset: "medium",
111
111
  screenReaderLabel: (0, _formatMessage.default)('Close')
@@ -108,7 +108,9 @@ var SDKApp = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
108
108
  }, {
109
109
  key: "componentWillMount",
110
110
  value: function componentWillMount() {
111
- this.store.dispatch([(0, _config.setAPIEndpoint)(this.props.apiEndpoint), this.setAppContainer(this.props.appContainer), (0, _config.setUserToken)(this.props.userToken), (0, _outcomes.setOutcomesEndpoint)(this.props.outcomesEndpoint), (0, _outcomes.setOutcomesToken)(this.props.outcomesToken), (0, _outcomes.setContextUuid)(this.props.contextUuid)]);
111
+ var _this$props$rceConfig;
112
+
113
+ this.store.dispatch([(0, _config.setAPIEndpoint)(this.props.apiEndpoint), (0, _config.setCanvasOrigin)((_this$props$rceConfig = this.props.rceConfig) === null || _this$props$rceConfig === void 0 ? void 0 : _this$props$rceConfig.canvasOrigin), this.setAppContainer(this.props.appContainer), (0, _config.setUserToken)(this.props.userToken), (0, _outcomes.setOutcomesEndpoint)(this.props.outcomesEndpoint), (0, _outcomes.setOutcomesToken)(this.props.outcomesToken), (0, _outcomes.setContextUuid)(this.props.contextUuid)]);
112
114
  this.store.dispatch((0, _features.getFeatures)());
113
115
 
114
116
  if (this.props.itemBankSharingEnabled) {
@@ -125,10 +127,16 @@ var SDKApp = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
125
127
  }, {
126
128
  key: "componentWillReceiveProps",
127
129
  value: function componentWillReceiveProps(newProps) {
130
+ var _newProps$rceConfig, _this$props$rceConfig2;
131
+
128
132
  if (newProps.apiEndpoint !== this.props.apiEndpoint) {
129
133
  this.store.dispatch((0, _config.setAPIEndpoint)(newProps.apiEndpoint));
130
134
  }
131
135
 
136
+ if (((_newProps$rceConfig = newProps.rceConfig) === null || _newProps$rceConfig === void 0 ? void 0 : _newProps$rceConfig.canvasOrigin) !== ((_this$props$rceConfig2 = this.props.rceConfig) === null || _this$props$rceConfig2 === void 0 ? void 0 : _this$props$rceConfig2.canvasOrigin)) {
137
+ this.store.dispatch((0, _config.setCanvasOrigin)(newProps.rceConfig.canvasOrigin));
138
+ }
139
+
132
140
  if (newProps.appContainer !== this.props.appContainer) {
133
141
  this.store.dispatch(this.setAppContainer(newProps.appContainer));
134
142
  }
@@ -41,8 +41,6 @@ var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/f
41
41
 
42
42
  var _quizRce = require("@instructure/quiz-rce");
43
43
 
44
- var _rceChecker = require("../../../../util/rceChecker.js");
45
-
46
44
  var _theme = _interopRequireDefault(require("./theme.js"));
47
45
 
48
46
  var _dec, _class, _class2, _temp;
@@ -188,8 +186,7 @@ var SidebarItem = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _
188
186
  }, this.getPointsText(pointsPossible || 0))), /*#__PURE__*/_react.default.createElement("div", {
189
187
  className: styles.itemBody
190
188
  }, /*#__PURE__*/_react.default.createElement(_quizRce.RichContentRenderer, {
191
- content: this.props.itemBody,
192
- useNewRce: (0, _rceChecker.isNewRCEEnabled)()
189
+ content: this.props.itemBody
193
190
  })))), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, /*#__PURE__*/_react.default.createElement("div", {
194
191
  className: styles.pinWrapper
195
192
  }, children))));
@@ -5,10 +5,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.mapStateToProps = mapStateToProps;
8
9
  exports.default = void 0;
9
10
 
10
11
  var _reactRedux = require("../../../../react-redux.js");
11
12
 
13
+ var _items = require("../../../../../building/api/items.js");
14
+
15
+ var _stimuli = require("../../../../../building/api/stimuli.js");
16
+
12
17
  var _makeEditable = _interopRequireDefault(require("../../../shared/functionality/makeEditable.js"));
13
18
 
14
19
  var _errorsShowing = require("../../../../actions/errorsShowing.js");
@@ -17,6 +22,10 @@ var _alerts = require("../../../../actions/alerts.js");
17
22
 
18
23
  var _modifications = require("../../../../actions/modifications.js");
19
24
 
25
+ var _modal = require("../../../../actions/modal.js");
26
+
27
+ var _featureCheck = require("../../../../util/featureCheck.js");
28
+
20
29
  var _presenter = _interopRequireDefault(require("./presenter.js"));
21
30
 
22
31
  function mapStateToProps(state, props) {
@@ -24,15 +33,19 @@ function mapStateToProps(state, props) {
24
33
  var workingEntry = props.entry.getWorkingInstance();
25
34
  var isValid = props.isValid !== void 0 ? props.isValid : workingEntry.isValid();
26
35
  return {
36
+ canvasOrigin: state.getIn(['config', 'canvasOrigin']),
37
+ checkBankedContentShareabilityEnabled: (0, _featureCheck.featureOn)('check_banked_content_shareability'),
38
+ checkContentShareability: props.entry.isStimulus ? _stimuli.checkStimulusShareability : _items.checkItemShareability,
27
39
  isValid: isValid
28
40
  };
29
41
  }
30
42
 
31
43
  var mapDispatchToProps = {
32
44
  clearNextQuizEntry: _modifications.clearNextQuizEntry,
33
- showError: _errorsShowing.showError,
34
45
  hideError: _errorsShowing.hideError,
35
- screenreaderNotification: _alerts.screenreaderNotification
46
+ screenreaderNotification: _alerts.screenreaderNotification,
47
+ showError: _errorsShowing.showError,
48
+ withConfirm: _modal.withConfirm
36
49
  };
37
50
 
38
51
  var _default = (0, _makeEditable.default)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_presenter.default));