@pie-element/match-list 2.9.2-next.15 → 2.9.2-next.17

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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "2.9.2-next.15+5f3f91ea4",
7
+ "version": "2.9.2-next.17+255cf2630",
8
8
  "description": "",
9
9
  "scripts": {
10
10
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "author": "",
27
27
  "license": "ISC",
28
- "gitHead": "5f3f91ea4360b6cd9cb8487503832c950441d5c2",
28
+ "gitHead": "255cf26303caf1b71c4c4ca04762d48536141134",
29
29
  "main": "lib/index.js",
30
30
  "module": "src/index.js"
31
31
  }
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
- var _default = {
8
- config: {
9
- rows: [{
10
- id: 1,
11
- title: 'Question Text 1',
12
- values: [false, false]
13
- }, {
14
- id: 2,
15
- title: 'Question Text 2',
16
- values: [false, false]
17
- }],
18
- layout: 3,
19
- headers: ['Column 1', 'Column 2', 'Column 3']
20
- }
21
- };
22
- exports["default"] = _default;
23
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["config","rows","id","title","values","layout","headers"],"mappings":";;;;;;eAAe;AACbA,EAAAA,MAAM,EAAE;AACNC,IAAAA,IAAI,EAAE,CACJ;AACEC,MAAAA,EAAE,EAAE,CADN;AAEEC,MAAAA,KAAK,EAAE,iBAFT;AAGEC,MAAAA,MAAM,EAAE,CAAC,KAAD,EAAQ,KAAR;AAHV,KADI,EAMJ;AACEF,MAAAA,EAAE,EAAE,CADN;AAEEC,MAAAA,KAAK,EAAE,iBAFT;AAGEC,MAAAA,MAAM,EAAE,CAAC,KAAD,EAAQ,KAAR;AAHV,KANI,CADA;AAaNC,IAAAA,MAAM,EAAE,CAbF;AAcNC,IAAAA,OAAO,EAAE,CAAC,UAAD,EAAa,UAAb,EAAyB,UAAzB;AAdH;AADK,C","sourcesContent":["export default {\n config: {\n rows: [\n {\n id: 1,\n title: 'Question Text 1',\n values: [false, false],\n },\n {\n id: 2,\n title: 'Question Text 2',\n values: [false, false],\n },\n ],\n layout: 3,\n headers: ['Column 1', 'Column 2', 'Column 3'],\n },\n};\n"],"file":"defaults.js"}
@@ -1,262 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.createCorrectResponseSession = void 0;
9
- exports.createDefaultModel = createDefaultModel;
10
- exports.model = model;
11
- exports.outcome = void 0;
12
-
13
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
14
-
15
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
-
17
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
-
19
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
20
-
21
- var _feedback = require("@pie-lib/pie-toolbox/feedback");
22
-
23
- var _controllerUtils = require("@pie-lib/pie-toolbox/controller-utils");
24
-
25
- var _debug = _interopRequireDefault(require("debug"));
26
-
27
- var _defaults = _interopRequireDefault(require("./defaults"));
28
-
29
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
30
-
31
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
32
-
33
- var log = (0, _debug["default"])('@pie-element:match-list:controller');
34
-
35
- var getResponseCorrectness = function getResponseCorrectness(model, answers, env) {
36
- var isPartialScoring = _controllerUtils.partialScoring.enabled(model, env);
37
-
38
- var prompts = model.prompts;
39
-
40
- if (!answers || Object.keys(answers).length === 0) {
41
- return 'unanswered';
42
- }
43
-
44
- var totalCorrectAnswers = getTotalCorrect(model);
45
- var correctAnswers = getCorrectSelected(prompts, answers);
46
-
47
- if (totalCorrectAnswers === correctAnswers) {
48
- return 'correct';
49
- } else if (correctAnswers === 0) {
50
- return 'incorrect';
51
- } else if (isPartialScoring) {
52
- return 'partial';
53
- }
54
-
55
- return 'incorrect';
56
- };
57
-
58
- var getCorrectness = function getCorrectness(question, env, answers) {
59
- if (env.mode === 'evaluate') {
60
- return getResponseCorrectness(question, answers, env);
61
- }
62
- };
63
-
64
- var getCorrectSelected = function getCorrectSelected() {
65
- var prompts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
66
- var answers = arguments.length > 1 ? arguments[1] : undefined;
67
- var correctAnswers = 0;
68
- prompts.forEach(function (p) {
69
- if (p.relatedAnswer === answers[p.id]) {
70
- correctAnswers += 1;
71
- }
72
- });
73
- return correctAnswers;
74
- };
75
-
76
- var getTotalCorrect = function getTotalCorrect(question) {
77
- return question && question.prompts ? question.prompts.length : 0;
78
- };
79
-
80
- var getPartialScore = function getPartialScore(question, answers) {
81
- var count = getCorrectSelected(question && question.prompts, answers);
82
- var totalCorrect = getTotalCorrect(question);
83
- return parseFloat((count / totalCorrect).toFixed(2));
84
- };
85
-
86
- var getOutComeScore = function getOutComeScore(question, env, answers) {
87
- var correctness = getCorrectness(question, env, answers);
88
- return correctness === 'correct' ? 1 : correctness === 'partial' && true ? getPartialScore(question, answers) : 0;
89
- };
90
-
91
- var outcome = function outcome(question, session, env) {
92
- return new Promise(function (resolve) {
93
- if (env.mode !== 'evaluate') {
94
- resolve({
95
- score: undefined,
96
- completed: undefined
97
- });
98
- } else {
99
- if (!session || (0, _isEmpty["default"])(session)) {
100
- resolve({
101
- score: 0,
102
- empty: true
103
- });
104
- } else {
105
- var out = {
106
- score: getOutComeScore(question, env, session.value)
107
- };
108
- resolve(out);
109
- }
110
- }
111
- });
112
- };
113
-
114
- exports.outcome = outcome;
115
-
116
- function createDefaultModel() {
117
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
118
- return new Promise(function (resolve) {
119
- resolve(_objectSpread(_objectSpread({}, _defaults["default"]), model));
120
- });
121
- }
122
- /**
123
- *
124
- * @param {*} question
125
- * @param {*} session
126
- * @param {*} env
127
- * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.
128
- */
129
-
130
-
131
- function model(question, session, env, updateSession) {
132
- return new Promise( /*#__PURE__*/function () {
133
- var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(resolve) {
134
- var correctness, correctResponse, score, correctInfo, shuffledValues, prompts, answers, us, lockChoiceOrder, fb;
135
- return _regenerator["default"].wrap(function _callee$(_context) {
136
- while (1) {
137
- switch (_context.prev = _context.next) {
138
- case 0:
139
- correctness = getCorrectness(question, env, session && session.value);
140
- correctResponse = {};
141
- score = "".concat(getOutComeScore(question, env, session && session.value) * 100, "%");
142
- correctInfo = {
143
- score: score,
144
- correctness: correctness
145
- };
146
- shuffledValues = {};
147
- prompts = question.prompts;
148
- answers = question.answers;
149
-
150
- us = function us(part) {
151
- return function (id, element, update) {
152
- return new Promise(function (resolve) {
153
- shuffledValues[part] = update.shuffledValues;
154
- resolve();
155
- });
156
- };
157
- };
158
-
159
- lockChoiceOrder = (0, _controllerUtils.lockChoices)(question, session, env);
160
-
161
- if (lockChoiceOrder) {
162
- _context.next = 16;
163
- break;
164
- }
165
-
166
- _context.next = 12;
167
- return (0, _controllerUtils.getShuffledChoices)(prompts, {
168
- shuffledValues: (session && session.shuffledValues || {}).prompts
169
- }, us('prompts'), 'id');
170
-
171
- case 12:
172
- prompts = _context.sent;
173
- _context.next = 15;
174
- return (0, _controllerUtils.getShuffledChoices)(answers, {
175
- shuffledValues: (session && session.shuffledValues || {}).answers
176
- }, us('answers'), 'id');
177
-
178
- case 15:
179
- answers = _context.sent;
180
-
181
- case 16:
182
- if (!(0, _isEmpty["default"])(shuffledValues)) {
183
- if (updateSession && typeof updateSession === 'function') {
184
- updateSession(session.id, session.element, {
185
- shuffledValues: shuffledValues
186
- })["catch"](function (e) {
187
- // eslint-disable-next-line no-console
188
- console.error('update session failed', e);
189
- });
190
- }
191
- }
192
-
193
- if (question && prompts) {
194
- prompts.forEach(function (prompt) {
195
- correctResponse[prompt.id] = prompt.relatedAnswer;
196
- });
197
- }
198
-
199
- fb = env.mode === 'evaluate' ? (0, _feedback.getFeedbackForCorrectness)(correctInfo.correctness, question.feedback) : Promise.resolve(undefined);
200
- fb.then(function (feedback) {
201
- var base = {
202
- config: _objectSpread(_objectSpread({}, question), {}, {
203
- prompts: prompts,
204
- answers: answers
205
- }),
206
- correctness: correctInfo,
207
- feedback: feedback,
208
- mode: env.mode
209
- };
210
-
211
- if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
212
- base.rationale = question.rationale;
213
- } else {
214
- base.rationale = null;
215
- }
216
-
217
- var out = Object.assign(base, {
218
- correctResponse: correctResponse
219
- });
220
- log('out: ', out);
221
- resolve(out);
222
- });
223
-
224
- case 20:
225
- case "end":
226
- return _context.stop();
227
- }
228
- }
229
- }, _callee);
230
- }));
231
-
232
- return function (_x) {
233
- return _ref.apply(this, arguments);
234
- };
235
- }());
236
- }
237
-
238
- var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
239
- return new Promise(function (resolve) {
240
- if (env.mode !== 'evaluate' && env.role === 'instructor') {
241
- var prompts = question.prompts,
242
- answers = question.answers;
243
- var value = {};
244
- prompts.forEach(function (p) {
245
- if (answers.filter(function (a) {
246
- return a.id === p.relatedAnswer;
247
- }).length) {
248
- value[p.id] = p.relatedAnswer;
249
- }
250
- });
251
- resolve({
252
- value: value,
253
- id: '1'
254
- });
255
- } else {
256
- resolve(null);
257
- }
258
- });
259
- };
260
-
261
- exports.createCorrectResponseSession = createCorrectResponseSession;
262
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","prompts","Object","keys","length","totalCorrectAnswers","getTotalCorrect","correctAnswers","getCorrectSelected","getCorrectness","question","mode","forEach","p","relatedAnswer","id","getPartialScore","count","totalCorrect","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","score","undefined","completed","empty","out","value","createDefaultModel","defaults","updateSession","correctResponse","correctInfo","shuffledValues","us","part","element","update","lockChoiceOrder","e","console","error","prompt","fb","feedback","then","base","config","role","rationale","assign","createCorrectResponseSession","filter","a"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match-list:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const prompts = model.prompts;\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = getTotalCorrect(model);\n const correctAnswers = getCorrectSelected(prompts, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCorrectSelected = (prompts = [], answers) => {\n let correctAnswers = 0;\n\n prompts.forEach((p) => {\n if (p.relatedAnswer === answers[p.id]) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n return question && question.prompts ? question.prompts.length : 0;\n};\n\nconst getPartialScore = (question, answers) => {\n const count = getCorrectSelected(question && question.prompts, answers);\n const totalCorrect = getTotalCorrect(question);\n\n return parseFloat((count / totalCorrect).toFixed(2));\n};\n\nconst getOutComeScore = (question, env, answers) => {\n const correctness = getCorrectness(question, env, answers);\n\n return correctness === 'correct' ? 1 : correctness === 'partial' && true ? getPartialScore(question, answers) : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const out = {\n score: getOutComeScore(question, env, session.value),\n };\n\n resolve(out);\n }\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const correctness = getCorrectness(question, env, session && session.value);\n const correctResponse = {};\n const score = `${getOutComeScore(question, env, session && session.value) * 100}%`;\n const correctInfo = {\n score,\n correctness,\n };\n\n const shuffledValues = {};\n let prompts = question.prompts;\n let answers = question.answers;\n\n const us = (part) => (id, element, update) => {\n return new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n };\n\n const lockChoiceOrder = lockChoices(question, session, env);\n\n if (!lockChoiceOrder) {\n prompts = await getShuffledChoices(\n prompts,\n { shuffledValues: ((session && session.shuffledValues) || {}).prompts },\n us('prompts'),\n 'id',\n );\n answers = await getShuffledChoices(\n answers,\n { shuffledValues: ((session && session.shuffledValues) || {}).answers },\n us('answers'),\n 'id',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (question && prompts) {\n prompts.forEach((prompt) => {\n correctResponse[prompt.id] = prompt.relatedAnswer;\n });\n }\n\n const fb =\n env.mode === 'evaluate'\n ? getFeedbackForCorrectness(correctInfo.correctness, question.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const base = {\n config: {\n ...question,\n prompts,\n answers,\n },\n correctness: correctInfo,\n feedback,\n mode: env.mode,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = question.rationale;\n } else {\n base.rationale = null;\n }\n\n const out = Object.assign(base, {\n correctResponse,\n });\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { prompts, answers } = question;\n const value = {};\n\n prompts.forEach((p) => {\n if (answers.filter((a) => a.id === p.relatedAnswer).length) {\n value[p.id] = p.relatedAnswer;\n }\n });\n\n resolve({\n value,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
@@ -1,238 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.AnswerArea = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _styles = require("@material-ui/core/styles");
29
-
30
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
31
-
32
- var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
33
-
34
- var _reduce = _interopRequireDefault(require("lodash/reduce"));
35
-
36
- var _arrow = _interopRequireDefault(require("./arrow"));
37
-
38
- var _answer = _interopRequireDefault(require("./answer"));
39
-
40
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
41
-
42
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
-
44
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
-
46
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
-
48
- var AnswerArea = /*#__PURE__*/function (_React$Component) {
49
- (0, _inherits2["default"])(AnswerArea, _React$Component);
50
-
51
- var _super = _createSuper(AnswerArea);
52
-
53
- function AnswerArea() {
54
- var _this;
55
-
56
- (0, _classCallCheck2["default"])(this, AnswerArea);
57
-
58
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
59
- args[_key] = arguments[_key];
60
- }
61
-
62
- _this = _super.call.apply(_super, [this].concat(args));
63
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getAnswerFromSession", function (promptId) {
64
- var _this$props = _this.props,
65
- model = _this$props.model,
66
- session = _this$props.session,
67
- showCorrect = _this$props.showCorrect;
68
- var config = model.config;
69
- var answerId = showCorrect ? config.prompts.find(function (p) {
70
- return p.id === promptId;
71
- }).relatedAnswer : session.value && session.value[promptId];
72
- var answer = config.answers.find(function (answer) {
73
- return answer.id === answerId;
74
- });
75
- return answer || {};
76
- });
77
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getCorrectOrIncorrectMap", function () {
78
- var _this$props2 = _this.props,
79
- model = _this$props2.model,
80
- session = _this$props2.session,
81
- showCorrect = _this$props2.showCorrect;
82
- var config = model.config;
83
- var sessionValue = session.value || config.prompts.reduce(function (obj, prompt) {
84
- obj[prompt.id] = undefined;
85
- return obj;
86
- }, {});
87
-
88
- if (model.mode !== 'evaluate') {
89
- return {};
90
- }
91
-
92
- if (showCorrect) {
93
- return config.prompts.reduce(function (obj, prompt) {
94
- obj[prompt.id] = true;
95
- return obj;
96
- }, {});
97
- }
98
-
99
- var correctPromptMap = config.prompts.reduce(function (obj, prompt) {
100
- if (!(0, _isUndefined["default"])(prompt.relatedAnswer)) {
101
- obj[prompt.id] = prompt.relatedAnswer;
102
- }
103
-
104
- return obj;
105
- }, {});
106
- return (0, _reduce["default"])(sessionValue, function (obj, val, key) {
107
- obj[key] = correctPromptMap[key] === sessionValue[key];
108
- return obj;
109
- }, {});
110
- });
111
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "buildRows", function () {
112
- var model = _this.props.model;
113
- var config = model.config;
114
- var prompts = config.prompts || [];
115
- return prompts.map(function (prompt) {
116
- var sessionAnswer = _this.getAnswerFromSession(prompt.id);
117
-
118
- return _objectSpread(_objectSpread({}, prompt), {}, {
119
- sessionAnswer: sessionAnswer
120
- });
121
- });
122
- });
123
- return _this;
124
- }
125
-
126
- (0, _createClass2["default"])(AnswerArea, [{
127
- key: "render",
128
- value: function render() {
129
- var _this$props3 = this.props,
130
- classes = _this$props3.classes,
131
- disabled = _this$props3.disabled,
132
- _onPlaceAnswer = _this$props3.onPlaceAnswer,
133
- instanceId = _this$props3.instanceId,
134
- onRemoveAnswer = _this$props3.onRemoveAnswer;
135
- var rows = this.buildRows();
136
- var correctnessMap = this.getCorrectOrIncorrectMap();
137
- return /*#__PURE__*/_react["default"].createElement("div", {
138
- className: classes.itemList
139
- }, rows.map(function (_ref, index) {
140
- var sessionAnswer = _ref.sessionAnswer,
141
- title = _ref.title,
142
- id = _ref.id;
143
- return /*#__PURE__*/_react["default"].createElement("div", {
144
- className: classes.row,
145
- key: index
146
- }, /*#__PURE__*/_react["default"].createElement("div", {
147
- className: classes.promptEntry,
148
- dangerouslySetInnerHTML: {
149
- __html: title
150
- }
151
- }), /*#__PURE__*/_react["default"].createElement("div", {
152
- className: classes.arrowEntry
153
- }, /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
154
- direction: "left"
155
- }), /*#__PURE__*/_react["default"].createElement(_arrow["default"], null)), /*#__PURE__*/_react["default"].createElement(_answer["default"], {
156
- key: index,
157
- className: classes.answer,
158
- index: index,
159
- promptId: id,
160
- correct: correctnessMap[id],
161
- draggable: !(0, _isEmpty["default"])(sessionAnswer),
162
- disabled: disabled,
163
- instanceId: instanceId,
164
- id: sessionAnswer.id,
165
- onPlaceAnswer: function onPlaceAnswer(place, id) {
166
- return _onPlaceAnswer(place, id);
167
- },
168
- title: sessionAnswer.title,
169
- type: 'target',
170
- onRemoveChoice: function onRemoveChoice() {
171
- return onRemoveAnswer(id);
172
- }
173
- }));
174
- }));
175
- }
176
- }]);
177
- return AnswerArea;
178
- }(_react["default"].Component);
179
-
180
- exports.AnswerArea = AnswerArea;
181
- (0, _defineProperty2["default"])(AnswerArea, "propTypes", {
182
- classes: _propTypes["default"].object,
183
- session: _propTypes["default"].object.isRequired,
184
- showCorrect: _propTypes["default"].bool.isRequired,
185
- disabled: _propTypes["default"].bool.isRequired,
186
- onSessionChange: _propTypes["default"].func,
187
- onRemoveAnswer: _propTypes["default"].func,
188
- onPlaceAnswer: _propTypes["default"].func.isRequired,
189
- instanceId: _propTypes["default"].string.isRequired,
190
- model: _propTypes["default"].object.isRequired,
191
- prompt: _propTypes["default"].string
192
- });
193
-
194
- var styles = function styles(theme) {
195
- return {
196
- answer: {
197
- flex: 1
198
- },
199
- arrowEntry: {
200
- alignItems: 'normal',
201
- display: 'flex',
202
- height: 40,
203
- margin: '10px 20px'
204
- },
205
- itemList: {
206
- alignItems: 'flex-start',
207
- display: 'flex',
208
- flex: 1,
209
- flexDirection: 'column',
210
- justifyContent: 'space-between',
211
- marginTop: theme.spacing.unit * 2,
212
- marginBottom: theme.spacing.unit * 2
213
- },
214
- promptEntry: {
215
- border: "1px solid ".concat(theme.palette.grey[400]),
216
- boxSizing: 'border-box',
217
- flex: 1,
218
- margin: '10px 0',
219
- minHeight: 40,
220
- overflow: 'hidden',
221
- padding: 10,
222
- textAlign: 'center',
223
- width: '100%',
224
- wordBreak: 'break-word'
225
- },
226
- row: {
227
- alignItems: 'center',
228
- display: 'flex',
229
- justifyContent: 'space-between',
230
- width: '100%'
231
- }
232
- };
233
- };
234
-
235
- var _default = (0, _styles.withStyles)(styles)(AnswerArea);
236
-
237
- exports["default"] = _default;
238
- //# sourceMappingURL=answer-area.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/answer-area.jsx"],"names":["AnswerArea","promptId","props","model","session","showCorrect","config","answerId","prompts","find","p","id","relatedAnswer","value","answer","answers","sessionValue","reduce","obj","prompt","undefined","mode","correctPromptMap","val","key","map","sessionAnswer","getAnswerFromSession","classes","disabled","onPlaceAnswer","instanceId","onRemoveAnswer","rows","buildRows","correctnessMap","getCorrectOrIncorrectMap","itemList","index","title","row","promptEntry","__html","arrowEntry","place","React","Component","PropTypes","object","isRequired","bool","onSessionChange","func","string","styles","theme","flex","alignItems","display","height","margin","flexDirection","justifyContent","marginTop","spacing","unit","marginBottom","border","palette","grey","boxSizing","minHeight","overflow","padding","textAlign","width","wordBreak"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport isEmpty from 'lodash/isEmpty';\nimport isUndefined from 'lodash/isUndefined';\nimport reduce from 'lodash/reduce';\n\nimport Arrow from './arrow';\nimport DragAndDropAnswer from './answer';\n\nexport class AnswerArea extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n session: PropTypes.object.isRequired,\n showCorrect: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onSessionChange: PropTypes.func,\n onRemoveAnswer: PropTypes.func,\n onPlaceAnswer: PropTypes.func.isRequired,\n instanceId: PropTypes.string.isRequired,\n model: PropTypes.object.isRequired,\n prompt: PropTypes.string,\n };\n\n getAnswerFromSession = (promptId) => {\n const { model, session, showCorrect } = this.props;\n const { config } = model;\n const answerId = showCorrect\n ? config.prompts.find((p) => p.id === promptId).relatedAnswer\n : session.value && session.value[promptId];\n const answer = config.answers.find((answer) => answer.id === answerId);\n\n return answer || {};\n };\n\n getCorrectOrIncorrectMap = () => {\n const { model, session, showCorrect } = this.props;\n const { config } = model;\n const sessionValue =\n session.value ||\n config.prompts.reduce((obj, prompt) => {\n obj[prompt.id] = undefined;\n return obj;\n }, {});\n\n if (model.mode !== 'evaluate') {\n return {};\n }\n\n if (showCorrect) {\n return config.prompts.reduce((obj, prompt) => {\n obj[prompt.id] = true;\n\n return obj;\n }, {});\n }\n\n const correctPromptMap = config.prompts.reduce((obj, prompt) => {\n if (!isUndefined(prompt.relatedAnswer)) {\n obj[prompt.id] = prompt.relatedAnswer;\n }\n\n return obj;\n }, {});\n\n return reduce(\n sessionValue,\n (obj, val, key) => {\n obj[key] = correctPromptMap[key] === sessionValue[key];\n\n return obj;\n },\n {},\n );\n };\n\n buildRows = () => {\n const { model } = this.props;\n const { config } = model;\n const prompts = config.prompts || [];\n\n return prompts.map((prompt) => {\n const sessionAnswer = this.getAnswerFromSession(prompt.id);\n\n return {\n ...prompt,\n sessionAnswer,\n };\n });\n };\n\n render() {\n const { classes, disabled, onPlaceAnswer, instanceId, onRemoveAnswer } = this.props;\n const rows = this.buildRows();\n const correctnessMap = this.getCorrectOrIncorrectMap();\n\n return (\n <div className={classes.itemList}>\n {rows.map(({ sessionAnswer, title, id }, index) => {\n return (\n <div className={classes.row} key={index}>\n <div className={classes.promptEntry} dangerouslySetInnerHTML={{ __html: title }} />\n\n <div className={classes.arrowEntry}>\n <Arrow direction=\"left\" />\n <Arrow />\n </div>\n\n <DragAndDropAnswer\n key={index}\n className={classes.answer}\n index={index}\n promptId={id}\n correct={correctnessMap[id]}\n draggable={!isEmpty(sessionAnswer)}\n disabled={disabled}\n instanceId={instanceId}\n id={sessionAnswer.id}\n onPlaceAnswer={(place, id) => onPlaceAnswer(place, id)}\n title={sessionAnswer.title}\n type={'target'}\n onRemoveChoice={() => onRemoveAnswer(id)}\n />\n </div>\n );\n })}\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n answer: {\n flex: 1,\n },\n arrowEntry: {\n alignItems: 'normal',\n display: 'flex',\n height: 40,\n margin: '10px 20px',\n },\n itemList: {\n alignItems: 'flex-start',\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'space-between',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n promptEntry: {\n border: `1px solid ${theme.palette.grey[400]}`,\n boxSizing: 'border-box',\n flex: 1,\n margin: '10px 0',\n minHeight: 40,\n overflow: 'hidden',\n padding: 10,\n textAlign: 'center',\n width: '100%',\n wordBreak: 'break-word',\n },\n row: {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n },\n});\n\nexport default withStyles(styles)(AnswerArea);\n"],"file":"answer-area.js"}