@instructure/quiz-core 22.10.1 → 22.11.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/es/banks/api/banks.js +18 -97
- package/es/banks/components/SharingModal/index.js +6 -3
- package/es/banks/components/SharingModal/presenter.js +207 -131
- package/es/building/api/items.js +120 -24
- package/es/building/api/quizEntries.js +78 -15
- package/es/building/components/resources/quizEntry/QuizEntryShow/presenter.js +11 -2
- package/es/common/actions/sharedBanks.js +13 -1
- package/es/common/actions/sharingModal.js +7 -0
- package/es/common/components/resources/quiz/AddContent/Body/index.js +1 -1
- package/es/common/components/resources/quiz/AddContent/Body/presenter.js +129 -141
- package/es/common/components/resources/quiz/AddContent/Popover/presenter.js +126 -119
- package/es/common/components/shared/InteractionTypes/index.js +1 -4
- package/es/common/components/shared/InteractionTypes/presenter.js +1 -3
- package/es/common/middleware/sharedBanksMiddleware.js +243 -0
- package/es/common/records/Item.js +2 -1
- package/es/common/records/QuizEntry.js +7 -0
- package/es/common/reducers/sharingModal.js +17 -0
- package/es/common/util/useRemoteComponent.js +127 -0
- package/es/configureStore.js +4 -1
- package/es/index.js +3 -2
- package/lib/banks/api/banks.js +17 -96
- package/lib/banks/components/SharingModal/index.js +5 -2
- package/lib/banks/components/SharingModal/presenter.js +205 -129
- package/lib/building/api/items.js +120 -23
- package/lib/building/api/quizEntries.js +78 -14
- package/lib/building/components/resources/quizEntry/QuizEntryShow/presenter.js +10 -1
- package/lib/common/actions/sharedBanks.js +13 -1
- package/lib/common/actions/sharingModal.js +13 -0
- package/lib/common/components/resources/quiz/AddContent/Body/index.js +1 -1
- package/lib/common/components/resources/quiz/AddContent/Body/presenter.js +132 -141
- package/lib/common/components/resources/quiz/AddContent/Popover/presenter.js +127 -119
- package/lib/common/components/shared/InteractionTypes/index.js +1 -4
- package/lib/common/components/shared/InteractionTypes/presenter.js +1 -3
- package/lib/common/middleware/sharedBanksMiddleware.js +250 -0
- package/lib/common/records/Item.js +2 -1
- package/lib/common/records/QuizEntry.js +7 -0
- package/lib/common/reducers/sharingModal.js +23 -0
- package/lib/common/util/useRemoteComponent.js +134 -0
- package/lib/configureStore.js +4 -1
- package/lib/index.js +22 -0
- package/package.json +8 -8
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createSharedBanksMiddleware = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _Fetcher = _interopRequireDefault(require("../util/Fetcher"));
|
|
11
|
+
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
12
|
+
var _helpers = require("../api/helpers");
|
|
13
|
+
var _callHandlers = require("../api/callHandlers");
|
|
14
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
15
|
+
var _sharingModal = require("../../common/actions/sharingModal");
|
|
16
|
+
var banksApiEndpoint = '/api/banks';
|
|
17
|
+
var chunkSize = 200;
|
|
18
|
+
function getAllinfo(_x, _x2) {
|
|
19
|
+
return _getAllinfo.apply(this, arguments);
|
|
20
|
+
}
|
|
21
|
+
function _getAllinfo() {
|
|
22
|
+
_getAllinfo = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(func, uuids) {
|
|
23
|
+
var info, i, nextChunk, nextData, result;
|
|
24
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
25
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
26
|
+
case 0:
|
|
27
|
+
info = [];
|
|
28
|
+
for (i = 0; i < uuids.length; i += chunkSize) {
|
|
29
|
+
nextChunk = uuids.slice(i, i + chunkSize);
|
|
30
|
+
nextData = func(nextChunk);
|
|
31
|
+
info.push(nextData);
|
|
32
|
+
}
|
|
33
|
+
_context2.prev = 2;
|
|
34
|
+
_context2.next = 5;
|
|
35
|
+
return Promise.all(info);
|
|
36
|
+
case 5:
|
|
37
|
+
result = _context2.sent;
|
|
38
|
+
return _context2.abrupt("return", result.flat());
|
|
39
|
+
case 9:
|
|
40
|
+
_context2.prev = 9;
|
|
41
|
+
_context2.t0 = _context2["catch"](2);
|
|
42
|
+
console.error('Error fetching user info', _context2.t0);
|
|
43
|
+
return _context2.abrupt("return", []);
|
|
44
|
+
case 13:
|
|
45
|
+
case "end":
|
|
46
|
+
return _context2.stop();
|
|
47
|
+
}
|
|
48
|
+
}, _callee2, null, [[2, 9]]);
|
|
49
|
+
}));
|
|
50
|
+
return _getAllinfo.apply(this, arguments);
|
|
51
|
+
}
|
|
52
|
+
function getSharedBankUsers(_x3, _x4) {
|
|
53
|
+
return _getSharedBankUsers.apply(this, arguments);
|
|
54
|
+
}
|
|
55
|
+
function _getSharedBankUsers() {
|
|
56
|
+
_getSharedBankUsers = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(sharedBanksInfo, getUserInfo) {
|
|
57
|
+
var userSharedBanks, userUuids, usersInfo;
|
|
58
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
59
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
60
|
+
case 0:
|
|
61
|
+
userSharedBanks = [];
|
|
62
|
+
userUuids = sharedBanksInfo.filter(function (sb) {
|
|
63
|
+
return sb.entity_type === _quizCommon.SHARED_WITH_USER;
|
|
64
|
+
}).map(function (sb) {
|
|
65
|
+
return sb.entity_id;
|
|
66
|
+
});
|
|
67
|
+
_context3.next = 4;
|
|
68
|
+
return getAllinfo(getUserInfo, userUuids);
|
|
69
|
+
case 4:
|
|
70
|
+
usersInfo = _context3.sent;
|
|
71
|
+
usersInfo.forEach(function (userInfo) {
|
|
72
|
+
var sharedBankInfo = sharedBanksInfo.find(function (sb) {
|
|
73
|
+
return sb.entity_type === _quizCommon.SHARED_WITH_USER && sb.entity_id === userInfo.uuid;
|
|
74
|
+
});
|
|
75
|
+
if (sharedBankInfo) {
|
|
76
|
+
userSharedBanks.push({
|
|
77
|
+
id: sharedBankInfo.id,
|
|
78
|
+
entityType: sharedBankInfo.entity_type,
|
|
79
|
+
entityId: sharedBankInfo.entity_id,
|
|
80
|
+
title: userInfo.fullName,
|
|
81
|
+
avatar: userInfo.avatar,
|
|
82
|
+
permission: sharedBankInfo.permission,
|
|
83
|
+
bankId: sharedBankInfo.bank_id
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return _context3.abrupt("return", userSharedBanks);
|
|
88
|
+
case 7:
|
|
89
|
+
case "end":
|
|
90
|
+
return _context3.stop();
|
|
91
|
+
}
|
|
92
|
+
}, _callee3);
|
|
93
|
+
}));
|
|
94
|
+
return _getSharedBankUsers.apply(this, arguments);
|
|
95
|
+
}
|
|
96
|
+
function getSharedBankCourses(_x5, _x6) {
|
|
97
|
+
return _getSharedBankCourses.apply(this, arguments);
|
|
98
|
+
}
|
|
99
|
+
function _getSharedBankCourses() {
|
|
100
|
+
_getSharedBankCourses = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(sharedBanksInfo, getCourseInfo) {
|
|
101
|
+
var courseSharedBanks, courseUuids, coursesInfo;
|
|
102
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
103
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
104
|
+
case 0:
|
|
105
|
+
courseSharedBanks = [];
|
|
106
|
+
courseUuids = sharedBanksInfo.filter(function (sb) {
|
|
107
|
+
return sb.entity_type === _quizCommon.SHARED_WITH_COURSE;
|
|
108
|
+
}).map(function (sb) {
|
|
109
|
+
return sb.entity_id;
|
|
110
|
+
});
|
|
111
|
+
_context4.next = 4;
|
|
112
|
+
return getAllinfo(getCourseInfo, courseUuids);
|
|
113
|
+
case 4:
|
|
114
|
+
coursesInfo = _context4.sent;
|
|
115
|
+
coursesInfo.forEach(function (courseInfo) {
|
|
116
|
+
var sharedBankInfo = sharedBanksInfo.find(function (sb) {
|
|
117
|
+
return sb.entity_type === _quizCommon.SHARED_WITH_COURSE && sb.entity_id === courseInfo.uuid;
|
|
118
|
+
});
|
|
119
|
+
if (sharedBankInfo) {
|
|
120
|
+
courseSharedBanks.push({
|
|
121
|
+
id: sharedBankInfo.id,
|
|
122
|
+
entityType: sharedBankInfo.entity_type,
|
|
123
|
+
entityId: sharedBankInfo.entity_id,
|
|
124
|
+
title: courseInfo.title,
|
|
125
|
+
permission: sharedBankInfo.permission,
|
|
126
|
+
bankId: sharedBankInfo.bank_id
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return _context4.abrupt("return", courseSharedBanks);
|
|
131
|
+
case 7:
|
|
132
|
+
case "end":
|
|
133
|
+
return _context4.stop();
|
|
134
|
+
}
|
|
135
|
+
}, _callee4);
|
|
136
|
+
}));
|
|
137
|
+
return _getSharedBankCourses.apply(this, arguments);
|
|
138
|
+
}
|
|
139
|
+
function getSharedBankAccounts(_x7, _x8) {
|
|
140
|
+
return _getSharedBankAccounts.apply(this, arguments);
|
|
141
|
+
}
|
|
142
|
+
function _getSharedBankAccounts() {
|
|
143
|
+
_getSharedBankAccounts = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(sharedBanksInfo, getAccountInfo) {
|
|
144
|
+
var accountSharedBanks, accountUuids, accountsInfo;
|
|
145
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
146
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
147
|
+
case 0:
|
|
148
|
+
accountSharedBanks = [];
|
|
149
|
+
accountUuids = sharedBanksInfo.filter(function (sb) {
|
|
150
|
+
return sb.entity_type === _quizCommon.SHARED_WITH_ACCOUNT;
|
|
151
|
+
}).map(function (sb) {
|
|
152
|
+
return sb.entity_id;
|
|
153
|
+
});
|
|
154
|
+
_context5.next = 4;
|
|
155
|
+
return getAllinfo(getAccountInfo, accountUuids);
|
|
156
|
+
case 4:
|
|
157
|
+
accountsInfo = _context5.sent;
|
|
158
|
+
accountsInfo.forEach(function (accountInfo) {
|
|
159
|
+
var sharedBankInfo = sharedBanksInfo.find(function (sb) {
|
|
160
|
+
return sb.entity_type === _quizCommon.SHARED_WITH_ACCOUNT && sb.entity_id === accountInfo.uuid;
|
|
161
|
+
});
|
|
162
|
+
if (sharedBankInfo) {
|
|
163
|
+
accountSharedBanks.push({
|
|
164
|
+
id: sharedBankInfo.id,
|
|
165
|
+
entityType: sharedBankInfo.entity_type,
|
|
166
|
+
entityId: sharedBankInfo.entity_id,
|
|
167
|
+
title: accountInfo.name,
|
|
168
|
+
permission: sharedBankInfo.permission,
|
|
169
|
+
bankId: sharedBankInfo.bank_id
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
return _context5.abrupt("return", accountSharedBanks);
|
|
174
|
+
case 7:
|
|
175
|
+
case "end":
|
|
176
|
+
return _context5.stop();
|
|
177
|
+
}
|
|
178
|
+
}, _callee5);
|
|
179
|
+
}));
|
|
180
|
+
return _getSharedBankAccounts.apply(this, arguments);
|
|
181
|
+
}
|
|
182
|
+
var createSharedBanksMiddleware = exports.createSharedBanksMiddleware = function createSharedBanksMiddleware() {
|
|
183
|
+
return function (store) {
|
|
184
|
+
return function (next) {
|
|
185
|
+
return /*#__PURE__*/function () {
|
|
186
|
+
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(action) {
|
|
187
|
+
var _action$payload, bank, getUserInfo, getCourseInfo, getAccountInfo, dispatch, url, startLoading, fetcher, sharedBanksInfo, users, courses, accounts, endLoading;
|
|
188
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
189
|
+
while (1) switch (_context.prev = _context.next) {
|
|
190
|
+
case 0:
|
|
191
|
+
if (!(action.type === _quizCommon.GET_SHARED_BANKS)) {
|
|
192
|
+
_context.next = 23;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
_action$payload = action.payload, bank = _action$payload.bank, getUserInfo = _action$payload.getUserInfo, getCourseInfo = _action$payload.getCourseInfo, getAccountInfo = _action$payload.getAccountInfo;
|
|
196
|
+
dispatch = store.dispatch;
|
|
197
|
+
url = "".concat(banksApiEndpoint, "/").concat(bank.id, "/shared_banks");
|
|
198
|
+
startLoading = {
|
|
199
|
+
loading: true
|
|
200
|
+
};
|
|
201
|
+
dispatch((0, _sharingModal.sharedBankLoadingAction)(startLoading));
|
|
202
|
+
fetcher = new _Fetcher["default"]({
|
|
203
|
+
onError: (0, _helpers.handleError)(dispatch, (0, _formatMessage["default"])('Failed to fetch shared banks.'))
|
|
204
|
+
});
|
|
205
|
+
_context.next = 9;
|
|
206
|
+
return fetcher.get(url);
|
|
207
|
+
case 9:
|
|
208
|
+
sharedBanksInfo = _context.sent;
|
|
209
|
+
// Add bank creator if no data
|
|
210
|
+
if (sharedBanksInfo.length === 0) {
|
|
211
|
+
sharedBanksInfo.push({
|
|
212
|
+
id: '-1',
|
|
213
|
+
entity_type: _quizCommon.SHARED_WITH_USER,
|
|
214
|
+
entity_id: bank.creator,
|
|
215
|
+
permission: _quizCommon.CAN_EDIT,
|
|
216
|
+
bank_id: bank.id
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
_context.next = 13;
|
|
220
|
+
return getSharedBankUsers(sharedBanksInfo, getUserInfo);
|
|
221
|
+
case 13:
|
|
222
|
+
users = _context.sent;
|
|
223
|
+
_context.next = 16;
|
|
224
|
+
return getSharedBankCourses(sharedBanksInfo, getCourseInfo);
|
|
225
|
+
case 16:
|
|
226
|
+
courses = _context.sent;
|
|
227
|
+
_context.next = 19;
|
|
228
|
+
return getSharedBankAccounts(sharedBanksInfo, getAccountInfo);
|
|
229
|
+
case 19:
|
|
230
|
+
accounts = _context.sent;
|
|
231
|
+
dispatch((0, _callHandlers.handleShareBanksResponse)(users.concat(courses).concat(accounts)));
|
|
232
|
+
endLoading = {
|
|
233
|
+
loading: false
|
|
234
|
+
};
|
|
235
|
+
dispatch((0, _sharingModal.sharedBankLoadingAction)(endLoading));
|
|
236
|
+
case 23:
|
|
237
|
+
return _context.abrupt("return", next(action));
|
|
238
|
+
case 24:
|
|
239
|
+
case "end":
|
|
240
|
+
return _context.stop();
|
|
241
|
+
}
|
|
242
|
+
}, _callee);
|
|
243
|
+
}));
|
|
244
|
+
return function (_x9) {
|
|
245
|
+
return _ref.apply(this, arguments);
|
|
246
|
+
};
|
|
247
|
+
}();
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
};
|
|
@@ -149,6 +149,7 @@ var Item = exports.Item = /*#__PURE__*/function (_ReduxRecord) {
|
|
|
149
149
|
feedback: (0, _immutable.Map)(),
|
|
150
150
|
answerFeedback: (0, _immutable.Map)(),
|
|
151
151
|
stimulusId: null,
|
|
152
|
-
calculatorType: 'none'
|
|
152
|
+
calculatorType: 'none',
|
|
153
|
+
metadata: (0, _immutable.Map)()
|
|
153
154
|
}));
|
|
154
155
|
var _default = exports["default"] = Item;
|
|
@@ -316,6 +316,13 @@ var QuizEntry = exports.QuizEntry = (_dec = (0, _withStateCache["default"])(func
|
|
|
316
316
|
get: function get() {
|
|
317
317
|
return !isNaN(parseInt(this.stimulusQuizEntryId, 10));
|
|
318
318
|
}
|
|
319
|
+
}, {
|
|
320
|
+
key: "isAiGenerated",
|
|
321
|
+
get: function get() {
|
|
322
|
+
var _this$getEntry;
|
|
323
|
+
var tags = ((_this$getEntry = this.getEntry()) === null || _this$getEntry === void 0 || (_this$getEntry = _this$getEntry.metadata) === null || _this$getEntry === void 0 ? void 0 : _this$getEntry.get('tags', (0, _immutable.List)())) || (0, _immutable.List)();
|
|
324
|
+
return tags.includes('ai-generated');
|
|
325
|
+
}
|
|
319
326
|
}, {
|
|
320
327
|
key: "isTemporary",
|
|
321
328
|
get: function get() {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _immutable = require("immutable");
|
|
8
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
9
|
+
var changeLoading = function changeLoading(state, payload) {
|
|
10
|
+
return state.merge({
|
|
11
|
+
loading: payload.loading !== undefined ? payload.loading : state.loading
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
var _default = exports["default"] = function _default() {
|
|
15
|
+
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _immutable.fromJS)({});
|
|
16
|
+
var action = arguments.length > 1 ? arguments[1] : undefined;
|
|
17
|
+
switch (action.type) {
|
|
18
|
+
case _quizCommon.CHANGE_MODAL_LOADING:
|
|
19
|
+
return changeLoading(state, action.payload);
|
|
20
|
+
default:
|
|
21
|
+
return state;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useRemoteComponent = useRemoteComponent;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
13
|
+
// @ts-check
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Custom hook to load and render a remote component asynchronously.
|
|
17
|
+
*
|
|
18
|
+
* @param {() => Promise<{
|
|
19
|
+
* render: (container: HTMLElement, props: unknown) => void,
|
|
20
|
+
* unmount?: () => void
|
|
21
|
+
* }>} loadRemoteModule - A function that returns a promise resolving to the remote component module
|
|
22
|
+
* @param {unknown | undefined} props - Props to pass to the remote component when rendering
|
|
23
|
+
* @param {boolean} enabled - Whether the remote component should be loaded and rendered
|
|
24
|
+
*
|
|
25
|
+
* @returns {{
|
|
26
|
+
* containerRef: React.MutableRefObject<HTMLDivElement | null>,
|
|
27
|
+
* componentActivityState: 'idle' | 'pending' | 'success' | 'error',
|
|
28
|
+
* componentError: Error | null,
|
|
29
|
+
* unmount: () => void
|
|
30
|
+
* }} An object containing the container ref and unmount function
|
|
31
|
+
*/
|
|
32
|
+
function useRemoteComponent(loadRemoteModule, props) {
|
|
33
|
+
var enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
34
|
+
var mountCancelled = (0, _react.useRef)(false);
|
|
35
|
+
var _useState = (0, _react.useState)(/** @type {'idle' | 'pending' | 'success' | 'error'} */'idle'),
|
|
36
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
37
|
+
componentActivityState = _useState2[0],
|
|
38
|
+
setComponentActivityState = _useState2[1];
|
|
39
|
+
var _useState3 = (0, _react.useState)(/** @type {Error | null} */null),
|
|
40
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
41
|
+
componentError = _useState4[0],
|
|
42
|
+
setComponentError = _useState4[1];
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @type {React.MutableRefObject<{
|
|
46
|
+
* render: (container: HTMLElement, props: unknown) => void,
|
|
47
|
+
* unmount?: () => void
|
|
48
|
+
* } | null>}
|
|
49
|
+
*/
|
|
50
|
+
var remoteModuleRef = (0, _react.useRef)(null);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @type {React.MutableRefObject<HTMLDivElement | null>}
|
|
54
|
+
*/
|
|
55
|
+
var containerRef = (0, _react.useRef)(null);
|
|
56
|
+
|
|
57
|
+
// Note: This workflow can be converted to a TanStack Query hook in the future.
|
|
58
|
+
(0, _react.useEffect)(function () {
|
|
59
|
+
if (loadRemoteModule == null || !enabled || componentActivityState === 'error') {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
mountCancelled.current = false;
|
|
63
|
+
setComponentActivityState('idle');
|
|
64
|
+
function loadModule() {
|
|
65
|
+
return _loadModule.apply(this, arguments);
|
|
66
|
+
}
|
|
67
|
+
function _loadModule() {
|
|
68
|
+
_loadModule = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
69
|
+
var module;
|
|
70
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
71
|
+
while (1) switch (_context.prev = _context.next) {
|
|
72
|
+
case 0:
|
|
73
|
+
_context.prev = 0;
|
|
74
|
+
if (!remoteModuleRef.current) {
|
|
75
|
+
_context.next = 4;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
setComponentActivityState('success');
|
|
79
|
+
return _context.abrupt("return", remoteModuleRef.current);
|
|
80
|
+
case 4:
|
|
81
|
+
setComponentActivityState('pending');
|
|
82
|
+
_context.next = 7;
|
|
83
|
+
return loadRemoteModule();
|
|
84
|
+
case 7:
|
|
85
|
+
module = _context.sent;
|
|
86
|
+
setComponentActivityState('success');
|
|
87
|
+
return _context.abrupt("return", module);
|
|
88
|
+
case 12:
|
|
89
|
+
_context.prev = 12;
|
|
90
|
+
_context.t0 = _context["catch"](0);
|
|
91
|
+
setComponentActivityState('error');
|
|
92
|
+
setComponentError(new Error((0, _formatMessage["default"])('Failed to load remote module: {error}', {
|
|
93
|
+
error: _context.t0
|
|
94
|
+
})));
|
|
95
|
+
case 16:
|
|
96
|
+
case "end":
|
|
97
|
+
return _context.stop();
|
|
98
|
+
}
|
|
99
|
+
}, _callee, null, [[0, 12]]);
|
|
100
|
+
}));
|
|
101
|
+
return _loadModule.apply(this, arguments);
|
|
102
|
+
}
|
|
103
|
+
loadModule().then(function (module) {
|
|
104
|
+
if (module) {
|
|
105
|
+
remoteModuleRef.current = module;
|
|
106
|
+
}
|
|
107
|
+
var container = containerRef.current;
|
|
108
|
+
if (container == null || module == null || mountCancelled.current) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
module.render(container, props);
|
|
112
|
+
});
|
|
113
|
+
return function () {
|
|
114
|
+
mountCancelled.current = true;
|
|
115
|
+
};
|
|
116
|
+
}, [loadRemoteModule, props, enabled]);
|
|
117
|
+
var unmount = (0, _react.useCallback)(function () {
|
|
118
|
+
var _module$unmount;
|
|
119
|
+
if (mountCancelled.current || !containerRef.current) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
var module = remoteModuleRef.current;
|
|
123
|
+
if (!module) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
(_module$unmount = module.unmount) === null || _module$unmount === void 0 || _module$unmount.call(module);
|
|
127
|
+
}, []);
|
|
128
|
+
return {
|
|
129
|
+
containerRef: containerRef,
|
|
130
|
+
componentActivityState: componentActivityState,
|
|
131
|
+
componentError: componentError,
|
|
132
|
+
unmount: unmount
|
|
133
|
+
};
|
|
134
|
+
}
|
package/lib/configureStore.js
CHANGED
|
@@ -17,6 +17,7 @@ var _alertTimerMiddleware = _interopRequireDefault(require("./common/middleware/
|
|
|
17
17
|
var _crossDomainMessagingMiddleware = _interopRequireDefault(require("./common/middleware/crossDomainMessagingMiddleware"));
|
|
18
18
|
var _eventLoggerMiddleware = _interopRequireDefault(require("./common/middleware/eventLoggerMiddleware"));
|
|
19
19
|
var _quizTimerWebSocketMiddleware = require("./common/middleware/quizTimerWebSocketMiddleware");
|
|
20
|
+
var _sharedBanksMiddleware = require("./common/middleware/sharedBanksMiddleware");
|
|
20
21
|
var _alerts = _interopRequireDefault(require("./common/reducers/alerts"));
|
|
21
22
|
var _banks = _interopRequireDefault(require("./common/reducers/banks"));
|
|
22
23
|
var _bankEntries = _interopRequireDefault(require("./common/reducers/bankEntries"));
|
|
@@ -54,6 +55,7 @@ var _qtiImports = _interopRequireDefault(require("./common/reducers/qtiImports")
|
|
|
54
55
|
var _printing = _interopRequireDefault(require("./common/reducers/printing"));
|
|
55
56
|
var _rce = _interopRequireDefault(require("./common/reducers/rce"));
|
|
56
57
|
var _analyses = _interopRequireDefault(require("./common/reducers/analyses"));
|
|
58
|
+
var _sharingModal = _interopRequireDefault(require("./common/reducers/sharingModal"));
|
|
57
59
|
var _dragAndDrop = _interopRequireDefault(require("./common/reducers/dragAndDrop"));
|
|
58
60
|
var _sharedBanks = _interopRequireDefault(require("./common/reducers/sharedBanks"));
|
|
59
61
|
// middleware
|
|
@@ -85,7 +87,7 @@ function configureStore(_ref) {
|
|
|
85
87
|
var getMiddleware = function getMiddleware(implementation, override) {
|
|
86
88
|
return isTest && override ? override : implementation;
|
|
87
89
|
};
|
|
88
|
-
var middlewares = [getMiddleware(_alertTimerMiddleware["default"], middlewareOverrides.alertTimerMiddleware), getMiddleware(_crossDomainMessagingMiddleware["default"], middlewareOverrides.crossDomainMessagingMiddleware), getMiddleware(_reduxMulti["default"], middlewareOverrides.multiMiddleware), getMiddleware((0, _eventLoggerMiddleware["default"])(), middlewareOverrides.kinesisMiddleware), getMiddleware(_reduxThunk["default"], middlewareOverrides.thunkMiddleware), getMiddleware((0, _quizTimerWebSocketMiddleware.createQuizTimerWebSocketMiddleware)(), middlewareOverrides.websocketMiddleware)];
|
|
90
|
+
var middlewares = [getMiddleware(_alertTimerMiddleware["default"], middlewareOverrides.alertTimerMiddleware), getMiddleware(_crossDomainMessagingMiddleware["default"], middlewareOverrides.crossDomainMessagingMiddleware), getMiddleware(_reduxMulti["default"], middlewareOverrides.multiMiddleware), getMiddleware((0, _eventLoggerMiddleware["default"])(), middlewareOverrides.kinesisMiddleware), getMiddleware(_reduxThunk["default"], middlewareOverrides.thunkMiddleware), getMiddleware((0, _quizTimerWebSocketMiddleware.createQuizTimerWebSocketMiddleware)(), middlewareOverrides.websocketMiddleware), getMiddleware((0, _sharedBanksMiddleware.createSharedBanksMiddleware)(), middlewareOverrides.sharedBanksMiddleware)];
|
|
89
91
|
var devMiddleware = [getMiddleware(loggerMiddleware, middlewareOverrides.logger)];
|
|
90
92
|
if (inDevelopment) {
|
|
91
93
|
middlewares.push.apply(middlewares, devMiddleware);
|
|
@@ -106,6 +108,7 @@ function configureStore(_ref) {
|
|
|
106
108
|
banks: _banks["default"],
|
|
107
109
|
bankEntries: _bankEntries["default"],
|
|
108
110
|
sharedBanks: _sharedBanks["default"],
|
|
111
|
+
sharingModal: _sharingModal["default"],
|
|
109
112
|
calls: _calls["default"],
|
|
110
113
|
config: _config["default"],
|
|
111
114
|
editing: _editing["default"],
|
package/lib/index.js
CHANGED
|
@@ -111,6 +111,7 @@ var _exportNames = {
|
|
|
111
111
|
printWithCss: true,
|
|
112
112
|
ensureImagesLoaded: true,
|
|
113
113
|
ensureRCEContentIsLoaded: true,
|
|
114
|
+
useRemoteComponent: true,
|
|
114
115
|
applyComponentStyleOverride: true,
|
|
115
116
|
withStyleOverrides: true,
|
|
116
117
|
getThemeByKey: true,
|
|
@@ -121,7 +122,9 @@ var _exportNames = {
|
|
|
121
122
|
createQuizEntryRegrade: true,
|
|
122
123
|
getQuizEntry: true,
|
|
123
124
|
moveQuizEntry: true,
|
|
125
|
+
createBulkQuizEntries: true,
|
|
124
126
|
getItem: true,
|
|
127
|
+
createBulkItems: true,
|
|
125
128
|
interactionFileUpload: true,
|
|
126
129
|
setOneAtATimeType: true,
|
|
127
130
|
quizBuildingSession: true,
|
|
@@ -816,6 +819,18 @@ Object.defineProperty(exports, "connect", {
|
|
|
816
819
|
return _reactRedux.connect;
|
|
817
820
|
}
|
|
818
821
|
});
|
|
822
|
+
Object.defineProperty(exports, "createBulkItems", {
|
|
823
|
+
enumerable: true,
|
|
824
|
+
get: function get() {
|
|
825
|
+
return _items.createBulkItems;
|
|
826
|
+
}
|
|
827
|
+
});
|
|
828
|
+
Object.defineProperty(exports, "createBulkQuizEntries", {
|
|
829
|
+
enumerable: true,
|
|
830
|
+
get: function get() {
|
|
831
|
+
return _quizEntries.createBulkQuizEntries;
|
|
832
|
+
}
|
|
833
|
+
});
|
|
819
834
|
Object.defineProperty(exports, "createQuizEntryRegrade", {
|
|
820
835
|
enumerable: true,
|
|
821
836
|
get: function get() {
|
|
@@ -1490,6 +1505,12 @@ Object.defineProperty(exports, "unsetFeatures", {
|
|
|
1490
1505
|
return _featureCheck.unsetFeatures;
|
|
1491
1506
|
}
|
|
1492
1507
|
});
|
|
1508
|
+
Object.defineProperty(exports, "useRemoteComponent", {
|
|
1509
|
+
enumerable: true,
|
|
1510
|
+
get: function get() {
|
|
1511
|
+
return _useRemoteComponent.useRemoteComponent;
|
|
1512
|
+
}
|
|
1513
|
+
});
|
|
1493
1514
|
Object.defineProperty(exports, "withStyleOverrides", {
|
|
1494
1515
|
enumerable: true,
|
|
1495
1516
|
get: function get() {
|
|
@@ -1598,6 +1619,7 @@ var _ElementsForSelectors = require("./common/util/ElementsForSelectors");
|
|
|
1598
1619
|
var _sessionStore = require("./common/util/sessionStore");
|
|
1599
1620
|
var _printUtils = require("./common/util/printUtils");
|
|
1600
1621
|
var _rceChecker = require("./common/util/rceChecker");
|
|
1622
|
+
var _useRemoteComponent = require("./common/util/useRemoteComponent");
|
|
1601
1623
|
var _quizCommon = require("@instructure/quiz-common");
|
|
1602
1624
|
var _getClientIpAddress = require("./common/util/getClientIpAddress");
|
|
1603
1625
|
var _quizEntryRegrades = require("./grading/api/quizEntryRegrades");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instructure/quiz-core",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.11.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "The Quiz React SDK by Instructure Inc.",
|
|
6
6
|
"author": "Instructure, Inc. Engineering and Product Design",
|
|
@@ -111,12 +111,12 @@
|
|
|
111
111
|
"store": "^1.3.20",
|
|
112
112
|
"striptags": "^2.0.0",
|
|
113
113
|
"uuid": "^3.2.1",
|
|
114
|
-
"@instructure/quiz-
|
|
115
|
-
"@instructure/quiz-
|
|
116
|
-
"@instructure/quiz-interactions": "22.
|
|
117
|
-
"@instructure/quiz-number-input": "22.
|
|
118
|
-
"instructure-
|
|
119
|
-
"
|
|
114
|
+
"@instructure/quiz-i18n": "22.11.0",
|
|
115
|
+
"@instructure/quiz-common": "22.11.0",
|
|
116
|
+
"@instructure/quiz-interactions": "22.11.0",
|
|
117
|
+
"@instructure/quiz-number-input": "22.11.0",
|
|
118
|
+
"@instructure/quiz-rce": "22.11.0",
|
|
119
|
+
"instructure-validations": "22.11.0"
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
122
122
|
"@instructure/ui-axe-check": "10.17.0",
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"sinon": "^6.1.3",
|
|
146
146
|
"sinon-chai": "^3.3.0",
|
|
147
147
|
"@instructure/quiz-scripts": "21.0.0",
|
|
148
|
-
"quiz-presets": "22.
|
|
148
|
+
"quiz-presets": "22.11.0"
|
|
149
149
|
},
|
|
150
150
|
"peerDependencies": {
|
|
151
151
|
"react": "^15 || ^16"
|