@pie-element/match 7.9.1-next.1 → 7.9.1-next.11

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.
@@ -0,0 +1,260 @@
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.AnswerGrid = 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 _classnames = _interopRequireDefault(require("classnames"));
29
+
30
+ var _Radio = _interopRequireDefault(require("@material-ui/core/Radio"));
31
+
32
+ var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
33
+
34
+ var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
35
+
36
+ var _styles = require("@material-ui/core/styles");
37
+
38
+ var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
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 AnswerGrid = /*#__PURE__*/function (_React$Component) {
49
+ (0, _inherits2["default"])(AnswerGrid, _React$Component);
50
+
51
+ var _super = _createSuper(AnswerGrid);
52
+
53
+ function AnswerGrid() {
54
+ var _this;
55
+
56
+ (0, _classCallCheck2["default"])(this, AnswerGrid);
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), "onRowValueChange", function (rowId, answerIndex) {
64
+ return function (event) {
65
+ var _this$props = _this.props,
66
+ onAnswerChange = _this$props.onAnswerChange,
67
+ choiceMode = _this$props.choiceMode,
68
+ answers = _this$props.answers;
69
+
70
+ var newAnswers = _objectSpread({}, answers);
71
+
72
+ if (choiceMode === 'radio') {
73
+ for (var i = 0; i < newAnswers[rowId].length; i++) {
74
+ newAnswers[rowId][i] = false;
75
+ }
76
+ }
77
+
78
+ newAnswers[rowId][answerIndex] = event.target.checked;
79
+ onAnswerChange(newAnswers);
80
+ };
81
+ });
82
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "answerIsCorrect", function (rowId, rowValue, rowValueIndex) {
83
+ var correctAnswers = _this.props.correctAnswers;
84
+ return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;
85
+ });
86
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "answerIsIncorrect", function (rowId, rowValue, rowValueIndex) {
87
+ var correctAnswers = _this.props.correctAnswers;
88
+ return correctAnswers[rowId][rowValueIndex] === true && rowValue === false || correctAnswers[rowId][rowValueIndex] === false && rowValue === true;
89
+ });
90
+ return _this;
91
+ }
92
+
93
+ (0, _createClass2["default"])(AnswerGrid, [{
94
+ key: "render",
95
+ value: function render() {
96
+ var _this2 = this;
97
+
98
+ var _this$props2 = this.props,
99
+ classes = _this$props2.classes,
100
+ showCorrect = _this$props2.showCorrect,
101
+ headers = _this$props2.headers,
102
+ rows = _this$props2.rows,
103
+ choiceMode = _this$props2.choiceMode,
104
+ answers = _this$props2.answers,
105
+ disabled = _this$props2.disabled,
106
+ view = _this$props2.view;
107
+ var Tag = choiceMode === 'radio' ? _Radio["default"] : _Checkbox["default"];
108
+ var evaluate = disabled && !view;
109
+
110
+ if (!rows || rows.length === 0) {
111
+ return /*#__PURE__*/_react["default"].createElement("div", {
112
+ className: classes.controlsContainer
113
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
114
+ className: classes.empty,
115
+ component: "div"
116
+ }, "There are currently no questions to show."));
117
+ }
118
+
119
+ return /*#__PURE__*/_react["default"].createElement("div", {
120
+ className: classes.controlsContainer
121
+ }, /*#__PURE__*/_react["default"].createElement("table", {
122
+ className: classes.table
123
+ }, /*#__PURE__*/_react["default"].createElement("colgroup", null, (headers || []).map(function (header, idx) {
124
+ return /*#__PURE__*/_react["default"].createElement("col", {
125
+ key: "col-".concat(idx)
126
+ });
127
+ })), /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, (headers || []).map(function (header, idx) {
128
+ return /*#__PURE__*/_react["default"].createElement("th", {
129
+ className: classes.rowHeader,
130
+ key: "th-".concat(idx),
131
+ "data-colno": "".concat(idx),
132
+ scope: "row"
133
+ }, /*#__PURE__*/_react["default"].createElement("div", {
134
+ className: (0, _classnames["default"])(classes.rowItem, (0, _defineProperty2["default"])({}, classes.questionText, idx === 0)),
135
+ dangerouslySetInnerHTML: {
136
+ __html: header
137
+ }
138
+ }));
139
+ }))), (rows || []).map(function (row, idx) {
140
+ return /*#__PURE__*/_react["default"].createElement("tbody", {
141
+ key: "row-".concat(idx),
142
+ role: "group"
143
+ }, /*#__PURE__*/_react["default"].createElement("tr", {
144
+ className: classes.separator
145
+ }, /*#__PURE__*/_react["default"].createElement("td", {
146
+ key: "td-title-".concat(idx),
147
+ "data-colno": '0'
148
+ }, /*#__PURE__*/_react["default"].createElement("div", {
149
+ className: (0, _classnames["default"])(classes.rowItem, classes.questionText),
150
+ dangerouslySetInnerHTML: {
151
+ __html: row.title
152
+ }
153
+ })), (answers[row.id] || []).map(function (rowItem, answerIndex) {
154
+ var _cx2;
155
+
156
+ return /*#__PURE__*/_react["default"].createElement("td", {
157
+ key: "td-".concat(idx, "-").concat(answerIndex),
158
+ className: classes.column,
159
+ "data-colno": "".concat(answerIndex + 1)
160
+ }, /*#__PURE__*/_react["default"].createElement("div", {
161
+ className: classes.rowItem
162
+ }, /*#__PURE__*/_react["default"].createElement(Tag, {
163
+ className: (0, _classnames["default"])((_cx2 = {}, (0, _defineProperty2["default"])(_cx2, classes.correct, showCorrect && rowItem === true || evaluate && _this2.answerIsCorrect(row.id, rowItem, answerIndex)), (0, _defineProperty2["default"])(_cx2, classes.tag, true), (0, _defineProperty2["default"])(_cx2, classes.checked, rowItem === true && !evaluate), (0, _defineProperty2["default"])(_cx2, classes.tagDisabled, disabled), (0, _defineProperty2["default"])(_cx2, classes.incorrect, evaluate && _this2.answerIsIncorrect(row.id, rowItem, answerIndex)), _cx2)),
164
+ disabled: disabled,
165
+ onChange: _this2.onRowValueChange(row.id, answerIndex),
166
+ checked: rowItem === true
167
+ })));
168
+ })));
169
+ })));
170
+ }
171
+ }]);
172
+ return AnswerGrid;
173
+ }(_react["default"].Component);
174
+
175
+ exports.AnswerGrid = AnswerGrid;
176
+ (0, _defineProperty2["default"])(AnswerGrid, "propTypes", {
177
+ classes: _propTypes["default"].object.isRequired,
178
+ correctAnswers: _propTypes["default"].object,
179
+ view: _propTypes["default"].bool.isRequired,
180
+ showCorrect: _propTypes["default"].bool.isRequired,
181
+ disabled: _propTypes["default"].bool.isRequired,
182
+ onAnswerChange: _propTypes["default"].func.isRequired,
183
+ choiceMode: _propTypes["default"].string.isRequired,
184
+ rows: _propTypes["default"].array.isRequired,
185
+ headers: _propTypes["default"].array.isRequired,
186
+ answers: _propTypes["default"].object.isRequired
187
+ });
188
+
189
+ var styles = function styles(theme) {
190
+ return {
191
+ controlsContainer: {
192
+ marginLeft: 'auto',
193
+ marginRight: 'auto',
194
+ marginTop: theme.spacing.unit,
195
+ marginBottom: theme.spacing.unit
196
+ },
197
+ column: {
198
+ padding: '5px 0'
199
+ },
200
+ correct: {
201
+ color: "".concat(_renderUi.color.correct(), " !important")
202
+ },
203
+ incorrect: {
204
+ color: "".concat(_renderUi.color.incorrect(), " !important")
205
+ },
206
+ empty: {
207
+ margin: theme.spacing.unit * 2
208
+ },
209
+ rowContainer: {
210
+ display: 'flex',
211
+ alignItems: 'center'
212
+ },
213
+ rowHeader: {
214
+ padding: 0
215
+ },
216
+ rowItem: {
217
+ padding: theme.spacing.unit * 1.5,
218
+ textAlign: 'center'
219
+ },
220
+ separator: {
221
+ border: 0,
222
+ borderTop: "2.5px solid ".concat(_renderUi.color.primaryLight()),
223
+ width: '100%'
224
+ },
225
+ tag: {
226
+ padding: '6px',
227
+ color: _renderUi.color.text(),
228
+ '&:hover': {
229
+ color: _renderUi.color.primaryLight()
230
+ }
231
+ },
232
+ checked: {
233
+ color: "".concat(_renderUi.color.primary(), " !important")
234
+ },
235
+ tagDisabled: {
236
+ color: _renderUi.color.disabled(),
237
+ cursor: 'not-allowed !important',
238
+ pointerEvents: 'initial !important',
239
+ opacity: 0.7,
240
+ '&:hover': {
241
+ color: _renderUi.color.disabled()
242
+ }
243
+ },
244
+ table: {
245
+ color: _renderUi.color.text(),
246
+ backgroundColor: _renderUi.color.background(),
247
+ borderCollapse: 'collapse',
248
+ borderSpacing: 0,
249
+ marginBottom: 0
250
+ },
251
+ questionText: {
252
+ textAlign: 'left'
253
+ }
254
+ };
255
+ };
256
+
257
+ var _default = (0, _styles.withStyles)(styles)(AnswerGrid);
258
+
259
+ exports["default"] = _default;
260
+ //# sourceMappingURL=answer-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/answer-grid.jsx"],"names":["AnswerGrid","rowId","answerIndex","event","props","onAnswerChange","choiceMode","answers","newAnswers","i","length","target","checked","rowValue","rowValueIndex","correctAnswers","classes","showCorrect","headers","rows","disabled","view","Tag","Radio","Checkbox","evaluate","controlsContainer","empty","table","map","header","idx","rowHeader","rowItem","questionText","__html","row","separator","title","id","column","correct","answerIsCorrect","tag","tagDisabled","incorrect","answerIsIncorrect","onRowValueChange","React","Component","PropTypes","object","isRequired","bool","func","string","array","styles","theme","marginLeft","marginRight","marginTop","spacing","unit","marginBottom","padding","color","margin","rowContainer","display","alignItems","textAlign","border","borderTop","primaryLight","width","text","primary","cursor","pointerEvents","opacity","backgroundColor","background","borderCollapse","borderSpacing"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport Radio from '@material-ui/core/Radio';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\n\nexport class AnswerGrid extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n correctAnswers: PropTypes.object,\n view: PropTypes.bool.isRequired,\n showCorrect: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onAnswerChange: PropTypes.func.isRequired,\n choiceMode: PropTypes.string.isRequired,\n rows: PropTypes.array.isRequired,\n headers: PropTypes.array.isRequired,\n answers: PropTypes.object.isRequired,\n };\n\n onRowValueChange = (rowId, answerIndex) => (event) => {\n const { onAnswerChange, choiceMode, answers } = this.props;\n const newAnswers = { ...answers };\n\n if (choiceMode === 'radio') {\n for (let i = 0; i < newAnswers[rowId].length; i++) {\n newAnswers[rowId][i] = false;\n }\n }\n\n newAnswers[rowId][answerIndex] = event.target.checked;\n\n onAnswerChange(newAnswers);\n };\n\n answerIsCorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;\n };\n\n // needs a separate method because what isn't correct isn't necessarily incorrect\n answerIsIncorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return (\n (correctAnswers[rowId][rowValueIndex] === true && rowValue === false) ||\n (correctAnswers[rowId][rowValueIndex] === false && rowValue === true)\n );\n };\n\n render() {\n const { classes, showCorrect, headers, rows, choiceMode, answers, disabled, view } = this.props;\n const Tag = choiceMode === 'radio' ? Radio : Checkbox;\n const evaluate = disabled && !view;\n\n if (!rows || rows.length === 0) {\n return (\n <div className={classes.controlsContainer}>\n <Typography className={classes.empty} component=\"div\">\n There are currently no questions to show.\n </Typography>\n </div>\n );\n }\n\n return (\n <div className={classes.controlsContainer}>\n <table className={classes.table}>\n <colgroup>\n {(headers || []).map((header, idx) => (\n <col key={`col-${idx}`} />\n ))}\n </colgroup>\n\n <thead>\n <tr>\n {(headers || []).map((header, idx) => (\n <th className={classes.rowHeader} key={`th-${idx}`} data-colno={`${idx}`} scope=\"row\">\n <div\n className={cx(classes.rowItem, { [classes.questionText]: idx === 0 })}\n dangerouslySetInnerHTML={{ __html: header }}\n />\n </th>\n ))}\n </tr>\n </thead>\n\n {(rows || []).map((row, idx) => (\n <tbody key={`row-${idx}`} role=\"group\">\n <tr className={classes.separator}>\n <td key={`td-title-${idx}`} data-colno={'0'}>\n <div\n className={cx(classes.rowItem, classes.questionText)}\n dangerouslySetInnerHTML={{ __html: row.title }}\n />\n </td>\n\n {(answers[row.id] || []).map((rowItem, answerIndex) => (\n <td key={`td-${idx}-${answerIndex}`} className={classes.column} data-colno={`${answerIndex + 1}`}>\n <div className={classes.rowItem}>\n <Tag\n className={cx({\n [classes.correct]:\n (showCorrect && rowItem === true) ||\n (evaluate && this.answerIsCorrect(row.id, rowItem, answerIndex)),\n [classes.tag]: true,\n [classes.checked]: rowItem === true && !evaluate,\n [classes.tagDisabled]: disabled,\n [classes.incorrect]: evaluate && this.answerIsIncorrect(row.id, rowItem, answerIndex),\n })}\n disabled={disabled}\n onChange={this.onRowValueChange(row.id, answerIndex)}\n checked={rowItem === true}\n />\n </div>\n </td>\n ))}\n </tr>\n </tbody>\n ))}\n </table>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n controlsContainer: {\n marginLeft: 'auto',\n marginRight: 'auto',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit,\n },\n column: {\n padding: '5px 0',\n },\n correct: {\n color: `${color.correct()} !important`,\n },\n incorrect: {\n color: `${color.incorrect()} !important`,\n },\n empty: {\n margin: theme.spacing.unit * 2,\n },\n rowContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n rowHeader: {\n padding: 0,\n },\n rowItem: {\n padding: theme.spacing.unit * 1.5,\n textAlign: 'center',\n },\n separator: {\n border: 0,\n borderTop: `2.5px solid ${color.primaryLight()}`,\n width: '100%',\n },\n tag: {\n padding: '6px',\n color: color.text(),\n '&:hover': {\n color: color.primaryLight(),\n },\n },\n checked: {\n color: `${color.primary()} !important`,\n },\n tagDisabled: {\n color: color.disabled(),\n cursor: 'not-allowed !important',\n pointerEvents: 'initial !important',\n opacity: 0.7,\n '&:hover': {\n color: color.disabled(),\n },\n },\n table: {\n color: color.text(),\n backgroundColor: color.background(),\n borderCollapse: 'collapse',\n borderSpacing: 0,\n marginBottom: 0,\n },\n questionText: {\n textAlign: 'left',\n },\n});\n\nexport default withStyles(styles)(AnswerGrid);\n"],"file":"answer-grid.js"}
package/lib/index.js ADDED
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "Component", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _main["default"];
12
+ }
13
+ });
14
+ exports.isComplete = exports["default"] = void 0;
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
19
+
20
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
21
+
22
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
+
24
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
+
26
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
+
28
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
29
+
30
+ var _react = _interopRequireDefault(require("react"));
31
+
32
+ var _reactDom = _interopRequireDefault(require("react-dom"));
33
+
34
+ var _main = _interopRequireDefault(require("./main"));
35
+
36
+ var _piePlayerEvents = require("@pie-framework/pie-player-events");
37
+
38
+ var _mathRenderingAccessible = require("@pie-lib/pie-toolbox/math-rendering-accessible");
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 isComplete = function isComplete(session, model) {
49
+ var _model$rows;
50
+
51
+ var ids = (model === null || model === void 0 ? void 0 : (_model$rows = model.rows) === null || _model$rows === void 0 ? void 0 : _model$rows.map(function (r) {
52
+ return r.id;
53
+ })) || [];
54
+ return ids.reduce(function (acc, id) {
55
+ if (!acc) {
56
+ return false;
57
+ }
58
+
59
+ var arr = session.answers && session.answers[id];
60
+ var hasChoice = Array.isArray(arr) && arr.includes(true);
61
+ return hasChoice && acc;
62
+ }, true);
63
+ };
64
+
65
+ exports.isComplete = isComplete;
66
+
67
+ var Match = /*#__PURE__*/function (_HTMLElement) {
68
+ (0, _inherits2["default"])(Match, _HTMLElement);
69
+
70
+ var _super = _createSuper(Match);
71
+
72
+ function Match() {
73
+ (0, _classCallCheck2["default"])(this, Match);
74
+ return _super.call(this);
75
+ }
76
+
77
+ (0, _createClass2["default"])(Match, [{
78
+ key: "model",
79
+ set: function set(m) {
80
+ // config object props should be part of the model props
81
+ // model.config should be no longer used
82
+ this._model = _objectSpread(_objectSpread({}, m), (m === null || m === void 0 ? void 0 : m.config) || {});
83
+
84
+ this._render();
85
+ }
86
+ }, {
87
+ key: "session",
88
+ get: function get() {
89
+ return this._session;
90
+ },
91
+ set: function set(s) {
92
+ this._session = s;
93
+
94
+ this._render();
95
+ }
96
+ }, {
97
+ key: "sessionChanged",
98
+ value: function sessionChanged(s) {
99
+ this._session.answers = s.answers;
100
+ var complete = isComplete(this._session, this._model);
101
+ this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), complete));
102
+
103
+ this._render();
104
+ }
105
+ }, {
106
+ key: "connectedCallback",
107
+ value: function connectedCallback() {
108
+ this._render();
109
+ }
110
+ }, {
111
+ key: "_render",
112
+ value: function _render() {
113
+ var _this = this;
114
+
115
+ if (!this._model || !this._session) {
116
+ return;
117
+ }
118
+
119
+ var el = /*#__PURE__*/_react["default"].createElement(_main["default"], {
120
+ model: this._model,
121
+ session: this._session,
122
+ onSessionChange: this.sessionChanged.bind(this)
123
+ });
124
+
125
+ _reactDom["default"].render(el, this, function () {
126
+ (0, _mathRenderingAccessible.renderMath)(_this);
127
+ });
128
+ }
129
+ }]);
130
+ return Match;
131
+ }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
132
+
133
+ exports["default"] = Match;
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.js"],"names":["isComplete","session","model","ids","rows","map","r","id","reduce","acc","arr","answers","hasChoice","Array","isArray","includes","Match","m","_model","config","_render","_session","s","complete","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","el","React","createElement","Main","onSessionChange","sessionChanged","bind","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAIO,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAUC,KAAV,EAAoB;AAAA;;AAC5C,MAAMC,GAAG,GAAG,CAAAD,KAAK,SAAL,IAAAA,KAAK,WAAL,2BAAAA,KAAK,CAAEE,IAAP,4DAAaC,GAAb,CAAiB,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACC,EAAT;AAAA,GAAjB,MAAiC,EAA7C;AAEA,SAAOJ,GAAG,CAACK,MAAJ,CAAW,UAACC,GAAD,EAAMF,EAAN,EAAa;AAC7B,QAAI,CAACE,GAAL,EAAU;AACR,aAAO,KAAP;AACD;;AAED,QAAMC,GAAG,GAAGT,OAAO,CAACU,OAAR,IAAmBV,OAAO,CAACU,OAAR,CAAgBJ,EAAhB,CAA/B;AACA,QAAMK,SAAS,GAAGC,KAAK,CAACC,OAAN,CAAcJ,GAAd,KAAsBA,GAAG,CAACK,QAAJ,CAAa,IAAb,CAAxC;AAEA,WAAOH,SAAS,IAAIH,GAApB;AACD,GATM,EASJ,IATI,CAAP;AAUD,CAbM;;;;IAecO,K;;;;;AACnB,mBAAc;AAAA;AAAA;AAEb;;;;SAED,aAAUC,CAAV,EAAa;AACX;AACA;AACA,WAAKC,MAAL,mCAAmBD,CAAnB,GAA0B,CAAAA,CAAC,SAAD,IAAAA,CAAC,WAAD,YAAAA,CAAC,CAAEE,MAAH,KAAa,EAAvC;;AACA,WAAKC,OAAL;AACD;;;SAOD,eAAc;AACZ,aAAO,KAAKC,QAAZ;AACD,K;SAPD,aAAYC,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;;AACA,WAAKF,OAAL;AACD;;;WAMD,wBAAeE,CAAf,EAAkB;AAChB,WAAKD,QAAL,CAAcV,OAAd,GAAwBW,CAAC,CAACX,OAA1B;AACA,UAAMY,QAAQ,GAAGvB,UAAU,CAAC,KAAKqB,QAAN,EAAgB,KAAKH,MAArB,CAA3B;AAEA,WAAKM,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,KAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoDJ,QAApD,CAAnB;;AAEA,WAAKH,OAAL;AACD;;;WAED,6BAAoB;AAClB,WAAKA,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,CAAC,KAAKF,MAAN,IAAgB,CAAC,KAAKG,QAA1B,EAAoC;AAClC;AACD;;AAED,UAAMO,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnC7B,QAAAA,KAAK,EAAE,KAAKgB,MADuB;AAEnCjB,QAAAA,OAAO,EAAE,KAAKoB,QAFqB;AAGnCW,QAAAA,eAAe,EAAE,KAAKC,cAAL,CAAoBC,IAApB,CAAyB,IAAzB;AAHkB,OAA1B,CAAX;;AAMAC,2BAASC,MAAT,CAAgBR,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,iDAAW,KAAX;AACD,OAFD;AAGD;;;kDAhDgCS,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './main';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering-accessible';\n\nexport { Main as Component };\n\nexport const isComplete = (session, model) => {\n const ids = model?.rows?.map((r) => r.id) || [];\n\n return ids.reduce((acc, id) => {\n if (!acc) {\n return false;\n }\n\n const arr = session.answers && session.answers[id];\n const hasChoice = Array.isArray(arr) && arr.includes(true);\n\n return hasChoice && acc;\n }, true);\n};\n\nexport default class Match extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n // config object props should be part of the model props\n // model.config should be no longer used\n this._model = { ...m, ...(m?.config || {}) };\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n sessionChanged(s) {\n this._session.answers = s.answers;\n const complete = isComplete(this._session, this._model);\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n\n this._render();\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n}\n"],"file":"index.js"}
package/lib/main.js ADDED
@@ -0,0 +1,227 @@
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.Main = 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 _correctAnswerToggle = require("@pie-lib/pie-toolbox/correct-answer-toggle");
29
+
30
+ var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
31
+
32
+ var _answerGrid = _interopRequireDefault(require("./answer-grid"));
33
+
34
+ var _styles = require("@material-ui/core/styles");
35
+
36
+ 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; }
37
+
38
+ 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; }
39
+
40
+ 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); }; }
41
+
42
+ 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; } }
43
+
44
+ var Main = /*#__PURE__*/function (_React$Component) {
45
+ (0, _inherits2["default"])(Main, _React$Component);
46
+
47
+ var _super = _createSuper(Main);
48
+
49
+ function Main(props) {
50
+ var _this;
51
+
52
+ (0, _classCallCheck2["default"])(this, Main);
53
+ _this = _super.call(this, props);
54
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "generateAnswers", function (model) {
55
+ var _model$rows;
56
+
57
+ var answers = {};
58
+ (_model$rows = model.rows) === null || _model$rows === void 0 ? void 0 : _model$rows.forEach(function (row) {
59
+ answers[row.id] = new Array(model.layout - 1).fill(false);
60
+ });
61
+ return answers;
62
+ });
63
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isAnswerRegenerationRequired", function (nextProps) {
64
+ var _this$props$model = _this.props.model;
65
+ _this$props$model = _this$props$model === void 0 ? {} : _this$props$model;
66
+ var choiceMode = _this$props$model.choiceMode,
67
+ layout = _this$props$model.layout,
68
+ rows = _this$props$model.rows;
69
+ var _nextProps$session = nextProps.session;
70
+ _nextProps$session = _nextProps$session === void 0 ? {} : _nextProps$session;
71
+ var answers = _nextProps$session.answers;
72
+ var isRequired = false;
73
+
74
+ if (choiceMode !== nextProps.model.choiceMode) {
75
+ isRequired = true;
76
+ }
77
+
78
+ if (layout !== nextProps.model.layout) {
79
+ isRequired = true;
80
+ }
81
+
82
+ if (rows.length !== nextProps.model.rows.length || answers && nextProps.model.rows.length !== Object.keys(answers).length) {
83
+ isRequired = true;
84
+ }
85
+
86
+ return isRequired || !answers;
87
+ });
88
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "callOnSessionChange", function () {
89
+ var onSessionChange = _this.props.onSessionChange;
90
+
91
+ if (onSessionChange) {
92
+ onSessionChange(_this.state.session);
93
+ }
94
+ });
95
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleShowCorrect", function (show) {
96
+ _this.setState({
97
+ showCorrect: show
98
+ });
99
+ });
100
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAnswerChange", function (newAnswers) {
101
+ _this.setState(function (state) {
102
+ return {
103
+ session: _objectSpread(_objectSpread({}, state.session), {}, {
104
+ answers: newAnswers
105
+ })
106
+ };
107
+ }, _this.callOnSessionChange);
108
+ });
109
+ _this.state = {
110
+ session: _objectSpread(_objectSpread({}, props.session), {}, {
111
+ answers: props.session && props.session.answers || _this.generateAnswers(props.model)
112
+ }),
113
+ showCorrect: false
114
+ };
115
+
116
+ _this.callOnSessionChange();
117
+
118
+ return _this;
119
+ }
120
+
121
+ (0, _createClass2["default"])(Main, [{
122
+ key: "UNSAFE_componentWillReceiveProps",
123
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
124
+ var _this2 = this;
125
+
126
+ var regenAnswers = this.isAnswerRegenerationRequired(nextProps);
127
+ this.setState(function (state) {
128
+ return {
129
+ session: _objectSpread(_objectSpread({}, nextProps.session), {}, {
130
+ // regenerate answers if layout or choiceMode change
131
+ answers: regenAnswers ? _this2.generateAnswers(nextProps.model) : nextProps.session.answers
132
+ }),
133
+ showCorrect: _this2.props.model.disabled && !nextProps.model.disabled && state.showCorrect ? false : state.showCorrect
134
+ };
135
+ }, function () {
136
+ if (regenAnswers) _this2.callOnSessionChange();
137
+ });
138
+ }
139
+ }, {
140
+ key: "render",
141
+ value: function render() {
142
+ var _this$props = this.props,
143
+ model = _this$props.model,
144
+ classes = _this$props.classes;
145
+ var _this$state = this.state,
146
+ showCorrect = _this$state.showCorrect,
147
+ session = _this$state.session;
148
+ var _model$correctness = model.correctness,
149
+ correctness = _model$correctness === void 0 ? {} : _model$correctness,
150
+ language = model.language;
151
+ var showCorrectAnswerToggle = correctness.correctness && correctness.correctness !== 'correct';
152
+ return /*#__PURE__*/_react["default"].createElement("div", {
153
+ className: classes.mainContainer
154
+ }, model.teacherInstructions && (0, _renderUi.hasText)(model.teacherInstructions) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
155
+ labels: {
156
+ hidden: 'Show Teacher Instructions',
157
+ visible: 'Hide Teacher Instructions'
158
+ },
159
+ className: classes.collapsible
160
+ }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
161
+ prompt: model.teacherInstructions
162
+ })), model.prompt && /*#__PURE__*/_react["default"].createElement("div", {
163
+ className: classes.prompt
164
+ }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
165
+ prompt: model.prompt
166
+ })), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle.CorrectAnswerToggle, {
167
+ language: language,
168
+ show: showCorrectAnswerToggle,
169
+ toggled: showCorrect,
170
+ onToggle: this.toggleShowCorrect
171
+ }), /*#__PURE__*/_react["default"].createElement(_answerGrid["default"], {
172
+ showCorrect: showCorrect,
173
+ correctAnswers: model.correctResponse,
174
+ disabled: model.disabled,
175
+ view: model.view,
176
+ onAnswerChange: this.onAnswerChange,
177
+ choiceMode: model.choiceMode,
178
+ answers: showCorrect ? model.correctResponse || {} : session.answers,
179
+ headers: model.headers,
180
+ rows: model.rows
181
+ }), model.rationale && (0, _renderUi.hasText)(model.rationale) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
182
+ labels: {
183
+ hidden: 'Show Rationale',
184
+ visible: 'Hide Rationale'
185
+ },
186
+ className: classes.collapsible
187
+ }, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
188
+ prompt: model.rationale
189
+ })), model.feedback && /*#__PURE__*/_react["default"].createElement(_renderUi.Feedback, {
190
+ correctness: correctness.correctness,
191
+ feedback: model.feedback
192
+ }));
193
+ }
194
+ }]);
195
+ return Main;
196
+ }(_react["default"].Component);
197
+
198
+ exports.Main = Main;
199
+ (0, _defineProperty2["default"])(Main, "propTypes", {
200
+ classes: _propTypes["default"].object,
201
+ session: _propTypes["default"].object.isRequired,
202
+ onSessionChange: _propTypes["default"].func,
203
+ model: _propTypes["default"].object.isRequired
204
+ });
205
+
206
+ var styles = function styles(theme) {
207
+ return {
208
+ mainContainer: {
209
+ color: _renderUi.color.text(),
210
+ backgroundColor: _renderUi.color.background()
211
+ },
212
+ main: {
213
+ width: '100%'
214
+ },
215
+ prompt: {
216
+ verticalAlign: 'middle'
217
+ },
218
+ collapsible: {
219
+ marginBottom: theme.spacing.unit * 2
220
+ }
221
+ };
222
+ };
223
+
224
+ var _default = (0, _styles.withStyles)(styles)(Main);
225
+
226
+ exports["default"] = _default;
227
+ //# sourceMappingURL=main.js.map