@pie-lib/controller-utils 0.22.3-next.2 → 0.22.4-next.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 +7 -70
- package/lib/__tests__/partial-scoring.test.js +31 -0
- package/lib/__tests__/persistence.test.js +256 -0
- package/lib/index.js +2 -9
- package/lib/index.js.map +1 -1
- package/lib/partial-scoring.js +2 -8
- package/lib/partial-scoring.js.map +1 -1
- package/lib/persistence.js +12 -37
- package/lib/persistence.js.map +1 -1
- package/package.json +2 -10
- package/esm/index.css +0 -847
- package/esm/index.js +0 -3011
- package/esm/index.js.map +0 -1
- package/esm/package.json +0 -3
package/lib/persistence.js
CHANGED
|
@@ -1,50 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.lockChoices = exports.getShuffledChoices = exports.compact = void 0;
|
|
9
|
-
|
|
10
8
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
-
|
|
12
9
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
13
|
-
|
|
14
10
|
var _shuffle = _interopRequireDefault(require("lodash/shuffle"));
|
|
15
|
-
|
|
16
11
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
17
|
-
|
|
18
12
|
// eslint-disable-next-line no-console
|
|
19
13
|
var lg = function lg(n) {
|
|
20
14
|
return console[n].bind(console, 'controller-utils:');
|
|
21
15
|
};
|
|
22
|
-
|
|
23
16
|
var debug = lg('debug');
|
|
24
17
|
var log = lg('log');
|
|
25
18
|
var warn = lg('warn');
|
|
26
19
|
var error = lg('error');
|
|
27
|
-
|
|
28
|
-
var compact = function compact(arr) {
|
|
20
|
+
var compact = exports.compact = function compact(arr) {
|
|
29
21
|
if (Array.isArray(arr)) {
|
|
30
22
|
return arr.filter(function (v) {
|
|
31
23
|
return v !== null && v !== undefined;
|
|
32
24
|
});
|
|
33
25
|
}
|
|
34
|
-
|
|
35
26
|
return arr;
|
|
36
27
|
};
|
|
37
|
-
|
|
38
|
-
exports.compact = compact;
|
|
39
|
-
|
|
40
|
-
var getShuffledChoices = function getShuffledChoices(choices, session, updateSession, choiceKey) {
|
|
28
|
+
var getShuffledChoices = exports.getShuffledChoices = function getShuffledChoices(choices, session, updateSession, choiceKey) {
|
|
41
29
|
return new Promise(function (resolve) {
|
|
42
30
|
var _session$data;
|
|
43
|
-
|
|
44
31
|
log('updateSession type: ', (0, _typeof2["default"])(updateSession));
|
|
45
32
|
log('session: ', session);
|
|
46
|
-
var currentShuffled = compact((session === null || session === void 0
|
|
47
|
-
|
|
33
|
+
var currentShuffled = compact((session === null || session === void 0 || (_session$data = session.data) === null || _session$data === void 0 ? void 0 : _session$data.shuffledValues) || (session === null || session === void 0 ? void 0 : session.shuffledValues) || []);
|
|
48
34
|
if (!session) {
|
|
49
35
|
// eslint-disable-next-line quotes
|
|
50
36
|
warn("unable to save shuffled choices because there's no session.");
|
|
@@ -58,7 +44,6 @@ var getShuffledChoices = function getShuffledChoices(choices, session, updateSes
|
|
|
58
44
|
})));
|
|
59
45
|
} else {
|
|
60
46
|
var shuffledChoices = (0, _shuffle["default"])(choices);
|
|
61
|
-
|
|
62
47
|
if (updateSession && typeof updateSession === 'function') {
|
|
63
48
|
try {
|
|
64
49
|
//Note: session.id refers to the id of the element within a session
|
|
@@ -67,14 +52,14 @@ var getShuffledChoices = function getShuffledChoices(choices, session, updateSes
|
|
|
67
52
|
}));
|
|
68
53
|
log('try to save shuffledValues to session...', shuffledValues);
|
|
69
54
|
log('call updateSession... ', session.id, session.element);
|
|
70
|
-
|
|
71
55
|
if ((0, _isEmpty["default"])(shuffledValues)) {
|
|
72
56
|
error("shuffledValues is an empty array? - refusing to call updateSession: shuffledChoices: ".concat(JSON.stringify(shuffledChoices), ", key: ").concat(choiceKey));
|
|
73
57
|
} else {
|
|
74
58
|
updateSession(session.id, session.element, {
|
|
75
59
|
shuffledValues: shuffledValues
|
|
76
60
|
})["catch"](function (e) {
|
|
77
|
-
return (
|
|
61
|
+
return (
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
78
63
|
console.error('update session failed for: ', session.id, e)
|
|
79
64
|
);
|
|
80
65
|
});
|
|
@@ -85,13 +70,14 @@ var getShuffledChoices = function getShuffledChoices(choices, session, updateSes
|
|
|
85
70
|
}
|
|
86
71
|
} else {
|
|
87
72
|
warn('unable to save shuffled choices, shuffle will happen every time.');
|
|
88
|
-
}
|
|
89
|
-
|
|
73
|
+
}
|
|
90
74
|
|
|
75
|
+
//save this shuffle to the session for later retrieval
|
|
91
76
|
resolve(shuffledChoices);
|
|
92
77
|
}
|
|
93
78
|
});
|
|
94
79
|
};
|
|
80
|
+
|
|
95
81
|
/**
|
|
96
82
|
* If we return:
|
|
97
83
|
* - true - that means that the order of the choices will be ordinal (as is created in the configure item)
|
|
@@ -102,37 +88,26 @@ var getShuffledChoices = function getShuffledChoices(choices, session, updateSes
|
|
|
102
88
|
* @param env - env to check if we should lock order
|
|
103
89
|
* @returns {boolean}
|
|
104
90
|
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
exports.getShuffledChoices = getShuffledChoices;
|
|
108
|
-
|
|
109
|
-
var lockChoices = function lockChoices(model, session, env) {
|
|
91
|
+
var lockChoices = exports.lockChoices = function lockChoices(model, session, env) {
|
|
110
92
|
if (model.lockChoiceOrder) {
|
|
111
93
|
return true;
|
|
112
94
|
}
|
|
113
|
-
|
|
114
95
|
log('lockChoiceOrder: ', (0, _get["default"])(env, ['@pie-element', 'lockChoiceOrder'], false));
|
|
115
|
-
|
|
116
96
|
if ((0, _get["default"])(env, ['@pie-element', 'lockChoiceOrder'], false)) {
|
|
117
97
|
return true;
|
|
118
98
|
}
|
|
119
|
-
|
|
120
99
|
var role = (0, _get["default"])(env, 'role', 'student');
|
|
121
|
-
|
|
122
100
|
if (role === 'instructor') {
|
|
123
101
|
// TODO: .. in the future the instructor can toggle between ordinal and shuffled here, so keeping this code until then
|
|
124
|
-
|
|
125
102
|
/*const alreadyShuffled = hasShuffledValues(session);
|
|
126
103
|
if (alreadyShuffled) {
|
|
127
104
|
return false;
|
|
128
105
|
}
|
|
129
106
|
return true;*/
|
|
130
107
|
return true;
|
|
131
|
-
}
|
|
132
|
-
|
|
108
|
+
}
|
|
133
109
|
|
|
110
|
+
// here it's a student, so don't lock and it will shuffle if needs be
|
|
134
111
|
return false;
|
|
135
112
|
};
|
|
136
|
-
|
|
137
|
-
exports.lockChoices = lockChoices;
|
|
138
|
-
//# sourceMappingURL=persistence.js.map
|
|
113
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc2h1ZmZsZSIsIl9pc0VtcHR5IiwibGciLCJuIiwiY29uc29sZSIsImJpbmQiLCJkZWJ1ZyIsImxvZyIsIndhcm4iLCJlcnJvciIsImNvbXBhY3QiLCJleHBvcnRzIiwiYXJyIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwidiIsInVuZGVmaW5lZCIsImdldFNodWZmbGVkQ2hvaWNlcyIsImNob2ljZXMiLCJzZXNzaW9uIiwidXBkYXRlU2Vzc2lvbiIsImNob2ljZUtleSIsIlByb21pc2UiLCJyZXNvbHZlIiwiX3Nlc3Npb24kZGF0YSIsIl90eXBlb2YyIiwiY3VycmVudFNodWZmbGVkIiwiZGF0YSIsInNodWZmbGVkVmFsdWVzIiwiaXNFbXB0eSIsIm1hcCIsImZpbmQiLCJjIiwic2h1ZmZsZWRDaG9pY2VzIiwic2h1ZmZsZSIsImlkIiwiZWxlbWVudCIsImNvbmNhdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJlIiwibG9ja0Nob2ljZXMiLCJtb2RlbCIsImVudiIsImxvY2tDaG9pY2VPcmRlciIsImdldCIsInJvbGUiXSwic291cmNlcyI6WyIuLi9zcmMvcGVyc2lzdGVuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcbmltcG9ydCBzaHVmZmxlIGZyb20gJ2xvZGFzaC9zaHVmZmxlJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbmNvbnN0IGxnID0gKG4pID0+IGNvbnNvbGVbbl0uYmluZChjb25zb2xlLCAnY29udHJvbGxlci11dGlsczonKTtcbmNvbnN0IGRlYnVnID0gbGcoJ2RlYnVnJyk7XG5jb25zdCBsb2cgPSBsZygnbG9nJyk7XG5jb25zdCB3YXJuID0gbGcoJ3dhcm4nKTtcbmNvbnN0IGVycm9yID0gbGcoJ2Vycm9yJyk7XG5cbmV4cG9ydCBjb25zdCBjb21wYWN0ID0gKGFycikgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGFyci5maWx0ZXIoKHYpID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2h1ZmZsZWRDaG9pY2VzID0gKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGNob2ljZUtleSkgPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBsb2coJ3VwZGF0ZVNlc3Npb24gdHlwZTogJywgdHlwZW9mIHVwZGF0ZVNlc3Npb24pO1xuICAgIGxvZygnc2Vzc2lvbjogJywgc2Vzc2lvbik7XG5cbiAgICBjb25zdCBjdXJyZW50U2h1ZmZsZWQgPSBjb21wYWN0KHNlc3Npb24/LmRhdGE/LnNodWZmbGVkVmFsdWVzIHx8IHNlc3Npb24/LnNodWZmbGVkVmFsdWVzIHx8IFtdKTtcblxuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHF1b3Rlc1xuICAgICAgd2FybihcInVuYWJsZSB0byBzYXZlIHNodWZmbGVkIGNob2ljZXMgYmVjYXVzZSB0aGVyZSdzIG5vIHNlc3Npb24uXCIpO1xuICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH0gZWxzZSBpZiAoIWlzRW1wdHkoY3VycmVudFNodWZmbGVkKSkge1xuICAgICAgZGVidWcoJ3VzZSBzaHVmZmxlZFZhbHVlcyB0byBzb3J0IHRoZSBjaG9pY2VzLi4uJywgY3VycmVudFNodWZmbGVkKTtcbiAgICAgIHJlc29sdmUoY29tcGFjdChjdXJyZW50U2h1ZmZsZWQubWFwKCh2KSA9PiBjaG9pY2VzLmZpbmQoKGMpID0+IGNbY2hvaWNlS2V5XSA9PT0gdikpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNodWZmbGVkQ2hvaWNlcyA9IHNodWZmbGUoY2hvaWNlcyk7XG5cbiAgICAgIGlmICh1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy9Ob3RlOiBzZXNzaW9uLmlkIHJlZmVycyB0byB0aGUgaWQgb2YgdGhlIGVsZW1lbnQgd2l0aGluIGEgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IHNodWZmbGVkVmFsdWVzID0gY29tcGFjdChzaHVmZmxlZENob2ljZXMubWFwKChjKSA9PiBjW2Nob2ljZUtleV0pKTtcbiAgICAgICAgICBsb2coJ3RyeSB0byBzYXZlIHNodWZmbGVkVmFsdWVzIHRvIHNlc3Npb24uLi4nLCBzaHVmZmxlZFZhbHVlcyk7XG4gICAgICAgICAgbG9nKCdjYWxsIHVwZGF0ZVNlc3Npb24uLi4gJywgc2Vzc2lvbi5pZCwgc2Vzc2lvbi5lbGVtZW50KTtcblxuICAgICAgICAgIGlmIChpc0VtcHR5KHNodWZmbGVkVmFsdWVzKSkge1xuICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgIGBzaHVmZmxlZFZhbHVlcyBpcyBhbiBlbXB0eSBhcnJheT8gLSByZWZ1c2luZyB0byBjYWxsIHVwZGF0ZVNlc3Npb246IHNodWZmbGVkQ2hvaWNlczogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBzaHVmZmxlZENob2ljZXMsXG4gICAgICAgICAgICAgICl9LCBrZXk6ICR7Y2hvaWNlS2V5fWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24uaWQsIHNlc3Npb24uZWxlbWVudCwgeyBzaHVmZmxlZFZhbHVlcyB9KS5jYXRjaCgoZSkgPT5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigndXBkYXRlIHNlc3Npb24gZmFpbGVkIGZvcjogJywgc2Vzc2lvbi5pZCwgZSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHdhcm4oJ3VuYWJsZSB0byBzYXZlIHNodWZmbGVkIG9yZGVyIGZvciBjaG9pY2VzJyk7XG4gICAgICAgICAgZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oJ3VuYWJsZSB0byBzYXZlIHNodWZmbGVkIGNob2ljZXMsIHNodWZmbGUgd2lsbCBoYXBwZW4gZXZlcnkgdGltZS4nKTtcbiAgICAgIH1cblxuICAgICAgLy9zYXZlIHRoaXMgc2h1ZmZsZSB0byB0aGUgc2Vzc2lvbiBmb3IgbGF0ZXIgcmV0cmlldmFsXG4gICAgICByZXNvbHZlKHNodWZmbGVkQ2hvaWNlcyk7XG4gICAgfVxuICB9KTtcblxuLyoqXG4gKiBJZiB3ZSByZXR1cm46XG4gKiAtIHRydWUgLSB0aGF0IG1lYW5zIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBjaG9pY2VzIHdpbGwgYmUgb3JkaW5hbCAoYXMgaXMgY3JlYXRlZCBpbiB0aGUgY29uZmlndXJlIGl0ZW0pXG4gKiAtIGZhbHNlIC0gdGhhdCBtZWFucyB0aGUgZ2V0U2h1ZmZsZWRDaG9pY2VzIGFib3ZlIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGF0IGluIHR1cm4gbWVhbnMgdGhhdCB3ZSBlaXRoZXJcbiAqIHJldHVybiB0aGUgc2h1ZmZsZWQgdmFsdWVzIG9uIHRoZSBzZXNzaW9uIChpZiBhbnkgZXhpc3RzKSBvciB3ZSBzaHVmZmxlIHRoZSBjaG9pY2VzXG4gKiBAcGFyYW0gbW9kZWwgLSBtb2RlbCB0byBjaGVjayBpZiB3ZSBzaG91bGQgbG9jayBvcmRlclxuICogQHBhcmFtIHNlc3Npb24gLSBzZXNzaW9uIHRvIGNoZWNrIGlmIHdlIHNob3VsZCBsb2NrIG9yZGVyXG4gKiBAcGFyYW0gZW52IC0gZW52IHRvIGNoZWNrIGlmIHdlIHNob3VsZCBsb2NrIG9yZGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGxvY2tDaG9pY2VzID0gKG1vZGVsLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgaWYgKG1vZGVsLmxvY2tDaG9pY2VPcmRlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbG9nKCdsb2NrQ2hvaWNlT3JkZXI6ICcsIGdldChlbnYsIFsnQHBpZS1lbGVtZW50JywgJ2xvY2tDaG9pY2VPcmRlciddLCBmYWxzZSkpO1xuXG4gIGlmIChnZXQoZW52LCBbJ0BwaWUtZWxlbWVudCcsICdsb2NrQ2hvaWNlT3JkZXInXSwgZmFsc2UpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCByb2xlID0gZ2V0KGVudiwgJ3JvbGUnLCAnc3R1ZGVudCcpO1xuXG4gIGlmIChyb2xlID09PSAnaW5zdHJ1Y3RvcicpIHtcbiAgICAvLyBUT0RPOiAuLiBpbiB0aGUgZnV0dXJlIHRoZSBpbnN0cnVjdG9yIGNhbiB0b2dnbGUgYmV0d2VlbiBvcmRpbmFsIGFuZCBzaHVmZmxlZCBoZXJlLCBzbyBrZWVwaW5nIHRoaXMgY29kZSB1bnRpbCB0aGVuXG4gICAgLypjb25zdCBhbHJlYWR5U2h1ZmZsZWQgPSBoYXNTaHVmZmxlZFZhbHVlcyhzZXNzaW9uKTtcblxuICAgIGlmIChhbHJlYWR5U2h1ZmZsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTsqL1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaGVyZSBpdCdzIGEgc3R1ZGVudCwgc28gZG9uJ3QgbG9jayBhbmQgaXQgd2lsbCBzaHVmZmxlIGlmIG5lZWRzIGJlXG4gIHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsSUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxP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RkMsSUFBSSxDQUFDQyxTQUFTLENBQ3BHTixlQUNGLENBQUMsYUFBQUksTUFBQSxDQUFVaEIsU0FBUyxDQUN0QixDQUFDO1VBQ0gsQ0FBQyxNQUFNO1lBQ0xELGFBQWEsQ0FBQ0QsT0FBTyxDQUFDZ0IsRUFBRSxFQUFFaEIsT0FBTyxDQUFDaUIsT0FBTyxFQUFFO2NBQUVSLGNBQWMsRUFBZEE7WUFBZSxDQUFDLENBQUMsU0FBTSxDQUFDLFVBQUNZLENBQUM7Y0FBQTtnQkFDckU7Z0JBQ0FyQyxPQUFPLENBQUNLLEtBQUssQ0FBQyw2QkFBNkIsRUFBRVcsT0FBTyxDQUFDZ0IsRUFBRSxFQUFFSyxDQUFDO2NBQUM7WUFBQSxDQUM3RCxDQUFDO1VBQ0g7UUFDRixDQUFDLENBQUMsT0FBT0EsQ0FBQyxFQUFFO1VBQ1ZqQyxJQUFJLENBQUMsMkNBQTJDLENBQUM7VUFDakRDLEtBQUssQ0FBQ2dDLENBQUMsQ0FBQztRQUNWO01BQ0YsQ0FBQyxNQUFNO1FBQ0xqQyxJQUFJLENBQUMsa0VBQWtFLENBQUM7TUFDMUU7O01BRUE7TUFDQWdCLE9BQU8sQ0FBQ1UsZUFBZSxDQUFDO0lBQzFCO0VBQ0YsQ0FBQyxDQUFDO0FBQUE7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNUSxXQUFXLEdBQUEvQixPQUFBLENBQUErQixXQUFBLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsS0FBSyxFQUFFdkIsT0FBTyxFQUFFd0IsR0FBRyxFQUFLO0VBQ2xELElBQUlELEtBQUssQ0FBQ0UsZUFBZSxFQUFFO0lBQ3pCLE9BQU8sSUFBSTtFQUNiO0VBRUF0QyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBQXVDLGVBQUcsRUFBQ0YsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFFOUUsSUFBSSxJQUFBRSxlQUFHLEVBQUNGLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO0lBQ3hELE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBTUcsSUFBSSxHQUFHLElBQUFELGVBQUcsRUFBQ0YsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7RUFFeEMsSUFBSUcsSUFBSSxLQUFLLFlBQVksRUFBRTtJQUN6QjtJQUNBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7SUFHSSxPQUFPLElBQUk7RUFDYjs7RUFFQTtFQUNBLE9BQU8sS0FBSztBQUNkLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/persistence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"persistence.js","names":["_get","_interopRequireDefault","require","_shuffle","_isEmpty","lg","n","console","bind","debug","log","warn","error","compact","exports","arr","Array","isArray","filter","v","undefined","getShuffledChoices","choices","session","updateSession","choiceKey","Promise","resolve","_session$data","_typeof2","currentShuffled","data","shuffledValues","isEmpty","map","find","c","shuffledChoices","shuffle","id","element","concat","JSON","stringify","e","lockChoices","model","env","lockChoiceOrder","get","role"],"sources":["../src/persistence.js"],"sourcesContent":["import get from 'lodash/get';\nimport shuffle from 'lodash/shuffle';\nimport isEmpty from 'lodash/isEmpty';\n\n// eslint-disable-next-line no-console\nconst lg = (n) => console[n].bind(console, 'controller-utils:');\nconst debug = lg('debug');\nconst log = lg('log');\nconst warn = lg('warn');\nconst error = lg('error');\n\nexport const compact = (arr) => {\n if (Array.isArray(arr)) {\n return arr.filter((v) => v !== null && v !== undefined);\n }\n\n return arr;\n};\n\nexport const getShuffledChoices = (choices, session, updateSession, choiceKey) =>\n new Promise((resolve) => {\n log('updateSession type: ', typeof updateSession);\n log('session: ', session);\n\n const currentShuffled = compact(session?.data?.shuffledValues || session?.shuffledValues || []);\n\n if (!session) {\n // eslint-disable-next-line quotes\n warn(\"unable to save shuffled choices because there's no session.\");\n resolve(undefined);\n } else if (!isEmpty(currentShuffled)) {\n debug('use shuffledValues to sort the choices...', currentShuffled);\n resolve(compact(currentShuffled.map((v) => choices.find((c) => c[choiceKey] === v))));\n } else {\n const shuffledChoices = shuffle(choices);\n\n if (updateSession && typeof updateSession === 'function') {\n try {\n //Note: session.id refers to the id of the element within a session\n const shuffledValues = compact(shuffledChoices.map((c) => c[choiceKey]));\n log('try to save shuffledValues to session...', shuffledValues);\n log('call updateSession... ', session.id, session.element);\n\n if (isEmpty(shuffledValues)) {\n error(\n `shuffledValues is an empty array? - refusing to call updateSession: shuffledChoices: ${JSON.stringify(\n shuffledChoices,\n )}, key: ${choiceKey}`,\n );\n } else {\n updateSession(session.id, session.element, { shuffledValues }).catch((e) =>\n // eslint-disable-next-line no-console\n console.error('update session failed for: ', session.id, e),\n );\n }\n } catch (e) {\n warn('unable to save shuffled order for choices');\n error(e);\n }\n } else {\n warn('unable to save shuffled choices, shuffle will happen every time.');\n }\n\n //save this shuffle to the session for later retrieval\n resolve(shuffledChoices);\n }\n });\n\n/**\n * If we return:\n * - true - that means that the order of the choices will be ordinal (as is created in the configure item)\n * - false - that means the getShuffledChoices above will be called and that in turn means that we either\n * return the shuffled values on the session (if any exists) or we shuffle the choices\n * @param model - model to check if we should lock order\n * @param session - session to check if we should lock order\n * @param env - env to check if we should lock order\n * @returns {boolean}\n */\nexport const lockChoices = (model, session, env) => {\n if (model.lockChoiceOrder) {\n return true;\n }\n\n log('lockChoiceOrder: ', get(env, ['@pie-element', 'lockChoiceOrder'], false));\n\n if (get(env, ['@pie-element', 'lockChoiceOrder'], false)) {\n return true;\n }\n\n const role = get(env, 'role', 'student');\n\n if (role === 'instructor') {\n // TODO: .. in the future the instructor can toggle between ordinal and shuffled here, so keeping this code until then\n /*const alreadyShuffled = hasShuffledValues(session);\n\n if (alreadyShuffled) {\n return false;\n }\n\n return true;*/\n return true;\n }\n\n // here it's a student, so don't lock and it will shuffle if needs be\n return false;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/controller-utils",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.4-next.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
@@ -14,13 +14,5 @@
|
|
|
14
14
|
"scripts": {},
|
|
15
15
|
"author": "",
|
|
16
16
|
"license": "ISC",
|
|
17
|
-
"gitHead": "
|
|
18
|
-
"exports": {
|
|
19
|
-
".": {
|
|
20
|
-
"require": "./lib/index.js",
|
|
21
|
-
"import": "./src/index.js",
|
|
22
|
-
"default": "./lib/index.js"
|
|
23
|
-
},
|
|
24
|
-
"./esm": "./esm/index.js"
|
|
25
|
-
}
|
|
17
|
+
"gitHead": "31368da9311d16744eb1293ff5f8495551427037"
|
|
26
18
|
}
|