@instructure/quiz-core 17.46.2-rc.7 → 17.47.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/es/banks/components/AddToBankModal/index.js +6 -0
- package/es/banks/components/AddToBankModal/presenter.js +128 -6
- package/es/banks/components/BankEntry/presenter.js +4 -3
- package/es/building/api/items.js +21 -5
- package/es/building/api/stimuli.js +21 -5
- package/es/building/components/resources/quizEntry/QuizEntryEdit/presenter.js +1 -0
- package/es/common/actions/config.js +7 -1
- package/es/common/components/ApiFeatureFlagInitializer/index.js +36 -0
- package/es/common/components/ConfirmationModal/presenter.js +1 -1
- package/es/common/{util → components/RceConfigProvider}/RceConfigProvider.js +66 -51
- package/es/common/components/SDKApp/index.js +14 -7
- package/es/common/components/resources/entry/EntrySave/index.js +11 -5
- package/es/common/components/resources/entry/EntrySave/presenter.js +95 -21
- package/es/common/components/resources/stimulus/StimulusEdit/presenter.js +1 -0
- package/es/common/reducers/config.js +4 -1
- package/es/common/util/rceChecker.js +1 -1
- package/es/common/util/windowChecks.js +4 -1
- package/lib/banks/components/AddToBankModal/index.js +9 -0
- package/lib/banks/components/AddToBankModal/presenter.js +135 -6
- package/lib/banks/components/BankEntry/presenter.js +4 -3
- package/lib/building/api/items.js +23 -5
- package/lib/building/api/stimuli.js +23 -5
- package/lib/building/components/resources/quizEntry/QuizEntryEdit/presenter.js +1 -0
- package/lib/common/actions/config.js +8 -0
- package/lib/common/components/ApiFeatureFlagInitializer/index.js +53 -0
- package/lib/common/components/ConfirmationModal/presenter.js +1 -1
- package/lib/common/{util → components/RceConfigProvider}/RceConfigProvider.js +66 -51
- package/lib/common/components/SDKApp/index.js +17 -10
- package/lib/common/components/resources/entry/EntrySave/index.js +15 -2
- package/lib/common/components/resources/entry/EntrySave/presenter.js +96 -21
- package/lib/common/components/resources/stimulus/StimulusEdit/presenter.js +1 -0
- package/lib/common/reducers/config.js +3 -0
- package/lib/common/util/rceChecker.js +1 -1
- package/lib/common/util/windowChecks.js +8 -2
- package/package.json +10 -10
|
@@ -21,27 +21,27 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
21
21
|
|
|
22
22
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
23
23
|
|
|
24
|
-
var _reactRedux = require("../../
|
|
24
|
+
var _reactRedux = require("../../react-redux.js");
|
|
25
25
|
|
|
26
|
-
var _reduxStore = _interopRequireDefault(require("
|
|
26
|
+
var _reduxStore = _interopRequireDefault(require("../../../reduxStore.js"));
|
|
27
27
|
|
|
28
|
-
var _rce = require("
|
|
28
|
+
var _rce = require("../../actions/rce.js");
|
|
29
29
|
|
|
30
|
-
var _rceChecker = require("
|
|
30
|
+
var _rceChecker = require("../../util/rceChecker.js");
|
|
31
31
|
|
|
32
|
-
var _Spinner = require("../
|
|
32
|
+
var _Spinner = require("../shared/spinner/Spinner.js");
|
|
33
33
|
|
|
34
|
-
var _index = require("../
|
|
34
|
+
var _index = require("../shared/Card/index.js");
|
|
35
35
|
|
|
36
36
|
var _quizCommon = require("@instructure/quiz-common");
|
|
37
37
|
|
|
38
|
-
var _alerts = require("
|
|
38
|
+
var _alerts = require("../../actions/alerts.js");
|
|
39
39
|
|
|
40
40
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
41
41
|
|
|
42
42
|
var _quizInteractions = require("@instructure/quiz-interactions");
|
|
43
43
|
|
|
44
|
-
var _windowChecks = require("
|
|
44
|
+
var _windowChecks = require("../../util/windowChecks.js");
|
|
45
45
|
|
|
46
46
|
var _ref4 = /*#__PURE__*/_react.default.createElement(_index.Card, {
|
|
47
47
|
wrapped: true
|
|
@@ -67,6 +67,10 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
67
67
|
return !!(props.contextId && props.contextType && props.canvasUserId && props.rcsHost && props.rcsJwtRefreshFn && props.rcsJwt);
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
var isRce5Disabled = function isRce5Disabled() {
|
|
71
|
+
return !props.isNewRCEEnabled && !props.rce5Renderer;
|
|
72
|
+
};
|
|
73
|
+
|
|
70
74
|
var refreshToken = /*#__PURE__*/function () {
|
|
71
75
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(setTokenFn, questionStem) {
|
|
72
76
|
var _response$json;
|
|
@@ -77,39 +81,37 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
77
81
|
switch (_context.prev = _context.next) {
|
|
78
82
|
case 0:
|
|
79
83
|
if (hasAllPropsForRcs()) {
|
|
80
|
-
_context.next =
|
|
84
|
+
_context.next = 2;
|
|
81
85
|
break;
|
|
82
86
|
}
|
|
83
87
|
|
|
84
|
-
handleErrorFunc('Invalid RCS configuration');
|
|
85
88
|
return _context.abrupt("return");
|
|
86
89
|
|
|
87
|
-
case
|
|
88
|
-
_context.next =
|
|
90
|
+
case 2:
|
|
91
|
+
_context.next = 4;
|
|
89
92
|
return props.rcsJwtRefreshFn(jwt);
|
|
90
93
|
|
|
91
|
-
case
|
|
94
|
+
case 4:
|
|
92
95
|
response = _context.sent;
|
|
93
96
|
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
97
|
|
|
95
98
|
if (refreshedToken) {
|
|
96
|
-
_context.next =
|
|
99
|
+
_context.next = 11;
|
|
97
100
|
break;
|
|
98
101
|
}
|
|
99
102
|
|
|
100
|
-
handleErrorFunc('Unable to refresh RCS token');
|
|
101
103
|
normalizedStem = questionStem !== null && questionStem !== void 0 ? questionStem : 'Unknown stem';
|
|
102
104
|
extractedText = (0, _quizInteractions.extractTextFromHtml)(normalizedStem);
|
|
103
|
-
|
|
105
|
+
handleError((0, _formatMessage.default)('Error while answering "{stem}": Full functionality of the Rich Content Editor may not have been available to the user.', {
|
|
104
106
|
stem: extractedText
|
|
105
107
|
}));
|
|
106
108
|
return _context.abrupt("return");
|
|
107
109
|
|
|
108
|
-
case
|
|
110
|
+
case 11:
|
|
109
111
|
setJwt(refreshedToken);
|
|
110
112
|
setTokenFn(refreshedToken);
|
|
111
113
|
|
|
112
|
-
case
|
|
114
|
+
case 13:
|
|
113
115
|
case "end":
|
|
114
116
|
return _context.stop();
|
|
115
117
|
}
|
|
@@ -122,8 +124,34 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
122
124
|
};
|
|
123
125
|
}();
|
|
124
126
|
|
|
125
|
-
var
|
|
126
|
-
|
|
127
|
+
var handleError = function handleError(quizLogMessage) {
|
|
128
|
+
if (shouldAlertUser()) {
|
|
129
|
+
alertTheUser(alertMessage());
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (shouldsetEventToQuizLog()) {
|
|
133
|
+
setEventToQuizLog(quizLogMessage);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
var alertTheUser = function alertTheUser(message) {
|
|
138
|
+
_reduxStore.default.dispatch((0, _alerts.addError)(message));
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
var setEventToQuizLog = function setEventToQuizLog(message) {
|
|
142
|
+
props.setEventToQuizLog(message);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
var alertMessage = function alertMessage() {
|
|
146
|
+
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.');
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
var shouldAlertUser = function shouldAlertUser() {
|
|
150
|
+
return (0, _windowChecks.isQuizTaking)() || (0, _windowChecks.isQuizBuilding)();
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
var shouldsetEventToQuizLog = function shouldsetEventToQuizLog() {
|
|
154
|
+
return (0, _windowChecks.isQuizTaking)();
|
|
127
155
|
};
|
|
128
156
|
|
|
129
157
|
var getConfig = function getConfig() {
|
|
@@ -136,14 +164,6 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
136
164
|
};
|
|
137
165
|
};
|
|
138
166
|
|
|
139
|
-
var setErrorIfDuringTaking = function setErrorIfDuringTaking(errorMessage) {
|
|
140
|
-
if (!(0, _windowChecks.isQuizTaking)()) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
props.setRCEError(errorMessage);
|
|
145
|
-
};
|
|
146
|
-
|
|
147
167
|
(0, _react.useEffect)(function () {
|
|
148
168
|
(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
149
169
|
var host, base, url, response, json;
|
|
@@ -151,7 +171,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
151
171
|
while (1) {
|
|
152
172
|
switch (_context2.prev = _context2.next) {
|
|
153
173
|
case 0:
|
|
154
|
-
if (!(
|
|
174
|
+
if (!isRce5Disabled()) {
|
|
155
175
|
_context2.next = 2;
|
|
156
176
|
break;
|
|
157
177
|
}
|
|
@@ -166,7 +186,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
166
186
|
break;
|
|
167
187
|
}
|
|
168
188
|
|
|
169
|
-
|
|
189
|
+
handleError((0, _formatMessage.default)('Error: Full functionality of the Rich Content Editor may not have been available to the user.'));
|
|
170
190
|
return _context2.abrupt("return");
|
|
171
191
|
|
|
172
192
|
case 6:
|
|
@@ -190,7 +210,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
190
210
|
case 16:
|
|
191
211
|
json = _context2.sent;
|
|
192
212
|
setCanvasConfig(json);
|
|
193
|
-
|
|
213
|
+
setEventToQuizLog(null);
|
|
194
214
|
_context2.next = 25;
|
|
195
215
|
break;
|
|
196
216
|
|
|
@@ -198,7 +218,7 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
198
218
|
_context2.prev = 21;
|
|
199
219
|
_context2.t0 = _context2["catch"](2);
|
|
200
220
|
setCanvasConfig(null);
|
|
201
|
-
|
|
221
|
+
handleError((0, _formatMessage.default)('Error: Full functionality of the Rich Content Editor including accessibility features may not have been available to the user.'));
|
|
202
222
|
|
|
203
223
|
case 25:
|
|
204
224
|
_context2.prev = 25;
|
|
@@ -214,19 +234,17 @@ var RceConfigProviderComponent = function RceConfigProviderComponent(props) {
|
|
|
214
234
|
}))();
|
|
215
235
|
}, [props.isNewRCEEnabled, props.rce5Renderer]);
|
|
216
236
|
|
|
217
|
-
if (
|
|
218
|
-
|
|
219
|
-
if (!canvasConfigLoading) {
|
|
220
|
-
return /*#__PURE__*/_react.default.createElement(_quizCommon.RceConfigContext.Provider, {
|
|
221
|
-
value: getConfig()
|
|
222
|
-
}, props.children);
|
|
223
|
-
}
|
|
224
|
-
} else {
|
|
225
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.children);
|
|
226
|
-
}
|
|
237
|
+
if (isRce5Disabled()) {
|
|
238
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.children);
|
|
227
239
|
}
|
|
228
240
|
|
|
229
|
-
|
|
241
|
+
if (!canvasConfigLoading) {
|
|
242
|
+
return /*#__PURE__*/_react.default.createElement(_quizCommon.RceConfigContext.Provider, {
|
|
243
|
+
value: getConfig()
|
|
244
|
+
}, props.children);
|
|
245
|
+
} else {
|
|
246
|
+
return _ref4;
|
|
247
|
+
}
|
|
230
248
|
};
|
|
231
249
|
|
|
232
250
|
exports.RceConfigProviderComponent = RceConfigProviderComponent;
|
|
@@ -235,15 +253,14 @@ RceConfigProviderComponent.propTypes = {
|
|
|
235
253
|
isNewRCEEnabled: _propTypes.default.bool.isRequired,
|
|
236
254
|
rce5Renderer: _propTypes.default.bool.isRequired,
|
|
237
255
|
isNewRCEAppsEnabled: _propTypes.default.bool,
|
|
238
|
-
|
|
256
|
+
setEventToQuizLog: _propTypes.default.func.isRequired,
|
|
239
257
|
contextId: _propTypes.default.string,
|
|
240
258
|
contextType: _propTypes.default.string,
|
|
241
259
|
canvasUserId: _propTypes.default.string,
|
|
242
260
|
rcsHost: _propTypes.default.string,
|
|
243
261
|
rcsJwt: _propTypes.default.string,
|
|
244
262
|
rcsJwtRefreshFn: _propTypes.default.func,
|
|
245
|
-
canvasOrigin: _propTypes.default.string
|
|
246
|
-
loadedApiFeatures: _propTypes.default.bool
|
|
263
|
+
canvasOrigin: _propTypes.default.string
|
|
247
264
|
};
|
|
248
265
|
RceConfigProviderComponent.defaultProps = {
|
|
249
266
|
contextId: null,
|
|
@@ -253,21 +270,19 @@ RceConfigProviderComponent.defaultProps = {
|
|
|
253
270
|
rcsJwt: null,
|
|
254
271
|
rcsJwtRefreshFn: null,
|
|
255
272
|
canvasOrigin: null,
|
|
256
|
-
loadedApiFeatures: false,
|
|
257
273
|
isNewRCEAppsEnabled: false
|
|
258
274
|
};
|
|
259
275
|
|
|
260
|
-
var mapStateToProps = function mapStateToProps(
|
|
276
|
+
var mapStateToProps = function mapStateToProps() {
|
|
261
277
|
return {
|
|
262
278
|
isNewRCEEnabled: (0, _rceChecker.isNewRCEEnabled)(),
|
|
263
279
|
rce5Renderer: (0, _rceChecker.isRCE5RendererEnabled)(),
|
|
264
|
-
isNewRCEAppsEnabled: (0, _rceChecker.isNewRCEAppsEnabled)()
|
|
265
|
-
loadedApiFeatures: state.getIn(['ui', 'loadedApiFeatures']) || ownProps.loadedApiFeatures
|
|
280
|
+
isNewRCEAppsEnabled: (0, _rceChecker.isNewRCEAppsEnabled)()
|
|
266
281
|
};
|
|
267
282
|
};
|
|
268
283
|
|
|
269
284
|
var mapDispatchToProps = {
|
|
270
|
-
|
|
285
|
+
setEventToQuizLog: _rce.setRCEError
|
|
271
286
|
};
|
|
272
287
|
var RceConfigProvider = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(RceConfigProviderComponent);
|
|
273
288
|
exports.RceConfigProvider = RceConfigProvider;
|
|
@@ -35,15 +35,13 @@ var _reduxStore = _interopRequireDefault(require("../../../reduxStore.js"));
|
|
|
35
35
|
|
|
36
36
|
var _quizCommon = require("@instructure/quiz-common");
|
|
37
37
|
|
|
38
|
-
var _features = require("../../api/features.js");
|
|
39
|
-
|
|
40
38
|
var _ui = require("../../actions/ui.js");
|
|
41
39
|
|
|
42
40
|
var _config = require("../../actions/config.js");
|
|
43
41
|
|
|
44
42
|
var _outcomes = require("../../actions/outcomes.js");
|
|
45
43
|
|
|
46
|
-
var
|
|
44
|
+
var _features = require("../../actions/features.js");
|
|
47
45
|
|
|
48
46
|
var _renderAlerts = _interopRequireDefault(require("../../util/renderAlerts.js"));
|
|
49
47
|
|
|
@@ -55,7 +53,9 @@ var _index = _interopRequireDefault(require("../ConfirmationModal/index.js"));
|
|
|
55
53
|
|
|
56
54
|
var _setupFormatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/util/setupFormatMessage"));
|
|
57
55
|
|
|
58
|
-
var _RceConfigProvider = require("
|
|
56
|
+
var _RceConfigProvider = require("../RceConfigProvider/RceConfigProvider.js");
|
|
57
|
+
|
|
58
|
+
var _index2 = require("../ApiFeatureFlagInitializer/index.js");
|
|
59
59
|
|
|
60
60
|
var _dec, _class, _class2, _temp;
|
|
61
61
|
|
|
@@ -108,11 +108,12 @@ var SDKApp = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
|
|
|
108
108
|
}, {
|
|
109
109
|
key: "componentWillMount",
|
|
110
110
|
value: function componentWillMount() {
|
|
111
|
-
|
|
112
|
-
|
|
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)]);
|
|
113
114
|
|
|
114
115
|
if (this.props.itemBankSharingEnabled) {
|
|
115
|
-
this.store.dispatch((0,
|
|
116
|
+
this.store.dispatch((0, _features.addFeatures)('item_bank_sharing'));
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
}, {
|
|
@@ -125,10 +126,16 @@ var SDKApp = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
|
|
|
125
126
|
}, {
|
|
126
127
|
key: "componentWillReceiveProps",
|
|
127
128
|
value: function componentWillReceiveProps(newProps) {
|
|
129
|
+
var _newProps$rceConfig, _this$props$rceConfig2;
|
|
130
|
+
|
|
128
131
|
if (newProps.apiEndpoint !== this.props.apiEndpoint) {
|
|
129
132
|
this.store.dispatch((0, _config.setAPIEndpoint)(newProps.apiEndpoint));
|
|
130
133
|
}
|
|
131
134
|
|
|
135
|
+
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)) {
|
|
136
|
+
this.store.dispatch((0, _config.setCanvasOrigin)(newProps.rceConfig.canvasOrigin));
|
|
137
|
+
}
|
|
138
|
+
|
|
132
139
|
if (newProps.appContainer !== this.props.appContainer) {
|
|
133
140
|
this.store.dispatch(this.setAppContainer(newProps.appContainer));
|
|
134
141
|
}
|
|
@@ -150,7 +157,7 @@ var SDKApp = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
|
|
|
150
157
|
}
|
|
151
158
|
|
|
152
159
|
if (newProps.itemBankSharingEnabled !== this.props.itemBankSharingEnabled) {
|
|
153
|
-
var toggleFeature = newProps.itemBankSharingEnabled ?
|
|
160
|
+
var toggleFeature = newProps.itemBankSharingEnabled ? _features.addFeatures : _features.removeFeatures;
|
|
154
161
|
this.store.dispatch(toggleFeature('item_bank_sharing'));
|
|
155
162
|
}
|
|
156
163
|
}
|
|
@@ -162,13 +169,13 @@ var SDKApp = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_
|
|
|
162
169
|
context = this.context;
|
|
163
170
|
return /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
|
|
164
171
|
store: store
|
|
165
|
-
}, /*#__PURE__*/_react.default.createElement(_RceConfigProvider.RceConfigProvider, this.props.rceConfig, /*#__PURE__*/_react.default.createElement(_uiI18n.ApplyLocale, {
|
|
172
|
+
}, /*#__PURE__*/_react.default.createElement(_index2.ApiFeatureFlagInitializer, null, /*#__PURE__*/_react.default.createElement(_RceConfigProvider.RceConfigProvider, this.props.rceConfig, /*#__PURE__*/_react.default.createElement(_uiI18n.ApplyLocale, {
|
|
166
173
|
locale: (0, _quizCommon.getLocale)(props, context),
|
|
167
174
|
timezone: props.timeZone
|
|
168
175
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
169
176
|
className: styles.sdk,
|
|
170
177
|
"data-automation": "sdk-app"
|
|
171
|
-
}, _ref, props.children))));
|
|
178
|
+
}, _ref, props.children)))));
|
|
172
179
|
}
|
|
173
180
|
}]);
|
|
174
181
|
SDKApp.displayName = "SDKApp";
|
|
@@ -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));
|
|
@@ -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.
|
|
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
|
|
180
|
+
var _successfulSubmit = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
115
181
|
var validationResult;
|
|
116
|
-
return _regenerator.default.wrap(function
|
|
182
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
117
183
|
while (1) {
|
|
118
|
-
switch (
|
|
184
|
+
switch (_context2.prev = _context2.next) {
|
|
119
185
|
case 0:
|
|
120
186
|
this.setState({
|
|
121
187
|
canSubmit: false
|
|
122
188
|
});
|
|
123
|
-
|
|
124
|
-
|
|
189
|
+
_context2.prev = 1;
|
|
190
|
+
_context2.next = 4;
|
|
125
191
|
return this.props.submitHandler();
|
|
126
192
|
|
|
127
193
|
case 4:
|
|
128
|
-
validationResult =
|
|
194
|
+
validationResult = _context2.sent;
|
|
129
195
|
|
|
130
196
|
if (!(validationResult === _quizCommon.API_INPUT_VALIDATION_ERROR)) {
|
|
131
|
-
|
|
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
|
-
|
|
205
|
+
_context2.next = 14;
|
|
140
206
|
break;
|
|
141
207
|
|
|
142
208
|
case 10:
|
|
143
|
-
|
|
144
|
-
|
|
209
|
+
_context2.prev = 10;
|
|
210
|
+
_context2.t0 = _context2["catch"](1);
|
|
145
211
|
this.setState({
|
|
146
212
|
canSubmit: true
|
|
147
213
|
});
|
|
148
|
-
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
|
|
223
|
+
return _context2.stop();
|
|
158
224
|
}
|
|
159
225
|
}
|
|
160
|
-
},
|
|
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
|
-
|
|
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;
|
|
@@ -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
|
});
|
|
@@ -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
|
|
|
@@ -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 = '
|
|
14
|
+
var newRCEAppsFeatureName = 'rce5_apps';
|
|
15
15
|
var rce5RendererFeatureName = 'rce5_renderer';
|
|
16
16
|
|
|
17
17
|
function isNewRCEEnabled() {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isQuizTaking = exports.onTablet = exports.onPhone = exports.media = void 0;
|
|
6
|
+
exports.isQuizBuilding = exports.isQuizTaking = exports.onTablet = exports.onPhone = exports.media = void 0;
|
|
7
7
|
|
|
8
8
|
var _quizCommon = require("@instructure/quiz-common");
|
|
9
9
|
|
|
@@ -33,4 +33,10 @@ var isQuizTaking = function isQuizTaking() {
|
|
|
33
33
|
return (0, _quizCommon.isDuringQuizTake)();
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
exports.isQuizTaking = isQuizTaking;
|
|
36
|
+
exports.isQuizTaking = isQuizTaking;
|
|
37
|
+
|
|
38
|
+
var isQuizBuilding = function isQuizBuilding() {
|
|
39
|
+
return (0, _quizCommon.isDuringQuizBuild)();
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.isQuizBuilding = isQuizBuilding;
|